gpt4 book ai didi

python - pip 能够搜索包但安装失败并出现错误

转载 作者:行者123 更新时间:2023-12-01 02:14:33 25 4
gpt4 key购买 nike

我有本地 pypi 服务器,我在其中上传了 cffi 包。

当我尝试搜索时,它返回包。

$ pip search -i https://localhost --trusted-host localhost cffi
cffi (1.11.4) - 1.11.4

但是当尝试安装时,却出现错误。

$ pip install -i https://localhost  --trusted-host localhost cffi==1.11.4
Collecting cffi==1.11.4
Could not find a version that satisfies the requirement cffi==1.11.4 (from versions: )
No matching distribution found for cffi==1.11.4

我正在 apache 网络服务器下运行 pypi 服务器来处理 centos 上的 https 请求。

我检查 apache 日志 /var/log/httpd/ssl_access_log 中的 install 命令。对于 GET 调用,其返回 200

127.0.0.1 - - [25/Jan/2018:16:46:23 +0000] "GET /cffi/ HTTP/1.1" 303 -
127.0.0.1 - - [25/Jan/2018:16:46:23 +0000] "GET /simple/cffi/ HTTP/1.1" 200 339

我再次检查日志。对于celery它可以工作,之后对于cffi它就失败了。

127.0.0.1 - - [25/Jan/2018:16:50:58 +0000] "GET /celery/ HTTP/1.1" 303 -
127.0.0.1 - - [25/Jan/2018:16:50:58 +0000] "GET /simple/celery/ HTTP/1.1" 200 321
127.0.0.1 - - [25/Jan/2018:16:50:58 +0000] "GET /packages/celery-4.0.2-py2.py3-none-any.whl HTTP/1.1" 200 396437
127.0.0.1 - - [25/Jan/2018:16:50:59 +0000] "GET /cffi/ HTTP/1.1" 303 -
127.0.0.1 - - [25/Jan/2018:16:50:59 +0000] "GET /simple/cffi/ HTTP/1.1" 200 339

问题是,对于cffi,它没有重定向到/packages/cffi-1.11.4-cp35-cp35m-manylinux1_x86_64.whl。在 celery 中,在 GET/simple/celery/ 之后,它会转到 /packages/celery*

我尝试curl,检查这两个包之间的响应是否有变化,但没有区别。

$ curl -k https://localhost/simple/celery/ -i
HTTP/1.1 200 OK
Date: Thu, 25 Jan 2018 16:59:27 GMT
Server: Apache/2.2.15 (CentOS)
Content-Length: 321
Connection: close
Content-Type: text/html; charset=UTF-8

<html>
<head>
<title>Links for celery</title>
</head>
<body>
<h1>Links for celery</h1>
<a href="/packages/celery-4.0.2-py2.py3-none-any.whl#md5=3ff97b53107b491baeb42f662be14a06">celery-4.0.2-py2.py3-none-any.whl</a><br>
</body>
</html>
$ curl -k https://localhost/simple/cffi/ -i
HTTP/1.1 200 OK
Date: Thu, 25 Jan 2018 16:59:29 GMT
Server: Apache/2.2.15 (CentOS)
Content-Length: 339
Connection: close
Content-Type: text/html; charset=UTF-8

<html>
<head>
<title>Links for cffi</title>
</head>
<body>
<h1>Links for cffi</h1>
<a href="/packages/cffi-1.11.4-cp35-cp35m-manylinux1_x86_64.whl#md5=c9478cf605b4eb2755fa322cc2bf3ddf">cffi-1.11.4-cp35-cp35m-manylinux1_x86_64.whl</a><br>
</body>
</html>

最佳答案

面对此问题时,两个最常见的问题是平台不匹配或 python 版本不匹配。

python版本检查

检查您的默认 pip 引用的 python 版本 - 是 python3.5pip 吗?

$ pip -V | grep -o "(.*)"

将为您提供信息。如果默认pip引用了其他python版本,则直接使用pip3.5调用python3.5pip >:

$ pip3.5 install -i https://localhost  --trusted-host localhost cffi==1.11.4

平台检查

尝试显式下载 manylinux1_x86_64 平台的 cffi 软件包 - 轮子会下载吗?

$ pip download cffi --only-binary=:all: --platform manylinux1_x86_64 -i https://localhost --trusted-host localhost

如果下载成功,则表明您的目标计算机上存在平台不匹配的情况。检查pip识别什么平台:

$ python3.5 -c "import pip; print(pip.pep425tags.get_platform())"

ABI 检查

一个不太常见的问题是 ABI 不匹配:您可以使用以下命令检查平台的 ABI:

$ python3.5 -c "import pip; print(pip.pep425tags.get_abi_tag())"

此字符串应与平台标记之前的轮子名称中的前缀匹配,因此在您的情况下,您的 ABI 应为 cp35m

<小时/>

如果您获得 macosx_10_13_x86_64 平台标签,则意味着您拥有 MacOS High Sierra。在本地 PyPI 服务器上,您已上传只能安装在 Linux 上的 cffi 轮 (manylinux 轮)。您将无法在 MacOS High Sierra 上安装它。问题是,cffi 包提供部分用 C 编写的代码,并且仅针对目标平台进行编译。您有三种可能性来解决这个问题:

  1. 最简单的解决方案:下载 macosx_10_13_x86_64 wheel from PyPI并将其与 manylinux1 轮一起上传到本地服务器。现在,Linux 客户端将获得针对 Linux 编译的 Wheel,并且在运行 pip install cffi 时您将获得针对 MacOS 编译的 Wheel。
  2. “DIY”解决方案:下载source tar installer from PyPI并将其与 manylinux1 轮一起上传到本地服务器。现在,Linux 客户端将获得已编译的 Wheel,MacOS 和 Windows 客户端将获得源 tar,它们被迫在本地编译包含的 C 代码 - 如果操作系统没有提供正确的工具,安装将失败。
  3. 配置本地服务器来代理 PyPI:如果请求某个包,但在本地服务器上找不到,它会将请求传递到 pypi.python.org,并且如果该包是在公共(public)存储库中找到后,它会被下载并通过本地服务器传递,就像在那里找到的一样。但不确定您的服务器是否支持此功能。我们使用 devpi 足以告诉您的索引它的基数中应该有 root/pypi:devpi index -m user/index bases=root/pypi

请注意,这些解决方案并不相互排斥:您可以将 1 与 2 结合起来(Linux 客户端将获得 manylinux1 轮子,High Sierra 获得 macos_10_13 轮子,其余的则获得源 tar) 甚至 1、2 和 3 一起。这完全取决于您想要/需要/可以在本地服务器上上传和维护的内容。

关于python - pip 能够搜索包但安装失败并出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com