如何在 Ubuntu 20.04 上获取适用于 Python2 的 PyQt5

如何在 Ubuntu 20.04 上获取适用于 Python2 的 PyQt5

我有一个关键的 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 世界的大师。最好不是“下载源代码并开始编译”。

提前致谢!

答案1

尝试在 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
  1. 添加bionic到 apt repos:
echo 'deb http://us.archive.ubuntu.com/ubuntu/ bionic universe multiverse' | sudo tee /etc/apt/sources.list.d/bionic-helper.list
  1. 安装必要的库(对于 vivisect,您需要 python-pyqt5.qtwebkit):
sudo apt update
sudo apt install python-pyqt5.qtwebkit

这应该会为您提供一个带有 qtwebkit 的可运行的 python2 pyqt5 环境。

此修复使 Bionic 18.04 可以python-pyqt5在 Focal 20.04 上运行,因此所有依赖它的软件包(如 qtwebkit)也能正常运行。

一旦您构建了它,您就可以与您的朋友分享它。我本来想在这里提供 deb 文件,但是没有简单的方法可以做到这一点。另外,通过这种方式,您可以看到每一步发生的情况。

希望这可以帮助! @

答案2

最好的暂时的目前的解决方案(有警告):

$ 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

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

有人有更好的解决方案吗(直到应用程序移植到 Py3)?有没有办法让它apt正常工作,同时忽略这个特定的破坏依赖关系?

相关内容