【问题标题】:Using an extra python package index url with setup.py在 setup.py 中使用额外的 python 包索引 url
【发布时间】:2014-08-18 01:51:21
【问题描述】:

有没有办法将额外的 Python 包索引 (ala pip --extra-index-url pypi.example.org mypackage) 与 setup.py 一起使用,以便运行 python setup.py install 可以找到托管在 pypi.example.org 上的包?

【问题讨论】:

    标签: python pip packaging setup.py pypi


    【解决方案1】:

    我想发布一个最新的答案,因为两个最重要的答案都已过时; easy_install 的使用已被 setuptools 弃用。

    https://setuptools.pypa.io/en/latest/deprecated/easy_install.html

    Easy Install 已弃用。不要使用它。而是使用点子。如果您认为需要 Easy Install,请联系 PyPA 团队(pip 或 setuptools 的票很好),描述您的用例。

    请使用pip 继续前进。您可以执行以下操作之一:

    1. pip 命令提供--index-url 标志
    2. pip.conf文件中定义index-url
    3. 定义PIP_INDEX_URL环境变量

    https://pip.pypa.io/en/stable/topics/configuration/

    【讨论】:

      【解决方案2】:

      使用 Dockerfile 时找到解决方案:

      RUN cd flask-mongoengine-0.9.5 && \
          /bin/echo -e [easy_install]\\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple >> setup.cfg && \
          python setup.py install
      

      /bin/echo -e [easy_install]\\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple 将存在于文件 setup.cfg 中:

      [easy_install]
      index-url = https://pypi.tuna.tsinghua.edu.cn/simple
      

      【讨论】:

      • 为什么不在您的源存储库中包含 flask-mogoengin-0.9.5/setup.cfg?为什么要在 docker build 时创建它?
      • @JasonHarrison 这不是创建而是追加。通过这样做,我们在构建 docker 镜像时不需要添加/复制一个额外的修改 setup.cfg 文件,一个 Dockerfile 并且一切正常!
      • 截至 2021 年 8 月,'index-url' 应该变成 'index_url',至少这是我从 setuptools `UserWarning 得到的建议:使用破折号分隔的 'index-url' 不会在未来的版本中得到支持。请改用下划线名称“index_url”`
      【解决方案3】:

      以下对我有用(开发,而不是安装):

      $ python setup.py develop --index-url https://x.com/n/r/pypi-proxy/simple
      

      https://x.com/n/r/pypi-proxy/simple 是本地 PyPI 存储库。

      【讨论】:

      • 不工作,并且python setup.py install --help 没有任何与--index-url 相关的参数
      • @NOZUONOHIGH,谢谢,我更正了我的答案——接受 index-url 标志的是“开发”,而不是“安装”。
      【解决方案4】:

      setuptools 在后台使用 easy_install

      它依赖于 setup.cfg~/.pydistutils.cfg,如 here 所述。

      packages 的额外路径可以用find_links 在这些文件中定义。您可以使用 index_url 覆盖注册表 url,但不能提供 extra-index-url。以下示例受文档启发:

      [easy_install]
      find_links = http://mypackages.example.com/somedir/
                   http://turbogears.org/download/
                   http://peak.telecommunity.com/dist/
      index-url = https://mypi.example.com
      

      【讨论】:

      【解决方案5】:

      如果你是包的维护者,并且你想在 PyPi 以外的地方为你的包托管一个或多个依赖项,你可以在你的发行版的 setup.py 文件中使用 setuptoolsdependency_links 选项。这允许您提供一个明确的位置来放置您的包。

      例如:

      from setuptools import setup
      
      setup(
          name='somepackage',
          install_requires=[
              'somedep'
          ],
          dependency_links=[
              'https://pypi.example.org/pypi/somedep/'
          ]
          # ...
      )
      

      如果您托管自己的索引服务器,则需要提供指向包含每个鸡蛋实际下载链接的页面的链接,而不是列出所有包的页面(例如https://pypi.example.org/pypi/somedep/,而不是https://pypi.example.org/

      【讨论】:

      • 包含此 setup.py 的位置会更有帮助。
      • 据我所知,依赖链接已被弃用,例如:github.com/pypa/setuptools/issues/987github.com/pypa/pip/issues/4187
      • 答案中的链接说 pip 现在忽略了dependency_links,但没有说明改用什么。
      • 有人找到替代品了吗?
      • 这似乎不再起作用,因为 pypi 从 v19.0 开始不再支持 --process-dependency-links
      【解决方案6】:

      您可以在 requirements.txt 文件中包含--extra-index-urls。见:http://pip.readthedocs.org/en/0.8.3/requirement-format.html

      【讨论】:

      • 我不认为这是正确的。该问题专门询问如何控制setup.py 所做的事情(我们可以假设使用setuptools)并且IIUC requirements.txt 仅由pip 兑现
      • 我最终放弃了 setup.py 并使用了这种方法。
      • setuptools 无法在 requirements.txt 中呈现 --extra-index-urls。它唯一需要的是带有 deps 版本详细信息等的字符串列表。requests>=2.19
      【解决方案7】:

      据我所知,你不能这样做。 你需要告诉 pip 这个,或者像你提到的那样传递一个参数,或者在用户环境中设置它。

      检查我的 ~/.pip/pip.conf:

      [global]
      download_cache = ~/.cache/pip
      index-url = http://user:pass@localpypiserver.com:80/simple
      timeout = 300
      

      在这种情况下,我的本地 pypiserver 也代理了 pypi.python.org 中的所有包,所以我不需要添加第二个条目。

      【讨论】:

      猜你喜欢
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      相关资源
      最近更新 更多