0

我使用 dh-virtualenv 构建了我的 Python 3 应用程序的 debian 包。在 Raspbian Buster 上一切正常,但最近发布的 Bullseye 我希望该软件包兼容。

可悲的是,当我在 Bullseye 下安装 .deb 时,我所有的自定义 Python 包都丢失了。运行应用程序会引发 ModuleNotFoundError。我意识到 sys.path 列表不包含 virtualenv 的站点包的路径(它在 Buster 下),所以我手动添加了它。这修复了大多数 Python 包的 ModuleNotFoundError。然而,我的应用程序也依赖于一些 CPython 包,而所有这些包仍然缺失。

运行path/to/virtualenv/bin/pip3 list显示它们没有安装,尽管我在站点包下找到了所有正确的 .so 和 .dist-info 文件。在 Buster 下,相同的命令按预期列出了所有扩展。

我的猜测是这个问题是由使用不同的 Python 版本引起的。Buster 使用 3.7,Bullseye 使用 3.9。你有什么想法可能导致这个问题以及我该如何解决它?

非常感谢内森

4

1 回答 1

0

我找到了问题的核心。
Bullseye 使用的是 python 3.9 而不是 busters python 3.7。
所以 sys.path 默认不包含正确的路径。

现在我通过在我的 Buster 构建机器上安装 python 3.9 并告诉 /debian/rules 文件使用 python 3.9 来解决这个问题。
然后我手动附加正确的路径。

sys.path.append('/path/to/debian-package/lib/python3.9/site-packages')

Bullseye 和 Buster 也使用不同版本的libffi(外部函数接口)。
因此,由于 CPython 包依赖于 libffi,因此它们无法正确安装。
我通过在 Buster 上安装 libffi 7 来解决这个问题。

于 2021-12-02T18:35:27.280 回答