python2; 使用--trusted-host和--extra-index-url pip parse_requirements

Tom*_*mmy 10 python pip

我在用

install_requires = [str(ir.req) for ir in parse_requirements("requirements.txt", session=PipSession())]
Run Code Online (Sandbox Code Playgroud)

pip install ..但是,这似乎不适用于看起来像这样的requirements.txt:

--trusted-host blah
--extra-index-url blah2
...
Run Code Online (Sandbox Code Playgroud)

(在pip8.0.0中添加了对--trusted-host的支持).从blah安装失败,因为它抱怨它不是一个不受信任的主机,好像它从未处理过第一行.

然而,pip install -r requirements.txt完美的工作,所以这些选项是正确的.

这意味着有些东西parse_requirements没有做.我的问题是:我如何使用它来解决或解决这个问题pip install .?我可以做一些可怕的事情:

os.system(pip install -r requirements.txt)
setup(...
Run Code Online (Sandbox Code Playgroud)

在setup.py文件中.

requirements.txt和setup.py的隐式耦合让我很困惑.setup中没有任何内容调用requirements.txt,除非您自己显式解析requirements.txt,但requirements.txt是一个非常标准的python约定.

编辑:我们正在使用执行a的工具(Cloudify,有时是Chef)pip install ..我们无法改变这一点.我必须使用--trusted-host和--extra-index-urls而不使用pip.conf来实现这个可用包.目前我们正在做os.system技巧.

goC*_*rds 5

有很多关于使用setup.py vrs的文章.requirements.txt.Setup.py适用于抽象需求.Requirements.txt用于具体要求.换句话说,它们用于不同的目的.而requirements.txt适用于环境,而setup.py适用于包.因此,setup.py从requires.txt中读取就没有意义,就像deb包从Chef菜谱中读取一样没有意义.抽象的vrs.具体要求

通常人们这样做的原因是他们希望支持人们pip install -r requirements.txt在结账时安装他们的包,而不需要两次列出他们的依赖项.这是一个合理的想法,这就是为什么需求文件格式有一个启用它的构造,只需创建一个包含"."的requirements.txt文件.或"-e".和pip将自动安装项目及其所有依赖项.

编辑:由于pip不是一个库,使用程序中最暴露的部分是最安全的(在我看来).替代os.system

import pip
pip.main(['install','-r','requirements.txt'])
Run Code Online (Sandbox Code Playgroud)