python setup.py 卸载

939 投票
18 回答
539342 浏览
提问于 2025-04-15 14:59

我用 python setup.py install 安装了一个 Python 包。

那我该怎么卸载它呢?

18 个回答

93

第一个答案有一些问题:

  • 在Mac上无法使用。
  • 如果文件名中有空格或其他特殊字符,使用xargs命令会失败,并且可能会删除与这些单词匹配的任何文件或文件夹。
  • rm -rf命令中,-r这个选项是多余的,最糟糕的情况下可能会删除你不想删除的东西。

对于类Unix系统,可以使用:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

而对于Windows系统,可以使用:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

卸载setup.py安装时也会有一些无法解决的问题,但在一般情况下这些问题不会影响你。想要更完整的答案,可以查看这个维基页面:

https://ofswiki.org/wiki/Uninstalling_setup.py_install

220

对我来说,以下方法基本上是有效的:

首先,确保你安装了pip,比如:

$ easy_install pip

接下来,检查一下你安装的包在pip中的名称是什么:

$ pip freeze

这个命令会列出你安装的所有包的名称(这些包都是pip检测到的)。有时候包的名字可能比较长,这时候只需要看#egg=后面的部分就可以了。大多数情况下,你也可以忽略版本号部分(也就是==-后面的内容)。

然后卸载这个包:

$ pip uninstall package.name.you.have.found

如果它询问你是否确认要删除这个包,那你就很幸运了,它会被成功卸载。

pip会检测到所有通过pip安装的包。它也会检测到大部分通过easy_install或setup.py安装的包,但在一些少见的情况下可能会失败。

这里有一个我在本地测试的真实例子,包的名字是ttr.rdstmc,我是在MS Windows上进行的。

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

编辑于2015-05-20

以上所说的内容依然适用,不过现在有一些小的修改。

在python 2.7.9和python 3.4中安装pip

最近的python版本自带一个包ensurepip,即使在离线状态下也能安装pip:

$ python -m ensurepip --upgrade

在某些系统上(比如Debian Jessie),这个功能可能不可用(为了防止破坏系统的python安装)。

使用grepfind

上面的例子假设你已经安装了grep。我在使用MS Windows的时候,安装了一套Linux工具(包括grep)。另外,你也可以使用Windows自带的find,或者直接忽略这个过滤,去更长的Python包列表中找到你需要的名字。

1156

注意:尽量不要使用 python setup.py install,而是用 pip install .

你需要手动删除所有文件,还要手动撤销安装过程中做的其他操作。

如果你不知道所有文件的列表,可以用 --record 选项重新安装一次,然后查看生成的文件列表。

要记录已安装文件的列表,可以使用:

python setup.py install --record files.txt

当你想要卸载时,可以用 xargs 来进行删除:

xargs rm -rf < files.txt

如果你在使用 Windows,可以用 Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

然后还要删除包含的目录,比如在 macOS 上的 /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/。这个目录里没有文件,但 Python 仍然会导入一个空模块:

>>> import my_module
>>> my_module.__file__
None

一旦删除,Python 会显示:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

撰写回答