【问题标题】:install a pre-build wheel file as part of setup requirement作为设置要求的一部分安装预构建轮文件
【发布时间】:2019-08-08 13:30:47
【问题描述】:

我有一个 python 项目,我正在使用 Facebook Research 的 maskrcnn-benchmark 项目。问题是 facebook 项目的 setup 文件依赖于 pytorch 即安装文件有一个导入行,如:

import torch

所以,我需要预先安装pytorch,这给我带来了一些问题。对我来说,最干净的解决方案是,如果我可以将 maskrcnn-benchmark 项目预构建为 wheel 及其所有依赖项,例如 pytorch,然后将此轮作为要求添加到我的 setup.py 文件中。

但是,我找不到这样做的简单方法。有没有办法在python项目的安装文件中添加一个轮文件作为install_requires步骤。

【问题讨论】:

  • 由于我不熟悉 torch 在您的 setup.py 中的使用方式,您需要做的不是直接导入它,而是创建一个包装函数,在该位置导入该包被使用,并且依赖应该被声明为setup_requires而不是install_requires。对于导入和使用 Cython 的包,this thread 涵盖了类似的问题。
  • 此导入不在我的设置文件中,而是在 maskrcnn-benchmark 即 Facebook 项目中

标签: python pip setup.py python-wheel


【解决方案1】:

maskrcnn-benchmark 项目应在install_requirements= 中包含torch==1.0.1(或任何版本)(以及任何其他要求)。

然后,你可以使用

pip wheel . --wheel-dir /tmp/deps

pip/tmp/deps 中收集轮子(针对您当前的架构!)。然后,从 wheel 目录安装依赖项,

pip install --find-links=/tmp/deps -e .

此技术也适用于其他目标类型,例如 -r requirements.txt

编辑:如果您还想为项目本身构建一个轮子,那就是python setup.py bdist_wheel,但这不会寻找依赖项。

【讨论】:

  • 感谢您的回答。那么是否可以在第一步中为 maskrcnn-project 添加这个生成的轮子作为 setup.py 文件中的要求。我问的原因是这个安装文件被另一个项目拾取并被安装。因此,有了这些要求,我就可以在不打扰客户的情况下进行这些更改。
  • 这些不是生成的轮子,它们是从 PyPI 下载的轮子。 (我添加了关于如何为项目本身构建轮子的编辑。)一般来说,pip 会很乐意下载所有依赖项的轮子,只要它们被列出。我的回答更适合离线/可重现的安装场景。
  • 是的,我的问题是对于 maskrcnn-benchmark 项目,setup.py 本身是指 Torch,即 setup.py 文件中有一个 import torch 行。所以,我的想法是将 maskrcnn 预先构建为一个轮子,然后从我的设置中安装它。所以,我猜这真的做不到。
  • 好吧,在这种情况下,您可以拥有一个依赖于 torch 和 maskrcnn-benchmark 的“包装器”项目,因此在调用 maskrcnn-benchmark 的 setup.py 之前安装了 torch,但它变得很繁琐。另一种选择是编辑github.com/facebookresearch/maskrcnn-benchmark/blob/…,使torch 导入成为可选。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多