在 setup.py 中使用额外的 python 包索引 url

Posted

技术标签:

【中文标题】在 setup.py 中使用额外的 python 包索引 url【英文标题】:Using an extra python package index url with setup.py 【发布时间】: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 上的包?

【问题讨论】:

【参考方案1】:

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

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

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

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

    pip 命令提供--index-url 标志 在pip.conf文件中定义index-url 定义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

【讨论】:

感谢 setup.cfg 示例,运行良好,不幸的是,现在不推荐轻松安装:setuptools.pypa.io/en/latest/deprecated/easy_install.html【参考方案5】:

如果你是包的维护者,并且你想在 PyPi 以外的地方为你的包托管一个或多个依赖项,你可以在你的发行版的 setup.py 文件中使用 setuptools 的 dependency_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/987 和 github.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 中的所有包,所以我不需要添加第二个条目。

【讨论】:

这个答案似乎是错误的。在此处查看答案的最后一段:***.com/questions/13353869/…

以上是关于在 setup.py 中使用额外的 python 包索引 url的主要内容,如果未能解决你的问题,请参考以下文章

setup.py:限制python解释器的允许版本

Python中setup.py一些不为人知的技巧

我的setup.py在python 3.8.1中安装所有依赖项有什么问题

setup.py 不尊重 PIP_INDEX_URL

在 Python 包中查找数据文件 - setup.py 的 package_data=... 可能已损坏?

为啥 ./configure 在 python setup.py 中不起作用?