卸载通过编译源安装的Python?


18

我在Ubuntu 14.04安装了Python 2.7.9通过编译它的来源,通过.configremakemake altinstallmake altinstall是因为我不想覆盖默认的Python 2.7.6。我自己安装的2.7.9位于/usr/local/bin/python2.7和其他目录下的其他文件中/usr/local。从自述在源安装包:

在Unix和Mac系统上,如果要使用相同的安装前缀(配置脚本的--prefix参数)安装多个版本的Python,则必须注意主要的python可执行文件不会被其他版本的安装覆盖。

使用“ make altinstall”安装的所有文件和目录都包含主要版本和次要版本,因此可以并行存在。“ make install”还会创建$ {prefix} / bin / python,它引用$ {prefix} /bin/pythonX.Y。

如果打算使用相同的前缀安装多个版本,则必须确定哪个版本(如果有)是您的“主要”版本。使用“进行安装”安装该版本。使用“ make altinstall”安装所有其他版本。

例如,如果要以2.6为主要版本安装Python 2.5、2.6和3.0,则可以在2.6构建目录中执行“ make install”,在其他构建目录中执行“ make altinstall”。

现在,我想卸载自己安装的2.7.9。

  1. 幸运的是我仍然有源代码,但是不幸的是, Makefile中没有卸载部分

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. 然后,我尝试了另一种方法:首先从源代码创建一个deb并进行编译,安装deb(希望从中覆盖已安装的文件make altinstall),然后卸载deb。

    但是,当我创建by的deb文件时checkinstall,我不确定是否应该以及如何为make altinstallfor 做不同的事情make install。我试过的是:

    $ checkinstall altinstall
    
    ...
    
    Installing with altinstall...
    
    ========================= Installation results ===========================
    /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found
    
    ...

    我想知道如何创建一个deb,以便安装deb会重复安装过程make altinstall吗?

  3. 或者,您如何卸载python 2.7.9?

注:源包中的第一环节也有setup.pyinstall-sh除了README


Python不在很多地方安装。我只是手动删除文件。
Faheem Mitha 2015年

谢谢。那么那些地方不多?
StackExchange for All

看一下其中一个二进制包。我认为,这基本上是相同的地方,只是/usr/local使用代替/usrdpkg -L python2.7dpkg -L python2.7-minimal。而您需要2.7.9什么呢?
Faheem Mitha 2015年

我听说它默认为点子。但是安装后,我发现它没有点子。
2015年

您可以安装pip apt-get install python-pip
Faheem Mitha 2015年

Answers:


20

以下命令将删除make altinstall-ed python:

rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/bin/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7

您可能还需要做

rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7

尽管make altinstall如果“系统python”的major.minor号与您安装的数字不同,这对我很有帮助,但如果仅微号(第三个位置)不同,它就不能很好地工作。该数字从已安装的二进制文件中排除,最终得到两个版本的pythonX.Y。这始终是一个问题,但是一旦发行版开始使用基于2.7.X的系统实用程序发行,这个问题就更加严重了,因为2.7应该是Python2系列的最后一个。

IMO解决此问题的最佳方法是防止它成为一体:将python配置为安装在任何其他python都不使用的目录中。在我的系统上,它们崩溃了/opt/python/X.Y.Z

要使用安装在其中的任何Python,请使用[virualenv][1]一个新的环境:

virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate

或使用[virtualenvwrapper][2]。我使用的系列中的最新版本有一些别名。

如果要tox用于多个版本的测试(应该使用),则以下别名将帮助它查找各种版本:

alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'

(这些当前是最新版本,在下载,构建和安装新python版本的过程中,我通过维护从/opt/python/2.7到Latest的链接/opt/python/2.7.9以及其他次要编号,使用了稍微不同的设置)

这些安装永远不会直接使用。它们始终virtualenv仅用作环境的基础,因此我不在乎它们不在我的常规PATH中。


2
不要删除/usr/local/lib/python2.7!pip安装的所有全局python模块都位于/usr/local/lib/python2.7/dist-packages中。所有这些模块都将损坏!
abhaga

2
@abhaga您不应在任何 Linux 安装中以pip外部安装virtualenv
Anthon

我们也不应通过手动删除文件和目录来卸载软件包。:)这些都是很好的做法,在某些情况下我们需要打破它们。但是重要的是要知道删除该目录并不安全。
阿卜哈加

在我的CentOS7中,有一些不同之处:1. include应该是:/usr/local/include/python2.7,没有bin;2. man文件是/usr/local/share/man/man1/python2.7.1;3.其他文件:/usr/local/bin/python2.7-config
滨小号

7

从@Anthon的rm列表开始,并应用@ bin-s的建议来搜索较新的文件,我想出了这个bash脚本来完全清除我的Python-3.6.6(已使用来源安装make altinstall):

prefix='/usr/local/'
pyver='3.6'

rm -rf \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}lib/pkgconfig/python-${pyver}.pc \
    ${prefix}lib/libpython${pyver}m.a \
    ${prefix}bin/python${pyver}m \
    ${prefix}bin/2to3-${pyver} \
    ${prefix}bin/python${pyver}m-config \
    ${prefix}bin/idle${pyver} \
    ${prefix}bin/pydoc${pyver} \
    ${prefix}bin/pyvenv-${pyver} \
    ${prefix}share/man/man1/python${pyver}.1 \
    ${prefix}include/python${pyver}m
    ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

请谨慎使用(例如,-I在rm cmd中添加选项以验证每个杀死对象)。


非常好。现在,当我键入python3并按Tab时,python3.X不会显示
Prometheus

1

通常,所有文件都将在一分钟内安装完毕。您可以使用“查找”来几乎同时检查所有已安装的文件,然后手动“ rm”它们。希望对您有所帮助。

find /usr/local/ -type f -newer <some latest old file>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.