【问题标题】:Why is conda build appending py27_0 to my package name if I'm building under python 3.6.1?如果我在 python 3.6.1 下构建,为什么 conda build 会将 py27_0 附加到我的包名称?
【发布时间】:2017-10-05 04:39:09
【问题描述】:

我正在尝试为ProjectQ 制作 conda 配方。在 linux 和 osx 下的构建过程中发生了一些奇怪的事情。我可以手动构建和安装包(即使用克隆的 git repo 目录中的“python setup.py install”)。然而,当我制作一个完全相同的食谱时,它失败了。在 linux 和 osx 上。

我的构建配方是here。特别奇怪的是,即使我在 meta.yaml 文件的构建要求下指定了 python 3.6.*,conda-build 过程将包命名为“projectq-v0.3.0-py27_0”,并且在安装包时,它试图在 python 2.7 目录之一中这样做,这就是我认为它失败的原因。

很明显,我在做一些愚蠢的事情,但我终生无法弄清楚是什么。谁能看到我做错了什么?提前致谢。

【问题讨论】:

  • 好吧,我发现了一个愚蠢的错误,它解决了一个好奇心,但并没有使整个事情奏效。我需要在 meta.yaml 文件的构建和运行要求下指定“python 3.6.*”。我只做过前者,包名由后者决定。说得通。所以现在这个包被称为正确的东西“projectq-v0.3.0-py36_0”,但是当它试图在python2.7库目录之一中安装东西时它仍然失败。在 macOS 和 linux 上仍然失败(根据我的经验,这意味着我做了一些愚蠢的事情)。
  • 您的根 conda 安装的 Python 版本是什么?如果不是 3.6,请尝试在命令行中指定 python 版本 - conda build projectq --python=3.6
  • @darthbith 谢谢,我试过了,我也试过在依赖项中指定“python 3.6.*”。我正在构建正确的可执行文件(我得到以包名称结尾的“py36_0”),但安装仍然失败。

标签: python conda


【解决方案1】:

我想通了。感谢所有花时间查看我的问题的人。真的没有任何人可以为我解决这个问题,因为它是特定于我正在安装的包的。我将尝试总结我所学到的知识,以防其他人遇到任何不同的情况。

  1. 首先,正如我在其中一个 cmets 中所指出的,如果您在构建下指定特定的版本要求,则最好在运行时指定相同的版本要求。最初我在构建下指定了“python 3.6.*”,但在运行时只指定了“python”。这导致包被命名为以“-py27_0”结尾的东西,因为可以理解,包名称取决于运行它需要什么,而不是构建它。
  2. 真正棘手的是要了解 setup.py 脚本中指定的附加要求,当我手动运行“python setup.py install”时会自动安装这些要求,但不是当我尝试在 conda 下构建时正在运行。将这些要求添加到 meta.yaml 配方后,一切都可以正常构建和测试。

因此,课程要与您在构建和运行之间的 conda 要求保持一致,并确保您列出了所有要求,包括可能在 setup.py 中指定的奖励要求文件。

再次感谢所有看过这篇文章的人。

【讨论】:

  • 您可以通过在构建中编写类似这样的内容来自动处理 Python 依赖项:github.com/Cantera/conda-recipes/blob/master/cantera/… 并在下面查看运行时依赖项。这样,当您编写conda build projectq --python=X.Y 时,它会自动处理:-)(免责声明:我是该代码的作者,但我不隶属于 Continuum,因此这可能不是“正确”的做法)
  • 双括号中的值是Jinja变量,由构建脚本根据构建过程中设置的变量填充
  • @darthbith 再次感谢您的提示。感谢您在 Cantera 上的工作(在 Goodwin 工作时我是他的朋友)。
  • 哈!小世界! conda build 的文档不是最好的,很高兴分享我的经验:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2020-12-27
  • 2019-12-08
  • 2021-06-24
相关资源
最近更新 更多