Pip要删除的文件列表在哪里

时间:2019-08-01 15:05:42

标签: python pip

pip会在哪里记录卸载软件包时要删除哪些文件?

我有一个从pip安装的应用程序包,通常以可编辑模式安装。为了在安装后方便起见,有一些用户脚本可以添加桌面和菜单快捷方式。如何将这些额外的文件告诉pip和其他程序包管理器,以便它们在卸载时可以自动删除?

典型安装方案:

git clone {application}
pip install --editable path\to\myapp-code
python user-scripts\make-menu-shortcuts.py

交叉发布到https://discuss.python.org/t/how-to-add-to-list-of-files-to-uninstall

1 个答案:

答案 0 :(得分:1)

草稿答案正在进行中。如果您有比这更好的东西,请跳进去!

车轮安装

寻找PYTHONHOME/Lib/site-packages/{package}{version}.dist-info。 其中有一个名为RECORD的文件。Wheel规范中有一些有关RECORD格式的详细信息: https://www.python.org/dev/peps/pep-0427/#the-dist-info-directory

未为以可编辑模式(pip install --editable path/to/code)安装的软件包创建此目录。

# extract from *.dist-info/RECORD:
../../Scripts/myapp.exe,sha256=tQaANRLxdJ3Su3vLNakbzlNhRtnU-HBhdwHGTpJHTxc,103271
myapp-0.1.20.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
...
myapp/__pycache__/__init__.cpython-36.pyc,,
myapp/__pycache__/_version.cpython-36.pyc,,

Pip卸载将删除我们添加到该文件的路径中的所有文件。哈希不是必需的,但请注意在未使用时附加尾随逗号。

Windows:可以使用本机格式(C:\users\...\myapp.lnk),但是记录的文件必须与dist-info(ref)位于同一驱动器上。

# myapp.dist-info/RECORD:
myapp-0.1.20.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
...
myapp/__pycache__/__init__.cpython-36.pyc,,
myapp/__pycache__/_version.cpython-36.pyc,,
C:\Users\me\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\myapp.lnk,,
> pip uninstall myapp
Uninstalling myapp-0.1.20:
  Would remove:
    c:\tools\miniconda3\envs\test\lib\site-packages\myapp-0.1.20.dist-info\*
    c:\tools\miniconda3\envs\test\lib\site-packages\myapp\*
    c:\tools\miniconda3\envs\test\scripts\myapp.exe
    c:\users\me\appdata\roaming\microsoft\windows\start menu\programs\myapp.lnk
Proceed (y/n)? y

可编辑的安装

PYTHONHOME/lib/site-packages中查找myapp.egg-link。该文件包含代码位置的路径:

D:\code-external\app-code
.

在该文件夹中查找myapp.egg-info。它的结构与dist-info类似,但不相同。

运行pip show --files myapp会产生错误:

Name: myapp
...
Files:
Cannot locate installed-files.txt

创建.egg-info/installed-files.txt并将多余的文件名放入其中。现在pip show可以使用了,但是遗憾的是pip卸载仍然没有实现。

> pip show -f myapp
Name: myapp
...
Files:
..\..\test-link.lnk

> pip uninstall myapp
Uninstalling myapp-0.1.20:
  Would remove:
    c:\tools\miniconda3\envs\test\lib\site-packages\myapp.egg-link
    c:\tools\miniconda3\envs\test\scripts\myapp-script.py
    c:\tools\miniconda3\envs\test\scripts\myapp.exe
Proceed (y/n)? n

注释

通过创建裸露的虚拟conda环境,记录安装时间,使用pip安装单个小程序包,然后使用Windows Advanced Query Syntax来search files modified after timestamp找出dist-info / RECORD部分,以查找其中的更改。 envs文件夹。

installed-files.txt:在Windows上,路径必须与egg-info文件夹位于同一驱动器上。 Pip show始终将路径解析为相对路径,但这在Windows中的驱动器上是不可能的。如果出现错误ValueError: path is on mount 'C:', start on mount 'D:'

,您就遇到了此错误