【问题标题】:setup.py not honoring PIP_INDEX_URLsetup.py 不尊重 PIP_INDEX_URL
【发布时间】:2014-03-08 09:29:29
【问题描述】:

我正在运行本地 pypi server。我可以通过使用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 服务器下载先决条件。在较新的系统上,我似乎无法让它尊重这个变量。

我错过了什么?

【问题讨论】:

  • 看来stackoverflow.com/questions/3472430/… 部分回答了这个问题。它没有解释为什么环境变量被不一致地尊重,但它确实告诉我如何通过指定dependency_links来解决我的问题。
  • 我终于找到了罪魁祸首。在旧服务器上,我有一个 ~/.pydistutils 文件,它指示 easy_install 使用我的 pypi 服务器。在新服务器上创建此文件后,我的部署再次工作。它仍然不使用 PIP_INDEX_URL 变量,但这给了我一个解决方法。

标签: python pypi


【解决方案1】:

我遇到了同样的问题。从根本上说,setup.py 使用的是setuptools,它利用了easy_install,而不是pip。因此,它会忽略您设置的任何 pip-related 环境变量。

您可以运行 pip(从包的顶部)pip install -e . 来产生相同的效果,而不是使用 python setup.py develop

【讨论】:

    【解决方案2】:

    在与您的setup.py 相同的文件夹中创建setup.cfg,内容如下:

    [easy_install]
    allow_hosts = *.myintranet.example.com
    

    发件人:http://pythonhosted.org/setuptools/easy_install.html#restricting-downloads-with-allow-hosts

    您可以使用--allow-hosts (-H) 选项来限制 EasyInstall 将在哪些域上查找链接和下载。

    --allow-hosts=None 完全阻止下载。


    【讨论】:

    • 感谢您的信息。我会试试看。不过,我仍然对为什么我看到运行相同软件的系统之间的行为不同感到困惑。
    • @zenzic 如果你使用python setup.py develop,那么distutils 负责安装。背景信息有一篇文章总结了python打包的(对不起)状态:lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere
    • 这是我所期望但没有看到的。我仍在努力解决这个问题,并没有找到可接受的解决方案。归根结底,python setup.py develop 使用 easy_install 安装 setup.py (install_requires) 中指定的依赖项。 easy_install 忽略 PIP_INDEX_URL 环境变量。我不想在 setup.py 或 setup.cfg 中硬编码索引服务器,我希望它使用环境中指定的服务器。有没有更好的方法来做到这一点?
    猜你喜欢
    • 2011-04-30
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多