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

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

我通过编译在Ubuntu 14.04上安装了Python 2.7.9它的来源、 由.configremake、 和make 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 install”安装该版本。使用“make altinstall”安装所有其他版本。

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

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

  1. 幸运的是我还有源代码,但不幸的是, 生成文件没有卸载部分

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

    但是当我通过 创建 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.py除了install-sh.README

答案1

以下命令将删除你的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/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”与您安装的主次号码不同,那么它对我很有帮助,但如果只有微号码(第三个位置)不同,它就不能很好地工作。该数字被排除在安装的二进制文件之外,最终得到两个版本的 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'

/opt/python/2.7(这些是目前的最新版本,在下载、构建和安装新的 python 版本的过程中,我通过维护从最新版本/opt/python/2.7.9以及其他次要版本的链接来使用略有不同的设置)

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

答案2

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

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

rm -rf \
    $HOME/.local/lib/Python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/python${pyver}-config \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${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
rm -rI ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

小心使用它(例如-I在命令中添加选项rm,以验证每个杀死)。

答案3

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

find /usr/local/ -type f -newer <some latest old file>

答案4

我最终做了以下事情:

  1. 重建并安装你想要使用自定义前缀卸载的Python,比方说$HOME/opt/Python-3.8.0tar tJf Python-3.8.0.tar.xz && cd Python-3.8.0 && ./configure --prefix $HOME/opt/Python-3.8.0 && make && make install
  2. cd $HOME/opt/Python-3.8.0 && find * -type f | perl -pe's(^)(/usr/)' | sudo xargs rm
  3. rm -rf ~/opt/Python-3.8.0

相关内容