我正在尝试将一个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
所以我尝试了这个:
-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))
答案 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
之上就足够了。根本不需要级联!