2010-10-23 17 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的和,和上面的技巧幫助我通過這個錯誤得到。希望別人覺得這很有用。

相關問題