我在用
install_requires = [str(ir.req) for ir in parse_requirements("requirements.txt", session=PipSession())]
with pip install .
。但是,这似乎不适用于如下所示的requirements.txt:
--trusted-host blah
--extra-index-url blah2
...
(pip8.0.0 中添加了对 --trusted-host 的支持)。 blah 的安装失败,因为它抱怨它不是不受信任的主机,就好像它从未处理过第一行一样。
然而,pip install -r requirements.txt
工作完美,所以这些选项是正确的。
这意味着有东西parse_requirements
没有做。我的问题是:我该如何修复或解决这个问题,仅使用pip install .
?我可以做一些可怕的事情,比如:
os.system(pip install -r requirements.txt)
setup(...
在 setup.py 文件中。
requirements.txt 和 setup.py 的隐式耦合让我感到困惑。除非您自己显式解析requirements.txt,否则安装程序中没有任何内容会调用requirements.txt,但requirements.txt是一个非常标准的python约定。
编辑:我们正在使用工具(Cloudify,有时是 Chef)来执行pip install .
。我们无法改变这一点。我必须将其作为可 pippable 包使用,使用 --trusted-host 和 --extra-index-urls ,而不使用 pip.conf 。目前我们正在做 os.system 技巧。
关于使用 setup.py vrs 已有很多文章。要求.txt。 setup.py 用于抽象需求。 requirements.txt是具体的要求。换句话说,它们有不同的目的。 requirements.txt 适用于环境,而 setup.py 适用于包。因此,setup.py 从requirement.txt 中读取是没有意义的,就像deb 包从Chef 说明书中读取没有意义一样。抽象与抽象。具体要求 https://caremad.io/2013/07/setup-vs-requirement/
通常人们这样做的原因是他们希望支持人们安装他们的软件包pip install -r requirements.txt
从签出中无需列出其依赖项两次。这是一个合理的想法,这就是为什么需求文件格式有一个支持它的构造,只需创建一个包含“.”的requirements.txt 文件。或“-e”。 pip 将自动安装该项目及其所有依赖项。
编辑:
由于 pip 不是一个库,因此使用程序中最暴露的部分是最安全的(在我看来)。替代方案os.system
is
import pip
pip.main(['install','-r','requirements.txt'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)