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

时间:2016-02-08 21:48:02

标签: python pip

我正在使用

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 .修复或解决此问题?我可以做一些可怕的事情:

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)。我们无法改变这一点。我必须使用--trusted-host和--extra-index-urls而不使用pip.conf来实现这个可用包。目前我们正在做os.system技巧。

2 个答案:

答案 0 :(得分:5)

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

人们这样做的原因通常是他们希望支持人们在结账时使用add_subdirectory(opencv-3.1.0) target_link_libraries(foo opencv-core) 安装他们的软件包,而无需两次列出他们的依赖项。这是一个合理的事情,这就是为什么需求文件格式有一个启用它的构造,只需创建一个包含"。"的requirements.txt文件。或" -e。"和pip将自动安装项目及其所有依赖项。

编辑: 由于pip不是库,因此使用程序中暴露最多的部分是最安全的(在我看来)。 pip install -r requirements.txt的替代方案是

os.system

答案 1 :(得分:2)

This answer from goCards完全有效,如果无法绕过pip install .,您应该从setup.py导入pip。但我想解释一下这里到底发生了什么。这是你需要知道的:

  1. install_requires是一个仅由setuptools支持的选项,这是一个第三方软件包,它改进了distutils(setup.py文件中使用的标准工具,并随Python一起分发)。
  2. 按照设计,设置工具only accepts actual requirements in install_requires,因此--trusted-host等选项无法发送到install_requires
  3. 这就是您使用parse_requirements("requirements.txt", session=PipSession())的原因。此函数仅生成包。不会返回--trusted-host bla等选项行,但如果您向PackageFinder提供了parse_requirements,则会将其发送给git "/tmp/node_exporter" do repository 'https://github.com/prometheus/node_exporter.git' revision 'master' action :sync end 。但是你不希望返回这些选项,因为setuptools不知道这些选项是什么!
  4. 长话短说,如果你想使用pip选项,你需要使用pip。