格式化pip的requirements.txt文件,其中一个或多个包具有不同的index-url

时间:2015-03-26 14:50:45

标签: python heroku pip requirements.txt

我正在尝试将一个Django应用程序部署到Heroku,其中一个必需的软件包位于https://testpypi.python.org/pypi上,当然Django位于主PyPI服务器上。

requirements.txt文件如下所示:

Django==1.7.7
-i https://testpypi.python.org/pypi
foo-bar==0.4

运行pip install -r requirements.txt失败,并显示以下错误:

Could not find any downloads that satisfy the requirement Django==1.7.7 (from -r requirements.txt (line 1))
Cleaning up...
No distributions at all found for Django==1.7.7 (from -r requirements.txt (line 1))

所以看起来pip试图在testpypi

上找到Django

所以我尝试了这个:

-i https://pypi.python.org/pypi/
Django==1.7.7
-i https://testpypi.python.org/pypi
foo-bar==0.4

导致相同的错误。

如果我只在需求文件中放置了一个(无所谓),那么pip能够找到包并安装它。

问题:在单个文件中指定多个不同的index-url参数的正确语法是什么,可以通过命令pip install -r file

读取

我认为这不重要但是python是版本3.4.0而pip是版本pip 1.5.2

我已将pip更新到版本6.0.8,错误现在读作:

Could not find any downloads that satisfy the requirement Django==1.7.7 (from -r requirements.txt (line 2))
No distributions at all found for Django==1.7.7 (from -r requirements.txt (line 2))

1 个答案:

答案 0 :(得分:3)

根据定义,任何私有索引定义都将应用于每个包

https://devcenter.heroku.com/articles/python-pip#private-indexes

  

该需求文件中指定的所有依赖项将针对该索引进行解析。

作为一种解决方法,您可以创建多个需求文件并级联它们:

https://devcenter.heroku.com/articles/python-pip#cascading-requirements-files

  

如果您想在代码库中使用多个需求文件,可以使用pip包含其他需求文件的内容:

     

-r ./path/to/prod-requirements.txt

更新:事实证明,处理私有索引的正确方法是使用--extra-index-url开关。来自documentation of pip

  

请注意,使用--index-url会删除PyPI的使用,而使用--extra-index-url会添加其他索引。

所以,放行

--extra-index-url https://testpypi.python.org/pypi
requirements.txt之上

就足够了。根本不需要级联!