【问题标题】:Doing a conda-build does not find any files执行 conda-build 找不到任何文件
【发布时间】:2021-10-31 23:05:54
【问题描述】:

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

我的 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 Notebook 或 Pycharm 中运行包时,我收到关于我的包的“ModuleNotFound”错误。首先,我认为这可能与我的目标系统(即我使用包的位置)有关,我已经阅读了几篇文章,其中我确保 PYTHONPATH 设置正确,并且 python 安装确实查看了所在的文件夹包安装到。我知道这个包真的被安装了,python 安装会查看相应的目录。另外,conda list 表示该软件包已安装。

在这个问题上投入了 1 1/2 天后,我花时间审查了我的构建过程并完成了以下操作:如果我只运行带有参数 sdist 的 setup.py 文件,则会创建一个 tar.gz 文件.我可以上传这个,anaconda cloud 识别出该文件是一个 pypi-Archive。我什至可以在目标机器上下载并安装此文件,然后成功在那里使用它。所以,一般来说,我会说我的代码没问题(惊喜),目标机器的 python 安装也没问题。因此,我回到了 conda-build-command。相信我,我看过the documentation 不止一次。

但是,conda-build 的输出最后会显示以下内容:

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、路径。没有一个导致不同的输出。以最新形式查看我的 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

我的 build.sh: $PYTHON setup.py 安装

无论我如何更改我的 meta.yaml 文件,我总是得到没有找到用于输出的文件的输出。但是,在查看 anaconda 构建目录时,我可以看到有名为 src_cache 和 git_cache 的非空文件夹,因此我知道 anaconda 至少可以访问这些文件。

所以 - 谁能告诉我,为什么

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

【问题讨论】:

  • 您对run: 的要求在哪里?在我看来, conda-build 没有将其识别为 Python 包。
  • @merv:运行是什么意思:- 要求?我不知道我需要这样的东西?如果你能告诉我把它们放在哪里,那么我可以做一个测试......
  • 如第一个示例here in the docs。在requirements: 下应该有一个run: 部分,在那里指定- python
  • 啊-好的。我明白了,谢谢@merv。我已经更新了 meta.yaml,但结果还是一样。实际上,我在需求部分有不同的部分,但最终得到了上述版本。我已经相应地更新了我的问题。

标签: python anaconda conda conda-build


【解决方案1】:

对我来说,我的 conda meta.yaml 文件缺少 build 部分。 我设法通过添加一个仅包含 pythonbuild 部分来修复我的 0 个文件发现错误(感谢 @merv 让我在您对缺少的 run 部分的评论中走上正轨)。

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

package:
  name: mypackage
  version: {{ GIT_DESCRIBE_TAG }}

source:
  path: ..

requirements:
  build:
    - python
  run:
    - astropy
    - ipywidgets
    - matplotlib
    - pooch
    - scipy
    - tifffile

【讨论】:

    【解决方案2】:

    再次搜索后,我偶然在 S/O 上找到了这个页面:enter link description here。事实证明,改变一些事情对我来说解决了这个问题。 meta.yaml 已更改为包含以下源代码部分:

    source:
      path: ../../
    

    我的 bld.bat 被更改为

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2018-12-23
      • 2012-07-30
      • 2017-06-27
      • 2021-08-17
      • 1970-01-01
      相关资源
      最近更新 更多