2010-10-23 14 views
6

我已经安装了这个setup.py Python应用程序:如何删除使用distutils安装的程序?

#!/usr/bin/env python 

from distutils.core import setup 
from libyouandme import APP_NAME, APP_DESCRIPTION, APP_VERSION, APP_AUTHORS, APP_HOMEPAGE, APP_LICENSE 

setup(
    name=APP_NAME.replace(" ","-").lower(), 
    version=APP_VERSION, 
    description=APP_DESCRIPTION, 
    author="John G", 
    author_email="[email protected]", 
    url=APP_HOMEPAGE, 
    license=APP_LICENSE, 
    scripts=["youandme.py"], 
    packages=["libyouandme"], 
    data_files=[ 
     ('share/applications', ['youandme.desktop']), 
     ('usr/share/icons/hicolor/16x16/apps', ['icons/hicolor/16x16/apps/you.png']), 
     ('usr/share/icons/hicolor/22x22/apps', ['icons/hicolor/22x22/apps/you.png']), 
     ('usr/share/icons/hicolor/48x48/apps', ['icons/hicolor/48x48/apps/you.png'])], 
) 

我怎样才能把我的Ubuntu机器此应用程序?

我能用distutils做到吗?

+0

可能的重复:http://stackoverflow.com/questions/402359/how-do-you-uninstall-a-python-package-that-was-installed-using-distutils – mouad 2010-10-23 18:26:27

回答

6

安装checkinstall Ubuntu软件包。 checkinstall监视安装过程并创建一个deb包。这使您可以使用常规软件包管理命令来删除该软件。

首先,使用checkinstall重新安装候选python模块/软件包。更改目录包含候选Python模块/包的setup.py文件的目录:

cd <PACKAGE_NAME> 

然后:

sudo checkinstall -D --fstrans=no python setup.py install 

这将创建一个.deb软件包,并重新安装Python模块。 系统会询问您几个问题。默认的答案应该没问题。 (但是,如果setup.py文件位于python模块的子目录中,例如“source”子目录中,则可以更改.deb软件包的“名称”。)

(保存的.deb软件包现在抓住了Python包安装方式本身,和dpkg可以删除Python包)

然后立即删除模块:

sudo dpkg -r <PACKAGE_NAME> 

PS。我听说有些安装程序与checkinstall不兼容,但我自己从未遇到任何问题。

5

AFAIK只可以使用画中画功能卸载Python模块,所以如果你没有安装它,你可以用

sudo easy_install pip 

安装它,然后使用画中画卸载模块

sudo pip uninstall <module_name> 

其中module_namesetup函数的参数name中传递的值。

编辑:刚才看到你用“python3.x”标记你的问题,并没有3.X版本点子还,所以如果你需要卸载python3.x模块,这个答案没有按不适合。

+0

我认为pip无法卸载软件包这是与安装setup.py安装或开发看到这个:http://pip.openplans.org/部分卸载 – mouad 2010-10-23 18:23:18

+0

@singularity:嗯,奇怪,我安装了许多自制库使用'python setup.py install'和我已经总是能够用pip删除它们,即使pip的文档似乎告诉我不应该这样做。我可能错过了一些东西...... – MatToufoutu 2010-10-23 18:45:26

+0

是的,听起来很奇怪,因为为了让pip卸载工作,pip为每个已安装的软件包创建一个元数据,以便它可以跟踪所有已创建的文件,所以它可以删除他们当你可以点卸载,但distuils不这样做,并知道像我在我的答案中说distutils2可以做到这一点,但他们从来没有编程将这个功能添加到distutils,你可以在这里看到它:http:/ /bugs.python.org/issue4673 – mouad 2010-10-23 19:23:09

2

disutils版本1不支持卸载命令,我还在评论中包含了一个链接以供您查看,但仅供参考disutils2现在支持卸载命令,他们一直在过去GSoC ,你可以检查这个link

你“卸载”你的软件包的唯一方法是通过手工删除所有文件,我可以看到你有一些文件在/ usr/share ..,我没有知道你是否已经知道这一点,但你可以在开发模块时使用python install.py进行开发,它会很容易地进行修改和删除。

0

自pip 8.0。0运行pip uninstall <package>不起作用,当<package>是由操作系统预先安装(可能与python setup.py安装)。

的错误信息是:

检测到的distutils安装项目( '<package>'),我们无法卸载。 distutils提供的元数据不包含已安装的文件列表,因此pip不知道要卸载哪些文件。

取而代之的是使用pip卸载这些软件包,您需要改用OS软件包管理器。

所以在Ubuntu上:sudo apt-get remove python-<package>会将其删除。

我发现有这个问题的两个包:httplib2的和,和上面的技巧帮助我通过这个错误得到。希望别人觉得这很有用。

相关问题