pip从哪里下载.whl文件?

18

我想使用pip安装一个Python包,但由于我所在的代理,pip无法连接到互联网。

因此我的问题是:pip在哪里查找.whe文件以便下载它们?我不能只使用浏览器(可以正常连接到互联网)来下载.whe文件吗?使用已下载的.whl文件安装包不成问题。


https://pypi.python.org/pypi - Mad Physicist
为什么不直接配置代理? - Martijn Pieters
@MartijnPieters 这是我们公司网络的代理,需要输入用户名和密码。我曾经在Windows shell中使用set HTTP_PROXY="username:password@proxy..."进行配置,但出于某种原因,现在无法使用了。 - elzell
2
为什么不问一下你的IT部门如何配置代理呢?Pip支持大多数代理场景,它只是另一个HTTPS客户端。 - Martijn Pieters
现在更加相关,因为pip不再支持Python < 2.7.9。 - Jonathan Rys
显示剩余3条评论
2个回答

14

pip 搜索 Python 包索引(PyPI), 每个软件包都列出其下载链接 (包括任何 wheel 包) 并提供直接下载链接。 软件包页面通常采用以下形式: https://pypi.python.org/pypi/<package_name>https://pypi.python.org/pypi/<package_name>/<version> (特定版本)。

如果您只能通过浏览器手动下载 wheel 文件,则无论将该文件放在何处,只需直接安装 wheel 文件即可:

pip install path/to/wheel.whl

不过,pip 完全支持通过代理下载:

pip --proxy username:password@proxy_server:proxy_port install ...

请参阅--proxy命令行开关文档。您可以将代理设置添加到pip配置文件中,以便不必每次在命令行上设置它,或者通过设置环境变量;请参见Pip用户指南中的使用代理服务器部分


在2021年,这个答案只适用于Python 2.7.9+。 - Jonathan Rys
@JonathanRys:你是指以什么方式?Python 2.7.9 已经不太相关了,还是你的意思是这不适用于 Python 3.x?我可以向你保证,我的答案今天和三年前一样相关。 - Martijn Pieters
你的评论在今天对于支持的Python版本是相关的,但对于Python < 2.7.9 已不再适用,因为 PyPi 已经全面停止了非 SNI 支持。这意味着 pip 和 get-pip 在那里不再可用。 - Jonathan Rys
@JonathanRys 是的,或者更确切地说,CDN提供商Fastly正在停止支持,因此PyPI必须跟进。我已经为旧版Python保留了一些后移版本,但即使您现在无法迁移到Python 2之外,出于几个其他原因,您也不应该使用低于Python 2.7.9+的任何版本,尤其是由于安全漏洞。 - Martijn Pieters

8

如何获取pip下载文件所使用的URL:

  • https://pypi.python.org/pypi/package_name/json获取JSON
  • 解析发布部分,选择最新版本
  • 浏览可用文件(通常不止一个),考虑您的平台(例如x32 vs x64、Windows或Linux版本、安装的Python等)
  • 使用url属性

例如:

import requests
package = requests.get("https://pypi.python.org/pypi/pandas/json").json()
max_ver = max(package["releases"].keys())
# ... check compatibility
file = get_file_idx(package['releases'][max_ver])
urllib.urlretrieve(file["url"])

1
展示“requests”路径固然很好,但当用户遇到配置代理的问题时,这样做就显得毫无意义了,不是吗?一个人类只需要前往包页面,而不是JSON URL。 - Martijn Pieters
@MartijnPieters 我知道这不是对原问题的回答,但我想这个片段在类似的情况下可能会有用。 - Marat

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