在 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 3.8.1中安装所有依赖项有什么问题