6

在准备 Python 3.7 时,我3.7.0b3从源代码安装了 Python。现在 3.7 出来了,我想使用为 Ubuntu 打包的版本。所以我已经完成了

apt-get install python3.7

$ which python3.7
/usr/local/bin/python3.7

$ /usr/local/bin/python3.7 --version 
Python 3.7.0b3

如何卸载从源代码安装的 Python(在 Ubuntu 上)?或者我怎样才能用 apt repo 打包版本替换它?

4

3 回答 3

12

既然你开了一个赏金,我不能投票关闭作为一个副本,但这个问题似乎提供了一个可能的解决方案。引用已接受的答案:

您可以使用 checkinstall 来删除 Python。这个想法是:

  1. 安装检查安装
  2. 使用 checkinstall 制作 Python 安装的 deb
  3. 用于dpkg -r删除 deb。

checkinstall基本上包装一个make install命令并根据安装的内容创建一个 Debian.deb包。然后,您可以卸载该软件包以make install完全反转。为了绝对安全,您可能需要先卸载打包的 Python 3.7,然后再重新安装以避免任何冲突(不过,我不希望有任何冲突,因为打包的版本位于 /usr 而您的源版本位于 /usr/local )。

如果您没有源文件,您可以随时再次下载它们(https://www.python.org/downloads/release/python-370b3/)并重建 Python。具体来说,这些checkinstall命令看起来像这样:

sudo apt install checkinstall
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0b3.tgz
tar xf Python-3.7.0b3.tgz
cd Python-3.7.0b3
./configure && make
sudo checkinstall -D --fstrans=no make install
sudo dpkg -r Python-3.7.0b3.deb

-D创建一个 Debian 软件包,--fstrans=no禁止使用临时目录进行安装)。

于 2018-07-21T00:37:05.133 回答
3

由于我也在迁移到 python 3.7,所以我遇到了这个问题并决定回答它,并完成我的安装。这是我用于在 ubuntu 16.04 上安装 python 3.7 的两个来源: https ://askubuntu.com/questions/865554/how-do-i-install-python-3-6-using-apt-get https: //superuser.com/questions/241865/updating-python-on-ubuntu-system

显然,从第一个来源来看,deadsnakes PPA 包含 Python 3.7 - 链接:https ://github.com/deadsnakes/python3.7/tree/ubuntu/xenial/Python

因此,从我的第一个来源开始,我使用以下命令安装 Python 3.7:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.7

它成功安装了 Python 3.7,但我的 Python 3.5.2 仍然是默认的。您可以通过运行以下命令来调用/使用 Python 3.7:

python3.7 script.py

它有效,所以我决定通过删除 python 3.5 将 Python 3.7 设置为默认值,但我遇到了我的第二个来源,并决定python3.7在终端中运行我的脚本时坚持使用。

显然它说:Ubuntu 政策广泛用于编写最终用户软件。所以基本上,系统的很大一部分是用 Python 编写的。要切换到 Python 3.7,需要完成一项工作,包括更新和重新测试所有脚本。

所以说你不能只是切换到 Python 3.7 并删除旧版本。

同样来自我的第一个来源的评论指出,删除旧版本可能会破坏系统。我一直没有删除我的旧版本以防它可能会破坏系统,但是由于您询问如何下载 Python 3.7,我认为我的第一个来源和我的答案的第一部分应该是这项工作。

我希望它有帮助:)

于 2018-07-21T01:04:27.373 回答
2

似乎您从源代码构建的 Python 是 under /usr/local,而您的PATH变量/usr/local/bin之前是 under /usr/bin,因为运行python3.7会得到一个 under/usr/local而不是打包的一个/usr/bin/python3.7

看看你的PATH来验证这一点。

echo $PATH

(当您在 中运行程序时bash,该特定运行bash实例将记住该位置,并且不会PATH再次重新扫描该程序中的目录,因此它不会注意到在PATH.hash -r重置缓存或退出外壳并再次启动它。)

我认为您的目标是python3.7(或 Python 提供的任何其他命令)从您的打包安装中运行/usr.

不幸的是,python 构建过程不提供卸载方法——仅删除源 Python 安装安装的文件的唯一自动化方法需要提前使用其他工具(例如checkinstall)。

所以你有一些选择:

  • 改变你的PATH所以/usr/local/bin是之后/usr/bin。为此,请编辑您的~/.profile文件或任何其他配置您的PATH和注销/登录的脚本。这也会影响您运行的任何其他在/usr/local/bin和中都可用的命令/usr/bin

  • 删除/usr/local并重新安装您想要的任何其他内容。如果 Python 安装是你/usr/local的 .

  • 煞费苦心地找出哪些文件/usr/local/bin是 Python 的一部分并将其删除。您也许可以使用/usr/bin已安装python3软件包中的相应文件作为起点来找出/usr/local/bin.

/usr/bin从已安装的python3*包中获取文件列表的单行:

$ for pkg in $(dpkg -l 'python3*' | grep '^ii' | cut -f 3 -d' '); do dpkg -L $pkg | grep '^/usr/bin/'; done | sort

这应该产生一个文件列表,如:

/usr/bin/2to3-3.x
/usr/bin/chardet3

...

(我已经在 Debian 上测试过这个单线,我不确定 Ubuntu 是否需要任何更改)

于 2018-07-21T01:59:12.007 回答