在准备Python 3.7时,我从源代码安装了Python 3.7.0b3
。现在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打包版本替换它?
答案 0 :(得分:10)
自您打开赏金以来,我无法投票决定关闭重复项,但是this question似乎提供了一种可能的解决方案。引用已接受的答案:
您可以使用checkinstall删除Python。这个想法是:
- 安装checkinstall
- 使用 检查安装以使您的经验丰富 Python安装
- 使用
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
禁止使用临时目录进行安装)。
答案 1 :(得分: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
显然,第一个消息来源的死神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
。 / p>
显然它说: Ubuntu广泛地制定了编写最终用户软件的政策。因此,基本上,系统的大部分是用Python编写的。要切换到Python 3.7,需要完成一些工作,包括更新和重新测试所有脚本。
可以说您不能只切换到Python 3.7并删除旧版本。
从我的第一个消息来源的评论中也可以看出,删除旧版本可能会破坏系统。为了防止系统崩溃,我还没有删除过我的旧版本,但是由于您正在询问如何下载Python 3.7,因此我认为我的第一篇文章和答案的第一部分应该起作用。 >
我希望这会有所帮助:)
答案 2 :(得分:2)
似乎您从源代码构建的Python在/usr/local
下,并且PATH
变量在/usr/local/bin
之前有/usr/bin
,因为运行python3.7
可以使您/usr/local
下的一个,而不是/usr/bin/python3.7
下的打包的。
查看您的PATH
进行验证。
echo $PATH
(当您在bash
中运行程序时,正在运行的特定bash
实例将记住该位置,而不会再次扫描该程序在PATH
中的目录,因此不会请注意,新文件出现在PATH
的较早位置。您可以通过运行hash -r
重置缓存或退出shell并再次启动来防止这种情况。
我假设您的目标是让python3.7
(或Python提供的任何其他命令)运行来自/usr
中打包安装的版本。
不幸的是,python构建过程没有提供卸载方法-仅删除源Python安装中已安装文件的唯一自动方法是需要提前使用其他工具(例如checkinstall
)。
所以您有一些选择:
更改PATH
,以使/usr/local/bin
在/usr/bin
之后。为此,请编辑~/.profile
文件或配置了PATH
的任何其他脚本,然后注销/登录。这也会影响您运行的/usr/local/bin
和/usr/bin
中可用的任何其他命令。
删除/usr/local
并在此处重新安装其他任何您想要的东西。如果您的/usr/local
中只有Python安装,或者可以轻松地重新安装其中的其他任何东西,那么这可能就是解决方法。
辛苦地找出/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是否需要任何更改)