如何在 Ubuntu 20.04 上为 Python2 获取 PyQt5

kur*_*ios 5 python kubuntu python-2.7 pyqt5 20.04

我有一个关键的 PyQt5 应用程序,它仍处于迁移到 Python3 的阶段。
K/Ubuntu 20.04 删除了为 Python 2.7 安装 PyQt5 所需的包。我了解这些应用程序迁移到 Py3 的重要性,但我是仍然需要这些应用程序的用户。我很高兴 Ubuntu 使 Python 2.7 仍然可用,即使他们将 Py3 设为默认。但是我需要继续访问这个和其他几个应用程序,我希望能够将我的所有系统升级到 Ubuntu 20.04。明确地说,我需要 PyQt5 和 QtWebKit(是的,我知道 QtWebKit 也被弃用了)。

我尽量不让我的机器在这个过程中变得一团糟。想要一个优雅而简单的方法。

到目前为止,我已经尝试了许多 pip install 的咒语(尽管如果有人能够通过 Pip 使其工作,我会虚心接受)

我已经从以前的 Ubuntu 版本 Eoan 和 Bionic 添加了以前的 deb 存储库,但到目前为止还没有运气。我不怀疑有一种方法可以使这种方法成功……但我还没有找到。我很想得到一些帮助。

我有很多同事也在使用这个软件。对我来说最好的答案是我可以很容易地向其他人指出并且让他们不需要成为 Linux 世界的大师。最好不要“下载源代码并开始编译”。

提前致谢!

小智 10

尝试在 20.04 上安装 Bionic 的 python2/pyqt5 软件包会中断,因为 18.04python-pyqt5需要qtbase-abi-5-9-5这会在 20.04 上导致严重冲突,如果您尝试安装它。但是,该软件包没有提供任何必要的内容。因此,提供你自己的,来满足这种依赖。

这是解决方案(高级):

  • 安装这个 qtbase-api-fake deb 包来满足 qtbase-abi 要求。该包实际上只是一个空文件。
  • 添加bionic回您的 apt 存储库
  • 安装 python-pyqt5.qtwebkit(将安装 python-pyqt5)

详细解决方法:

  1. 构建 qtbase-abi-fake 包并安装它。一旦您感到舒服,您可以简单地将其复制并粘贴到终端中,我没有做任何邪恶的事情:
# create the package structure:
cd /tmp
mkdir qtbase-abi-fake
mkdir -p qtbase-abi-fake/DEBIAN
mkdir -p qtbase-abi-fake/usr/lib/qtbase-abi-fake
touch qtbase-abi-fake/usr/lib/qtbase-abi-fake/nothing.txt

# create the deb control file (the guts):
cat <<_EOF > qtbase-abi-fake/DEBIAN/control
Package: qtbase-abi-fake
Version: 5.9.5
Section: custom
Priority: optional
Architecture: all
Essential: no
Installed-Size: 1024
Maintainer: atlas
Description: Fakes out python-pyqt5 from Ubuntu 18.04 to work on 20.04  
Provides: qtbase-abi-5-9-5
_EOF

# build the qtbase-abi-fake.deb file:
dpkg-deb --build qtbase-abi-fake

# install your newly created deb file:
sudo dpkg -i qtbase-abi-fake.deb
Run Code Online (Sandbox Code Playgroud)
  1. 添加bionic到 apt 存储库:
echo 'deb http://us.archive.ubuntu.com/ubuntu/ bionic universe multiverse' | sudo tee /etc/apt/sources.list.d/bionic-helper.list
Run Code Online (Sandbox Code Playgroud)
  1. 安装必要的库(对于 vivisect,你需要 python-pyqt5.qtwebkit):
sudo apt update
sudo apt install python-pyqt5.qtwebkit
Run Code Online (Sandbox Code Playgroud)

这应该会为您提供一个带有 qtwebkit 的工作 python2 pyqt5 环境。

此修复使 Bionic 18.04python-pyqt5在 Focal 20.04上工作,因此所有依赖于它的包(如 qtwebkit)也能正常工作。

一旦你建立了这个,你可以与你的朋友分享。我会在这里提供 deb 文件,但没有简单的方法来做到这一点。加上这种方式,您可以看到每一步发生了什么。

希望这可以帮助!@

  • 谢谢。现在我可以在 Ubuntu 20.04.2 上安装 HPLIP 3.21.2 (2认同)

kur*_*ios 1

迄今为止最好的临时解决方案(有警告):

$ wget http://us.archive.ubuntu.com/ubuntu/pool/universe/p/pyqt5/python-pyqt5_5.10.1+dfsg-1ubuntu2_amd64.deb
$ wget http://us.archive.ubuntu.com/ubuntu/pool/universe/p/pyqt5/python-pyqt5.qtwebkit_5.10.1+dfsg-1ubuntu2_amd64.deb
$ dpkg -i --force-depends python-pyqt5_5.10.1+dfsg-1ubuntu2_amd64.deb
$ dpkg -i python-pyqt5.qtwebkit_5.10.1+dfsg-1ubuntu2_amd64.deb
Run Code Online (Sandbox Code Playgroud)

这将使我的应用程序能够运行。但是,每次我apt install或时apt upgrade,它都会抱怨依赖关系已损坏,并拒绝安装或更新,直到我解决它。最好的答案可能是创建一个 .deb 包来提供qtbase-abi-5-9-5损坏的依赖项。这似乎是 Ubuntu 使 Python2.7 QT 挂钩不起作用的方法。

有人对更好的解决方案有想法吗(直到应用程序移植到 Py3)?有没有一种方法可以apt正常工作,同时忽略这种特定的损坏的依赖关系?