![](/img/trans.png)
[英]--extra-index-url not work in python requirements.txt
[英]python2; pip parse_requirements with --trusted-host and --extra-index-url
我在用
install_requires = [str(ir.req) for ir in parse_requirements("requirements.txt", session=PipSession())]
与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 .
修复或解决此问题pip install .
? 我可以做一些可怕的事情:
os.system(pip install -r requirements.txt)
setup(...
在setup.py文件中。
requirements.txt和setup.py的隐式耦合让我很困惑。 setup中没有任何内容调用requirements.txt,除非您自己显式解析requirements.txt,但requirements.txt是一个非常标准的python约定。
编辑:我们正在使用执行pip install .
工具(Cloudify,有时是Chef) pip install .
。 我们无法改变这一点。 我必须使用--trusted-host和--extra-index-urls而不使用pip.conf来实现这个可用包。 目前我们正在做os.system技巧。
有很多关于使用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'])
来自goCards的答案是完全有效的,你可能应该从你的setup.py导入pip,如果pip install .
没有办法解决的话pip install .
。 但我想解释一下这里到底发生了什么。 这是你需要知道的:
install_requires
是setuptools唯一支持的选项,它是改进distutils
的第三方软件包(setup.py文件中使用的标准工具,随Python一起分发)。 install_requires
实际要求 ,因此无法将诸如--trusted-host
选项发送到install_requires
。 parse_requirements("requirements.txt", session=PipSession())
。 此函数仅生成包。 诸如--trusted-host bla
类的选项行不会被返回,但是如果你给了一个parse_requirements
则会发送给PackageFinder
。 但是你不希望返回这些选项,因为setuptools不知道这些选项有什么用! 长话短说,如果你想使用pip选项,你需要使用pip。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.