我有本地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
我正在pypi
网络服务器下运行apache
服务器来处理https
上的centos
次请求。
我检查apache log /var/log/httpd/ssl_access_log
,查看install
命令。它为200
返回GET Call
。
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
中,/packages/celery*
之后GET /simple/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>
,检查这2个套餐之间的响应是否有变化,但没有区别。
<modules>
<add name="MyModule" type="MyNamespace.MyModule.Module, MyNamespace.MyModule"/>
</modules>
答案 0 :(得分:2)
遇到此问题时,最常见的两个问题是平台不匹配或python版本不匹配。
检查您的默认pip
所指的python版本 - 是python3.5
&#39; s pip
?
$ pip -V | grep -o "(.*)"
会给你信息。如果默认pip
引用其他某个python版本,请直接使用python3.5
调用pip
&#39; {<1}}:
pip3.5
尝试明确下载$ pip3.5 install -i https://localhost --trusted-host localhost cffi==1.11.4
平台的cffi
软件包 - 是否会轮下载?
manylinux1_x86_64
如果下载成功,则目标计算机上的平台不匹配。检查$ pip download cffi --only-binary=:all: --platform manylinux1_x86_64 -i https://localhost --trusted-host localhost
识别的平台:
pip
一个不太常见的问题是ABI不匹配:你可以检查你的平台的ABI
$ python3.5 -c "import pip; print(pip.pep425tags.get_platform())"
此字符串应与平台标记之前的轮名称中的前缀匹配,因此在您的情况下,您的ABI应为$ python3.5 -c "import pip; print(pip.pep425tags.get_abi_tag())"
。
如果您获得cp35m
平台标记,则表示您拥有MacOS High Sierra。在本地PyPI服务器上,您已经上传了macosx_10_13_x86_64
轮,只能安装在Linux上(cffi
轮)。您无法在MacOS High Sierra上安装它。问题是,manylinux
包装的代码部分用C语言编写,仅为目标平台编译。您有三种可能性来解决这个问题:
macosx_10_13_x86_64
wheel from PyPI并将其与cffi
滚轮一起上传到本地服务器。现在linux客户端将获得为linux编译的轮子,你将在运行manylinux1
时为MacOS编译轮子。pip install cffi
轮一起上传到本地服务器。现在linux客户端将获得编译轮,MacOS和Windows客户端将获得源tar,他们被迫在本地编译包含的C代码 - 如果操作系统没有提供正确的工具,安装将失败。manylinux1
,如果在公共存储库中找到该包,则下载并通过本地服务器传递,就像在那里找到一样。但是,如果您的服务器支持此功能,则不确定。我们使用pypi.python.org
,足以告诉您的索引它的基础应该devpi
:root/pypi
。请注意,这些解决方案不是相互排斥的:您可以将1和2组合在一起(Linux客户端将获得devpi index -m user/index bases=root/pypi
个轮子,High Sierra获得manylinux1
轮,其余的获取源焦油)甚至1 ,2和3一起。这一切都取决于您在本地服务器上上传和维护的内容。