如何更改默认的Python版本?

2024-05-14

我已经在我的 Mac 上安装了 Python 3.2。我跑完之后/Applications/Python 3.2/Update Shell Profile.command,当我输入时,这很令人困惑Python-V在终端它说Python 2.6.1.

如何更改默认的 Python 版本?


[2021 年更新]

(无论您使用的是 Mac、Linux 还是 Windows:)

如果您对如何启动最新版本的 python 感到困惑,在大多数平台上情况都是这样的python3留下你的python2安装完好(由于上述兼容性原因);因此你可以使用以下命令启动 python3python3命令。

从历史上看...

命名约定是,通常大多数脚本都会显式调用 python2 或 python3。发生这种情况是由于需要向后兼容.

尽管从技术上讲,Python 甚至不能保证次要版本之间的向后兼容性,但 Python3really破坏向后兼容性。当时,程序调用'python' 期待 python2(这是当时的主要版本)。非常旧的系统可能有期望的程序和脚本python=python2,更改此设置会破坏这些程序和脚本。

在写这个答案时,OP 不应该因为维护旧脚本的兼容性而改变这一点。

大约在 2021 年...

如今,在 python2->python3 过渡多年之后,大多数软件明确引用 python2 或 python3(至少在 Linux 上)。例如,他们可能会打电话给#!/usr/bin/env python2 or #!/usr/bin/env python3。这有例如(python-is-python3-package) https://askubuntu.com/questions/1296790/python-is-python3-package-in-ubuntu-20-04-what-is-it-and-what-does-it-actually释放了 python 命令,使其可以设置为用户默认值,但这实际上取决于操作系统。

发行版应如何处理的处方python命令在 2011 年被编写为PEP 394——类 Unix 系统上的“python”命令 https://www.python.org/dev/peps/pep-0394/。上次更新时间为 2019 年 6 月。

基本上,如果您正在编写一个库,您应该指定可以使用的 python 版本(2 或 3,或者在特定情况下更细粒度)。否则,作为最终用户,您应该随意重命名它以供您个人使用(尽管您的操作系统或发行版可能不会那么容易)。

外壳别名:

不过,您可以在 shell 中创建自定义别名。你这样做的方式取决于外壳,但也许你可以这样做alias py=python3,并将其放入 shell 启动文件中。这仅适用于您的本地计算机(应该如此),并且与仅键入它相比有些不必要(除非您不断调用该命令)。

困惑的用户不应尝试创建别名或虚拟环境或类似的内容python执行python3;这是很糟糕的形式。现在这是可以接受的,但 PEP 394 建议鼓励用户使用虚拟环境 https://www.python.org/dev/peps/pep-0405/反而。

不同的 3.* 版本或 2.* 版本:

在极不可能的情况下,如果有人用两个 python3 版本来回答这个问题,例如3.1 vs 3.2,并且您对以某种方式安装了两个版本的 python 感到困惑,这可能是因为您已经完成了手动和/或手动安装。您可以使用操作系统的标准包/程序安装/卸载/管理工具来帮助跟踪情况,并且也许(除非您正在做的开发工作令人惊讶地受到次要版本之间的一些向后不兼容更改的影响)删除旧版本(或者做make uninstall如果您进行了手动安装)。如果您需要两个版本,请重新配置您的$PATH变量,因此您想要的“默认”版本位于前面;或者如果您使用的是大多数 Linux 发行版,那么您要查找的命令是 sudoupdate-alternatives。确保您运行的任何需要访问旧版本的程序都可以通过其调用环境或 shell 正确调用(通过设置 varPATH在那个环境下)。

关于 $PATH 的一些信息

旁注:详细说明一下 PATH:选择程序的常用方法是通过PATH (echo $PATH在 Linux 和 Mac 上)环境变量。您始终可以使用完整路径运行程序,例如/usr/bin/???? some args, or cd /usr/bin then ./???? some args(例如,用我上面提到的“echo”程序替换空白),但否则输入???? some args没有的话就没有意义PATHenv 变量声明我们可以隐式搜索然后执行文件的目录(如果/usr/bin不在PATH,那么它会说????: command not found)。第一个目录中第一个匹配的命令是被执行的命令(whichLinux 和 Mac 上的命令会告诉您这是哪个子路径)。通常它是(例如在 Linux 上,但在 Mac 上类似)类似/usr/bin/python这是指向最终版本的其他符号链接的符号链接,例如:

% echo $PATH
/usr/sbin:/usr/local/bin:/usr/sbin:usr/local/bin:/usr/bin:/bin

% which python
/usr/bin/python
% which python2
/usr/bin/python2
% ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar  4  2019 /usr/bin/python -> python2*
% ls -l /usr/bin/python2  
lrwxrwxrwx 1 root root 9 Mar  4  2019 /usr/bin/python2 -> python2.7*
% ls -l /usr/bin/python2.7
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*

% which python3         
/usr/bin/python3
% ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 9 Mar 26  2019 /usr/bin/python3 -> python3.7*
% ls -l /usr/bin/python3.7
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*

% ls -l /usr/bin/python*
lrwxrwxrwx 1 root root       7 Mar  4  2019 /usr/bin/python -> python2*
lrwxrwxrwx 1 root root       9 Mar  4  2019 /usr/bin/python2 -> python2.7*
-rwxr-xr-x 1 root root 3689352 Oct 10  2019 /usr/bin/python2.7*
lrwxrwxrwx 1 root root       9 Mar 26  2019 /usr/bin/python3 -> python3.7*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7*
lrwxrwxrwx 1 root root      33 Apr  2  2019 /usr/bin/python3.7-config -> x86_64-linux-gnu-python3.7-config*
-rwxr-xr-x 2 root root 4877888 Apr  2  2019 /usr/bin/python3.7m*
lrwxrwxrwx 1 root root      34 Apr  2  2019 /usr/bin/python3.7m-config -> x86_64-linux-gnu-python3.7m-config*
lrwxrwxrwx 1 root root      16 Mar 26  2019 /usr/bin/python3-config -> python3.7-config*
lrwxrwxrwx 1 root root      10 Mar 26  2019 /usr/bin/python3m -> python3.7m*
lrwxrwxrwx 1 root root      17 Mar 26  2019 /usr/bin/python3m-config -> python3.7m-config*

sidenote2:(在极少数情况下,Python 程序会调用子程序subprocess模块,要指定运行哪个程序,可以修改子进程的路径sys.path从 sys 模块或PYTHONPATH在父进程上设置环境变量,或指定完整路径...但由于该路径是由子进程继承的,因此这不太可能是一个问题。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改默认的Python版本? 的相关文章

随机推荐

  • Cordova Phonegap“导出失败”错误代码 70 构建 ios 时

    我目前正在使用 Cordova Phonegap 构建 iOS 应用程序 本来工作正常 但现在运行时出现错误cordova build ios在终端中 我收到以下错误 导出失败 错误 命令的错误代码 70 带有参数的 xcodebuild
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 您对 Javascript MVC 框架有何建议? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Ruby 未绑定方法:是否可以强制绑定到其他类的实例?

    我想知道我是否可以强迫这种情况发生 class A def bomb bomb end end class B end bomb A instance method bomb b B new bomb bind b 目前它抛出错误 Type
  • 数据表:根据列中的值过滤行

    我需要从数据表中过滤掉列中不包含特定值的行 例如 对于下面的数据 我只想显示 type Dog 的结果 table tr th Type th th Breed th th Owner th tr tr td Dog td td Dober
  • Python 3.6 ZeroMQ (PyZMQ) asyncio pub sub Hello World

    我刚刚开始使用 ZeroMQ 我正在尝试让 Hello World 在 Python 3 6 中与 PyZMQ 和 asyncio 一起使用 我试图将模块的功能与发布 订阅代码分离 因此有以下类设置 Edit 1 最小化示例 Edit 2
  • 实体框架 - 查询可为空列时出现问题

    我在从具有可为空的tinyint 列的表中查询数据时遇到问题 问题似乎是查询生成为 AND CAST Extent1 PositionEffect AS int p linq 3 gt p linq 3 NULL 如果我手动运行该查询 它不
  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 监听服务响应 JavaScript

    背景 我正在为网页制作 Chrome 扩展程序 在此网页中 我需要捕获用户发出 POST 请求时服务器发送的响应 目前 我们使用观察者模式来检查 HTML 页面上的更改 但这很笨拙并且会触发多次 客观的 我需要捕获该响应 相应地解析其信息
  • 从一个文件重新归档到另一文件

    我正在尝试基于 emacs 实现 GTDhttp members optusnet com au charles57 GTD gtd workflow html http members optusnet com au charles57
  • 在 Chrome 中使用非常基本的 jQuery 单击链接时出现 INDEX_SIZE_ERR

    在 Chrome 版本 20 0 1132 57 中 多次单击附加了一些基本 jQuery 的简单链接 出现以下错误 Error in event handler for undefined INDEX SIZE ERR DOM Excep
  • 如何在 Angular 2 应用程序中从 TypeScript/JavaScript 中的字符串获取类?

    在我的应用程序中 我有这样的内容 user ts export class User 现在 我这样做 应用程序组件 ts callAnotherFunction User 如果我将类名作为字符串 即 我该如何做到这一点 User 如果可能的
  • ASP.NET - Google Chrome 缓存 DropDownList 选择

    我的购物车页面上的 Google Chrome 和 Safari 似乎遇到了缓存问题 购物车中有 2 个下拉列表 当您在更改下拉列表中的值后点击结帐按钮时 它会将列表中选择的内容提交到数据库 解释意外的行为有点困难 所以我会尝试一步一步地写
  • grails/mysql 时区更改

    完成更改应用程序时区的最佳方法是什么 在我看来 必须发生以下情况 服务器 TZ 已被系统管理员更改 mysql必须重新启动 数据库中每个基于时间的列都必须使用convert tz 或等效方法更新所有值 因此 要么必须编写一个 mysql 脚
  • 在 ffmpeg 中,如何使用scale2ref 过滤器缩放 dvdsub 字幕以匹配视频大小?

    我有一个从直播电视录制的 mpeg 文件 其中包含视频以及多个音频和字幕流 我的最终目标是能够创建较小的视频文件 因为 mpeg 文件大小为数 GB 我在这条道路上的第一步只是能够选择视频 音频和字幕流中的每一个并将它们复制到 mkv 文件
  • 如何创建自动滚动文本框

    我有一个 WPF 应用程序 其中包含一个多行文本框 用于显示调试文本输出 如何设置文本框 以便将文本附加到框中时 它会自动滚动到文本框的底部 我正在使用 MVVM 模式 理想情况下 纯 XAML 方法会很好 TextBox 本身不一定是焦点
  • PHP curl exec 在 php 脚本相同域上失败

    我使用 php curl 从同一域 url 中的 php 脚本获取内容 但我收到curl exec 错误 curl 错误代码为 28 或操作超时 经过几天的调试 我发现它可以在 htm 等非脚本页面上工作 但不能在 php 上工作 如果 u
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • Symfony 3新建项目报错

    我开始编写有关 Symfony 3 的教程 在使用以下命令创建新项目时遇到问题 php symfony phar new Symfony 我有这个错误 GuzzleHttp Exception RequestException Error
  • 如何更改默认的Python版本?

    我已经在我的 Mac 上安装了 Python 3 2 我跑完之后 Applications Python 3 2 Update Shell Profile command 当我输入时 这很令人困惑Python V在终端它说Python 2