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。
答案 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:'