pip3 没有安装目标模块版本

Posted

技术标签:

【中文标题】pip3 没有安装目标模块版本【英文标题】:pip3 does not install the target module version 【发布时间】:2020-02-04 02:59:43 【问题描述】:

在 Ubuntu Studio 18.04 上使用 Python 3.6.9 和 pip 9.0.1,我试图将 PyQt5 模块从版本 5.10.1 降级到 5.9.2。

安装似乎没有问题完成,但是 pip3 确认 5.10.1 安装成功:

pip3 install --no-cache-dir 'PyQt5==5.9.2'

输出:

Collecting PyQt5==5.9.2
  Downloading https://files.pythonhosted.org/packages/3a/c6/26270f5550f00920045c2f0b222a7d03d7a64382825c68bf0bb1a51d854c/PyQt5-5.9.2-5.9.3-cp35.cp36.cp37-abi3-manylinux1_x86_64.whl (105.3MB)
    100% |████████████████████████████████| 105.3MB 11.0MB/s 
Collecting sip<4.20,>=4.19.4 (from PyQt5==5.9.2)
  Downloading https://files.pythonhosted.org/packages/8a/ea/d317ce5696dda4df7c156cd60447cda22833b38106c98250eae1451f03ec/sip-4.19.8-cp36-cp36m-manylinux1_x86_64.whl (66kB)
    100% |████████████████████████████████| 71kB 4.2MB/s 
Installing collected packages: sip, PyQt5
Successfully installed PyQt5-5.10.1 sip-4.19.8

检查当前版本:

pip3 show PyQt5

输出:

Name: PyQt5
Version: 5.10.1
Summary: Python bindings for the Qt cross platform UI and application toolkit
Home-page: https://www.riverbankcomputing.com/software/pyqt/
Author: Riverbank Computing Limited
Author-email: info@riverbankcomputing.com
License: GPL v3
Location: /home/stragu/.local/lib/python3.6/site-packages
Requires: sip

我也尝试卸载并再次安装它,但我最终安装了 5.10 版(即不是 5.10.1)。就像它强制要求最低版本为 5.10。

但是,当我在 Python3 内核中执行以下操作时:

from PyQt5.Qt import PYQT_VERSION_STR
print("PyQt version:", PYQT_VERSION_STR)

我发现它显然使用的是 5.9.2 版!

知道这里会发生什么吗?

【问题讨论】:

pip3 确认 5.9.1 已成功安装 输出是否表明版本 5.10.1 已安装,或者我遗漏了什么? 是的@AMC,你是对的,很抱歉!这实际上是我正在做的降级。 【参考方案1】:

这似乎是这个安装中 pip3 的默认版本 9.0.1 的问题,它总是报告(在安装结束时,或者在列出模块版本时使用pip3 list)模块的最高版本曾经安装过。

我将 pip3 升级为:

python3 -m pip install --upgrade pip

它现在按预期工作,报告用户请求的正确模块版本号(与从 Python3 内核中查找相关模块版本号时检索到的任何内容相匹配)。

【讨论】:

【参考方案2】:

您正在使用系统的 Python。该模块还随 Apt 一起安装在系统范围内。 Pip 行为的奇怪之处在于 Debian 补丁。


我(盲目地)通过checking PyQt5 packages in Bionic 猜到了第一个,它显示了您看到的版本号5.10.1

检查the source archive for pip 9.0.1-2.3~ubuntu1.18.04.1 中的补丁程序(可从https://launchpad.net/ubuntu/+source/python-pip/9.0.1-2.3~ubuntu1.18.04.1 获得)显示set_user_default.patch 中的以下相关更改:

在非虚拟环境中以普通用户身份运行时,默认为 --user 和 --ignore-installed。

(与earlier behavior which denied system-wide installation with a logical but obscure error相比,我猜它的目的是修复pip install的用户体验。)

但是,补丁只将此应用于install 命令。

因此,您将PyQt5-5.9.2 安装到用户站点——而pip3 show 在系统站点向您显示包,您需要运行pip3 list --user 才能看到后者。

我不知道为什么 pip3 install 在最后显示了错误的版本,但我猜那行是由支持 pip3 show 的相同代码生成的。

【讨论】:

看来pip show 只能带--files 标志:pip.pypa.io/en/stable/reference/pip_show 我在终端中只能得到no such option: --user @stragu 确实。奇怪的! pip listpip freeze 确实支持 --user 啊,确实有效,但有趣的是,即使查看 --user 模块,版本也是相同的:PyQt5 (5.10.1)。剧情变厚了? 我刚刚发现系统和用户库有点同步。我尝试使用pip3 remove pyqt5 sip pip3 install 'PyQt5==5.9.2' 卸载然后安装PyQt5 5.9.2,我最终在both 中使用PyQt 5.10(即not 5.10.1)。 嗯,它看起来像是某种错误,总是会显示模块的最新安装版本(卸载时会重置)。检查 python 内核中的模块版本将显示实际版本。我可以通过打开一个使用 PyQt5 的程序来仔细检查,该程序不能使用例如PyQt5 5.10,因为它需要 Qt 5.10。可能会用此信息回答我自己的问题,但非常感谢您的帮助调查!

以上是关于pip3 没有安装目标模块版本的主要内容,如果未能解决你的问题,请参考以下文章

Python离线项目迁移部署

模块计算机类型“X86”与目标计算机类型“x64”冲突,用的是vs2010

pip3 安装 pymssql 后没有名为 pymssql 的模块

在没有 pip/pip3 的情况下安装诸如“Web3”之类的 python 模块?

如何升级到python3版本并且安装pip3及ipython3

requests模块