我已经使用此setup.py安装了一个python应用程序:
#!/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="xxx@gmail.com",
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 :(得分: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模块的子目录中时,您可能会更改.deb包的“名称”,例如“source”子目录。)
(保存的.deb包现在捕获python包自身的安装方式,dpkg可以删除python包。)
然后立即删除模块:
sudo dpkg -r <PACKAGE_NAME>
PS。我听说有些安装程序与checkinstall
不兼容,但我自己从未遇到过任何问题。
答案 1 :(得分:4)
AFAIK only pip允许卸载python模块,所以如果你没有安装它,你可以用
安装它。sudo easy_install pip
然后使用pip卸载模块
sudo pip uninstall <module_name>
其中module_name
是name
函数的setup
参数中传递的值。
编辑:刚看到你用“python-3.x”标记了你的问题,而pip还没有3.x版本,所以如果你需要卸载python3.x模块,这个答案不合适。
答案 2 :(得分:3)
由于pip uninstall <package>
是操作系统预先安装的(可能是python setup.py install),因此运行<package>
的pip 8.0.0不起作用。
错误消息是:
检测到我们无法卸载的distutils已安装项目('
<package>
')。 distutils提供的元数据不包含已安装的文件列表,因此pip不知道要卸载哪些文件。
您需要使用操作系统软件包管理器,而不是使用pip卸载这些软件包。
所以在Ubuntu上:sudo apt-get remove python-<package>
会删除它。
我发现有两个有这个问题的软件包: httplib2 和六个,上面的技巧帮助我解决了这个错误。希望其他人觉得这很有用。
答案 3 :(得分:2)
disutils版本1不支持uninstall命令,我还在注释中包含了一个链接,但是只是对于信息disutils2现在支持uninstall命令,他们在过去的GSoC中一直在使用它,你可以查看link
你“卸载”你的软件包的唯一方法是手动删除你的所有文件,我可以看到你在/ usr / share中有一些文件..我不知道你是否已经知道这个但是您可以在开发模块时使用python install.py develop,它将进行更改和轻松删除。
答案 4 :(得分:0)
我发现在安装新版本的库时,distutils没有删除不再属于该软件包的旧模块。它只取代了旧的。这是一个简单的示例,说明在运行安装程序之前如何卸载旧文件。它本身并不是一个完整而完美的卸载,但它可能会帮助那些有相同需求的人,或者向您发送功能性的解决方法路径。
from distutils.core import setup
import distutils.sysconfig
from os import path
from shutil import rmtree
PACKAGE_NAME = "MyPackage"
# If found, uninstall a prior version.
# This will delete any modules that are no longer in use.
targetDirPath = path.join( distutils.sysconfig.get_python_lib(), PACKAGE_NAME )
if path.exists( targetDirPath ) :
try :
rmtree( targetDirPath )
print "Removed prior package at: %s" % (targetDirPath,)
except Exception as e:
print "Failed to remove prior package at: %s" % (targetDirPath,)
print e
setup(name=PACKAGE_NAME,
version='1.2.3',
packages=['subpackage'] )