将Python模块安装到兼容所有版本的位置

0 投票
1 回答
640 浏览
提问于 2025-04-17 18:24

我创建了一个包含Python模块的Debian包。现在遇到的问题是

dpkg-deb -c python-mymodule_1.0_i386.deb

这意味着所有文件都会安装在

/usr/lib/python2.6/dist-packages/mymodule*

这就导致了一个问题:安装我这个deb包的用户必须使用和我完全相同版本的Python,但我知道我的模块在更新版本上也能正常工作。

在我的Makefile里,我有以下这个目标:

install:
    python setup.py install --root $(DESTDIR) $(COMPILE) --install-layout=deb

其中setup.py是

from distutils.core import setup           
setup(name='mymodule',
      version='1.0',
      description='does my stuff',
      author='Me',
      author_email='myemail@localhost',
      url='http://myurl/',
      packages=['mymodule'],
      )

请问有没有办法让我修改setup.py文件或者Makefile,这样生成的模块可以安装在一个与Python版本无关的目录,而不是/usr/lib/python2.6?

谢谢,

亚历克斯

1 个回答

0

我想我现在找到了答案(多亏了Tshepang的提示):

在debian/rules文件中,你需要调用dh_pysupport。

这个命令会把在构建机器上通过setup.py安装的所有文件抓取到

$(DESTDIR)/usr/lib/pythonX.Y/dist-packages/mymodule*

并将它们放到.deb文件中一个与Python版本无关的位置,也就是

/usr/share/pyshared/mymodule*

最后,它会在postinst脚本中添加一个调用update-python-modules的命令,这样可以确保这个模块在目标机器上每个版本的Python中都能使用。

撰写回答