如何使python3.7成为默认值

pic*_*olo 20 python python3

我已经安装了 python3.7,但是我不确定如何使它成为默认的 python。

见下文:

~/Documents/robosuite$ python3.7
Python 3.7.1 (default, Oct 22 2018, 11:21:55) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
KeyboardInterrupt
>>> 

~/Documents/robosuite$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Run Code Online (Sandbox Code Playgroud)

我希望在使用命令时显示 python3.7 python3

Prv*_*dav 29

简单的解决方案是编辑.bashrc并放置这一行:

alias python3=python3.7
Run Code Online (Sandbox Code Playgroud)

每当您编写python3它时,它都会将其替换为python3.7.

或者您可以使用update-alternatives首选的命令,即:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
Run Code Online (Sandbox Code Playgroud)

所以这里python3.7会有更高的优先级python3.6。然后使用:

sudo update-alternatives --config python3
Run Code Online (Sandbox Code Playgroud)

如果满意请按回车键

  • **年轻玩家的陷阱**:我强烈建议使用更新替代方法而不是别名方法,因为 _aliases 在非 shell 环境中不起作用(非交互式 shell 也忽略 .bashrc)_。以一个以shebang`#!/usr/bin/env python3`开头的python文件为例:使用`./myscript.py`运行它会忽略你的别名,而`python3 myscript.py`会在python中运行3.7.1 在你的情况下。歧义的其他常见情况是通过 ssh 或从 shell 脚本内部调用命令。 (12认同)

小智 5

我想扩展之前的答案,因为给出的两种方法并不等效,其中一种甚至可以破坏系统。问题是通过“更改默认的python版本”可以尝试做两种不同的事情。

快速总结

添加

alias python3=python3.7
Run Code Online (Sandbox Code Playgroud)

.bashrc

千万不能使用update-alternatives更改默认的Python版本,因为这会破坏系统应用。

更多细节

Bash 别名

第一,对于交互式shell,人们只是希望通过编写轻松打开所需的python

$ python
Run Code Online (Sandbox Code Playgroud)

或者

$ python3
Run Code Online (Sandbox Code Playgroud)

这是通过添加行来完成的

alias python3=python3.7
Run Code Online (Sandbox Code Playgroud)

.bashrc。如果正在使用另一个 shell,请将其添加到相应的配置文件中。这还有一个好处,如果它因任何原因导致问题,您可以简单地移除有问题的线路.bashrc并重新启动终端。

update-alternatives

“更改默认 python 版本”可能意味着的第二件事是更改所有程序的默认 python 版本,包括那些不是从交互式 shell 启动的程序。这是运行的结果

$ sudo update-alternatives --config python3
Run Code Online (Sandbox Code Playgroud)

但是,如果您在 Debian/Ubuntu 的全新安装中运行它,您会注意到该命令返回

update-alternatives: error: no alternatives for python3
Run Code Online (Sandbox Code Playgroud)

即使您通过apt. 这有一个很好的理由。

这个的问题是许多系统应用程序使用 python,并且根据确切的分布,许多使用 python 3。更改python3全局命令调用的版本将强制这些应用程序使用这个版本。尽管不同版本的 python 3 在很大程度上兼容,但在不同版本之间仍有一些功能移动和删除。如果系统应用程序使用这些功能,更改python3以启动更新版本将破坏应用程序。

测试

我在 VM 中创建了全新安装的 Ubuntu 18.04。添加 bash 别名不会立即导致问题。

使用该update-alternatives方法会导致apt. 具体来说,我得到了

ModuleNotFoundError: No module named 'apt_pkg'
Run Code Online (Sandbox Code Playgroud)

如果您运行该update-alternatives方法,则修复您的系统

如果我们跑了update-alternatives又坏了apt,我们仍然可以修复系统。在我的测试过程中,终端仍然能够打开。可以通过运行返回到默认的python

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.X 1000
Run Code Online (Sandbox Code Playgroud)

其中 3.X 是您的系统原始 python 3 版本,而 1000 只是确保它位于最前面的一些高优先级。然后,一个可以运行

$ sudo update-alternatives --config python3
Run Code Online (Sandbox Code Playgroud)

并确保选择了原始系统python。重新启动系统,它将恢复正常。