进行conda构建时找不到任何文件



我正在尝试构建一个简单的包,用于上传到anaconda云。我已经花了很长的时间来让一个小例子发挥作用,但我无法在目标机器上使用conda构建的包(总是给我一个ModuleNotFound错误)。然而,我怀疑这是目标机器的错(更有可能是构建过程搞砸了),所以请耐心等待,让我解释一下我做了什么。

我的python代码只是一个文件,其中有一个函数

def plusone(number):
return number+1

如前所述,我想使用conda-build进行构建,并将包上传到我的anaconda云通道。我创建了一个名为conda-recipe的文件夹,其中包含bld.bat、build.sh和meta.yaml文件。所以完整的结构看起来是这样的:

conda test            (<- root folder)
conda-recipe
bld.bat
build.sh
meta.yaml
dist
<files created by running setup.py>
plusone
__init__py
plusone.py
plusone.egg-info
<created info-files>
README.md
requirements.txt            (<- only contains a ".")
setup.py

我通过Anaconda命令行工具更改为项目根目录,然后运行

conda build conda-recipe

一切似乎都很好,上传到anaconda云也在工作(包已上传)。如果我换成另一台机器,我甚至可以通过运行安装软件包

conda install -c <MYCHANNEL> <PACKAGENAME>

然而,当我从Jupyter笔记本或Pycharm中运行包时,我会收到一个与包有关的"ModuleNotFound"错误。首先,我认为这可能与我的目标系统有关(即我在哪里使用包),我已经阅读了几篇文章,在这些文章中,我确保PYTHONPATH设置正确,并且python安装确实会查看包安装到的文件夹。我知道这个包真的安装好了,python安装会查找相应的目录。此外,conda list表示软件包已安装。

在这个问题上花了1天半的时间之后,我花了一些时间来回顾我的构建过程,并完成了以下操作:如果我只运行带有参数sdist的setup.py文件,那么就会创建一个tar.gz文件。我可以上传这个文件,anaconda云就会识别出这个文件是pypi档案。我甚至可以在目标机器上下载并安装这个文件,并在那里成功地使用它。所以,一般来说,我会说我的代码还可以(惊喜),目标机器的python安装也可以。因此,我回到了conda构建命令。相信我,我已经看了不止一次文件。

然而,conda构建的输出在结尾处表示:

Packaging plusone
INFO:conda_build.build:Packaging plusone
INFO conda_build.build:build(1571): Packaging plusone
Packaging plusone-12.0-0
INFO:conda_build.build:Packaging plusone-12.0-0
INFO conda_build.build:bundle_conda(891): Packaging plusone-12.0-0
No files or script found for output plusone
WARNING:conda_build.build:No files or script found for output plusone
WARNING conda_build.build:bundle_conda(971): No files or script found for output plusone
number of files: 0

对我来说,这表明conda构建过程并没有真正产生可行的输出。因此,我尝试了几个选项来指定meta.yaml:url,git_url,path中的源部分。没有一个会导致不同的输出。看看我的meta.yaml的最新形式:

package:
name: "plusone"
version: 12.0
requirements:
host:
- python=3.7
- pip
- setuptools
run:
- python
source:
path: ../plusone

我的bld.bat:

<ABSOLUTE path to python>\python.exe "<ABSOLUTE path to setup>\setup.py" install
if errorlevel 1 exit 1

我的建筑.sh:$PYTHON setup.py安装

无论我如何更改我的meta.yaml-File,我总是得到没有文件可供输出的输出。然而,当检查anaconda构建目录时,我可以看到有名为src_cache和git_cache的非空文件夹,所以我知道anaconda至少可以访问这些文件。

那么,有人能告诉我,为什么

  1. conda build告诉我有0个文件
  2. 我不能使用我的conda模块,它总是给我一个ModuleNotFound错误

经过再次搜索,意外地,我在S/O上的此处找到了此页面:在此处输入链接描述。事实证明,更改一些内容为我解决了这个问题。meta.yaml被更改为包含以下内部源代码部分:

source:
path: ../../

我的bld.bat被改为

"%PYTHON%" ./conda_test/setup.py sdist install

我希望这对任何人都有帮助。

对我来说,我的condameta.yaml文件缺少一个build节。我通过添加仅包含pythonbuild节(感谢@merv对丢失的run节的评论,使我走上正轨),成功修复了我的0个文件发现的错误。

所以现在我的食谱看起来像

package:
name: mypackage
version: {{ GIT_DESCRIBE_TAG }}
source:
path: ..
requirements:
build:
- python
run:
- astropy
- ipywidgets
- matplotlib
- pooch
- scipy
- tifffile

最新更新