使用 pip 删除 setup.py data_files 中的文件

Removing files in setup.py data_files using pip

我正在为我自己的 Linux 应用程序编写 setup.py。我在 /usr/share/applications 中添加了一个桌面条目文件 myapp.desktop。这是我的 setup.py:

setup(...,
      data_files=[
           ('/usr/share/applications', ['myapp.desktop']),
           ('/usr/share/pixmaps', ['myapp.png'])]
     )

我还在 MANIFEST.in 中包含 myapp.desktopmyapp.png:

include myapp.png
include myapp.desktop

所以我可以使用 python setup.py install 安装应用程序,它还会在正确的路径中安装 data_files

问题是,当我使用 pip uninstall myapp 卸载应用程序时,pip 不会删除 data_files 中的文件,也就是说 /usr/share/applications/myapp.desktop/usr/share/pixmaps/myapp.png 中的文件。我需要自己删除它们。

如何使用 pip uninstall 自动删除这些文件?

你不能。 python setup.py install 导致您的包使用 setuptools 而不是 pip 安装,因此 pip 对包的了解不够,无法完全卸载它。甚至 setuptools 都不能卸载你的包,因为没有 python setup.py uninstall 命令!如果您希望 pip 能够正确卸载您的包,您需要使用 pip (pip install .) 进行安装,但这样做的缺点是 data_files 文件将放在已安装包的旁边,而不是在系统根目录下(例如,myapp.desktop 会像 ~/.local/lib/python2.7/site-packages/usr/share/applications/myapp.desktop 这样的地方结束)。