删除 disutils 生成的 RPM 时出现问题

问题描述 投票:0回答:1

我最近创建了一个基于 distutils (setup.py) 的非常简单的 RPM。当我这样做时

python setup.py bdist_rpm
它会正常生成 RPM。

当我安装此 RPM 后,如果卸载它,它不会删除“/usr/lib/python3/site-packages/mylib”文件夹,就会出现问题。查看它,我可以看到所有 __pycache__ 文件夹都留空。另外,“.egg-info”目录仍然存在。

我的 setup.py 看起来像这样:

import setuptools

setuptools.setup(
    name = "mylib",
    version = "1.0",
    author = "An awesome developer",
    description = "An awesome library",
    packages = setuptools.find_packages(),
    classifiers = [ 
        "Programming Language :: Python :: 3", 
        "Programming Language :: Python :: 2", 
    ],  
)

我确实了解 distutils 中的 bdist_rpm 命令允许设置“postun”脚本。但生成的 RPM 不应该负责清理自己的混乱吗?我在 distutils 环境中做错了什么吗?

python python-3.x rpm setup.py distutils
1个回答
0
投票
import setuptools

postun_path = '/home/tmp/mylib/postun.sh'
postun_script = '''rm -rf /usr/lib/python3/site-packages/mylib
rm -rf /usr/lib/python3/site-packages/python3_mylib*'''
with open(postun_path, 'w+') as f:
    f.write(postun_script)

setuptools.setup(
    name = "mylib",
    version = "1.0",
    author = "An awesome developer",
    description = "An awesome library",
    packages = setuptools.find_packages(),
    classifiers = [ 
        "Programming Language :: Python :: 3", 
        "Programming Language :: Python :: 2", 
    ],
    options={'bdist_rpm': {'post_uninstall': postun_path}},
)

为了在卸载生成的 RPM 时手动删除剩余文件,我在 setup.py 的开头添加了一个小 bash 脚本的创建,并将该脚本的路径传递给安装方法的“options”参数。该参数采用与调用 setup.py 时相同的命令行选项的字典,在本例中,您正在查找 bdist_rpm 选项的 post_uninstall 参数。在调用 setup.py 时,我仍然继续传递所有相同的选项,但通过此添加,我发现在卸载软件包的 RPM 后,剩余的站点软件包目录被删除。手动执行此操作当然感觉不对,但通过修改传递给 post_uninstall 的 bash 脚本,您应该能够覆盖所有基础。

© www.soinside.com 2019 - 2024. All rights reserved.