繁体   English   中英

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

[英]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 . 但我想解释一下这里到底发生了什么。 这是你需要知道的:

  1. install_requires是setuptools唯一支持的选项,它是改进distutils的第三方软件包(setup.py文件中使用的标准工具,随Python一起分发)。
  2. 根据设计,setuptools 只接受install_requires实际要求 ,因此无法将诸如--trusted-host选项发送到install_requires
  3. 这就是你使用parse_requirements("requirements.txt", session=PipSession()) 此函数仅生成包。 诸如--trusted-host bla类的选项行不会被返回,但是如果你给了一个parse_requirements则会发送给PackageFinder 但是你不希望返回这些选项,因为setuptools不知道这些选项有什么用!

长话短说,如果你想使用pip选项,你需要使用pip。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM