setup.py没有遵守PIP_INDEX_URL的设置

5
我正在运行一个本地的pypi服务器。我可以通过在pip命令的-i选项中指定它或设置PIP_INDEX_URL环境变量来从该服务器安装软件包。当我安装具有先决条件的软件包时,setup.py历史上一直尊重PIP_INDEX_URL环境变量,从我的本地服务器获取其他软件包。
然而,在最近安装的几个系统上,它的行为不同。例如,运行python setup.py develop会失败,因为它试图从pypi.python.org安装先决条件软件包。
我已经更新了所有相关的Python软件包(pythondistributevirtualenvpip等)在我测试的所有系统上,并继续看到这种差异。在我的“原始”系统上,setup.py从我PIP_INDEX_URL环境变量中指定的pypi服务器下载先决条件。在较新的系统上,我似乎无法让它遵守这个变量。
我错过了什么?

看起来这个问题已经在https://dev59.com/GXA75IYBdhLWcg3wGlEa中得到了部分回答。虽然它没有解释为什么环境变量被不一致地使用,但是它告诉我如何通过指定dependency_links来解决我的问题。 - zenzic
1
我终于找到了罪魁祸首。在旧服务器上,我有一个~/.pydistutils文件,它指示easy_install使用我的pypi服务器。一旦我在新服务器上创建了这个文件,我的部署就又正常工作了。它仍然没有使用PIP_INDEX_URL变量,但这给了我一个解决方法。 - zenzic
2个回答

3

谢谢提供的信息。我会尝试一下。不过,我仍然感到困惑,为什么运行相同软件的系统表现不同呢? - zenzic
如果您使用python setup.py develop,那么distutils会负责安装。关于背景信息,有一篇文章总结了Python打包的(遗憾)现状:http://lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere/ - iljau
这不是我期望的结果。我仍在苦苦思索这个问题,但却找不到可接受的解决方案。问题在于 python setup.py develop 使用 easy_install 安装 setup.py 中指定的依赖项(install_requires)。然而,easy_install 忽略了 PIP_INDEX_URL 环境变量。我不想在 setup.py 或 setup.cfg 中硬编码索引服务器,而是希望使用环境中指定的服务器。有没有更好的方法来实现这一点? - zenzic

3
我遇到了相同的问题。基本上,setup.py 使用 setuptools 来利用 easy_install 而不是 pip。因此,它会忽略您设置的任何 pip-related 环境变量。
与其使用 python setup.py develop,您可以运行 pip(从包的顶部)pip install -e . 来产生相同的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接