【问题标题】:How to include pip-only package when building conda package by using conda-build?使用 conda-build 构建 conda 包时如何包含 pip-only 包?
【发布时间】:2020-12-27 11:00:07
【问题描述】:

我想为我的项目构建一个 Conda 包。但是,有一个包仅在 pip 上(未上传到 Conda 频道)。使用 conda-build 命令时如何仅包含 pip 包?

我尝试使用 Conda 骨架从 PyPI URL 构建一个包,但它不起作用,因为 PyPI 站点上的文件是 .whl 文件,而不是像 conda 骨架教程中的 tar.gz 文件。我该如何解决这个问题?

这是我在运行 conda 构建时遇到的错误。

conda_build.exceptions.DependencyNeedsBuildingError: Unsatisfiable dependencies for platform osx-64: {'plaidml'}

以及使用 conda skeleton pypi plaidml-keras 为 plaidml 包构建骨架

Error: No source urls found for plaidml-keras

在构建 conda 包时如何包含 pip only 包是否有好的做法?

【问题讨论】:

  • AFAIK,你有正确的想法:尝试将依赖项转换为 Conda 包。不幸的是,该软件包看起来像是一个相当复杂的构建 - skeleton 不太可能完成这项工作。不确定这里的任何通用建议是否会有所帮助;相反,我会联系开发人员,看看他们是否支持你开发 Conda 版本。
  • @merv 感谢您的评论。我会尝试与开发者取得联系。
  • 这个程序可以工作:stackoverflow.com/a/29304731/8288189

标签: python conda pypi conda-build


【解决方案1】:

我查看了 conda-build 文档,看起来您可以使用轮子作为依赖项来构建 conda 包。来自conda-build user guide docs

要从 wheel 文件构建 conda 包,请将 .whl 文件安装在 conda 配方的 bld.bat 或 build.sh 文件。

您可以在 conda 的源代码部分下载 .whl 文件 配方的 meta.yaml 文件。

您可以将 URL 直接放在 pip install 命令中。

示例:TensorFlow 的 conda 配方有一个 pip install 命令 build.sh 带有 .whl 文件的 URL。 meta.yaml 文件没有 下载或列出 .whl 文件。

注意

重要的是 pip 只安装一个所需的软件包。每当 可能,使用 conda 而不是 pip 安装依赖项。

我们强烈建议在 pip 安装中使用 --no-deps 选项 命令。

如果您在没有 --no-deps 选项的情况下运行 pip install,pip 通常会 在您的 conda 配方中安装依赖项,这些依赖项将 成为您包裹的一部分。这会浪费包装中的空间,并且 增加文件重叠、文件破坏和损坏的风险 包。

【讨论】:

  • 也许还值得从文档中提及:“最好的方法是获取软件的源代码并从源代码而不是从轮子构建 conda 包。这有助于确保新包使用其他 conda 包来满足它的依赖关系。第二个最好的方法是从 wheel 文件构建一个 conda 包。这比 pip install 告诉 conda 更多关于存在的文件的信息。它也比 pip install 不太可能导致错误覆盖(或“破坏”)文件。从 wheel 文件构建 conda 包还有一个优点,即任何破坏都更多......”
猜你喜欢
  • 2023-03-29
  • 2018-10-19
  • 2020-03-29
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2018-04-06
相关资源
最近更新 更多