多版本Python共存时怎么指定运行脚本

Felix
Felix
发布时间:2026-11-07| 4人浏览过
原创

讲解电脑中安装多个Python版本时,如何通过版本命令、解释器完整路径、Windows py启动器、虚拟环境和Shebang明确指定运行脚本所使用的Python解释器,并介绍验证版本和常见问题。

一台电脑同时安装 Python 3.10、3.11、3.12 等多个版本时,运行脚本的关键不是修改 .py 文件本身,而是明确告诉系统“使用哪个 Python 解释器来执行这个文件”。 最直接的方法是使用带版本号的命令、解释器完整路径,Windows 下还可以使用 py 启动方式;如果一个项目长期固定使用某个版本,则更适合建立对应的虚拟环境。

例如同一个 demo.py,可以由不同解释器执行。脚本内容没有变化,真正变化的是启动它的 Python 程序。

先弄清楚:执行脚本的是解释器,不是脚本自己选择版本

假设电脑里同时存在 Python 3.10 和 Python 3.12,在终端中输入下面的命令:

python demo.py

这里的重点其实是前面的 python。系统会根据当前环境中的命令搜索规则,找到一个叫 python 的可执行程序,再把 demo.py 交给它执行。

因此,多版本共存时如果只写 python,它到底对应哪个版本并不一定直观。更稳妥的思路是把解释器明确写出来。

多版本Python共存时怎么指定运行脚本
图1:多版本共存时,真正需要指定的是运行脚本的 Python 解释器。

方法一:直接使用带版本号的 Python 命令

在 macOS、Linux 等环境中,如果安装后已经提供了类似 python3.10、 python3.11 或 python3.12 的命令,可以直接把版本号写在命令里。

例如当前目录存在一个 demo.py:

python3.10 demo.py
python3.11 demo.py
python3.12 demo.py

三条命令都执行同一个文件,但分别使用三个不同的解释器。

在真正运行脚本之前,可以先检查相应命令对应的版本:

python3.11 --version

示例输出:

Python 3.11.x

这里用 x 表示具体补丁版本,因为实际结果由你的安装情况决定。

如果终端提示 python3.11: command not found 或类似错误,并不能直接说明 Python 3.11 没有安装。 也可能是该解释器没有加入 PATH,或者安装后使用了不同的命令名称。此时可以改用解释器完整路径。

方法二:使用解释器的完整路径,最明确也最不容易选错

当电脑上的 Python 版本比较多,或者 PATH 配置已经比较复杂时,直接指定解释器可执行文件的绝对路径最清楚。

macOS 或 Linux 可以是类似这样的形式:

/path/to/python3.11 demo.py

Windows 则可能是:

"C:\path\to\Python311\python.exe" demo.py

上面的路径只是格式示例,实际位置应以当前电脑中的安装路径为准,不能照搬。

如果不知道现在执行的 python 在哪里,可以先查询:

macOS / Linux

which python
which python3
which python3.11

Windows

where python

也可以让 Python 自己打印当前解释器的完整路径:

python -c "import sys; print(sys.executable)"

如果需要检查某个指定版本,同样把前面的命令替换掉:

python3.11 -c "import sys; print(sys.executable)"
多版本Python共存时怎么指定运行脚本
图2:先确定目标版本,再选择解释器,运行后还可以进一步验证实际使用的 Python。

Windows 下可以使用版本选择方式运行

在 Windows 上,如果当前 Python 安装环境提供了相应的 Python 启动器,可以通过版本参数明确选择解释器。 例如:

py -3.11 demo.py

如果需要使用另一个版本:

py -3.12 demo.py

这种写法的优势是不用把 Python 的完整安装目录写进每条命令里。

可以先检查当前系统能否识别 py 命令:

py --version

如果提示找不到 py,就不要继续照搬这种写法。直接使用已知的 Python 命令或 python.exe 完整路径即可。

如何确认脚本实际上用了哪个 Python

多版本环境最容易出现的问题,是“命令看起来执行成功了,但实际上用了另一个 Python”。为了排除这种情况,可以在测试脚本中加入:

import sys

print("Python版本:")
print(sys.version)

print("解释器路径:")
print(sys.executable)

将文件保存为 demo.py 后,例如执行:

python3.11 demo.py

示例输出格式:

Python版本:
3.11.x ...

解释器路径:
/path/to/python3.11

真正判断是否选对环境时,sys.executable 很有价值。版本号只能告诉你是哪一代 Python,而解释器路径还能告诉你到底运行了哪一个安装实例。

项目长期固定版本时,建议使用对应的虚拟环境

如果只是偶尔测试一次脚本,直接写 python3.11 demo.py 已经足够。但如果一个项目以后都必须使用 Python 3.11,仅靠每次手工输入版本号容易出错。

更合适的做法是先使用目标版本创建虚拟环境。

例如目标解释器是 python3.11:

python3.11 -m venv .venv

这条命令的关键仍然是最前面的 python3.11。它决定了这个虚拟环境基于哪个 Python 创建。

macOS / Linux 激活

source .venv/bin/activate

Windows CMD

.venv\Scripts\activate

激活后再检查:

python --version
python -c "import sys; print(sys.executable)"

此时项目中的 python 通常会指向虚拟环境自己的解释器,而不是系统中其他 Python。

以后运行:

python demo.py

就不需要每次都记住具体版本命令了。

虚拟环境不会自动把电脑里任意一个 Python“切换成”目标版本。创建虚拟环境时使用了哪个解释器, 这个环境通常就以那个解释器为基础。因此最需要确认的是创建虚拟环境的第一条命令。
多版本Python共存时怎么指定运行脚本
图3:长期项目更适合用目标 Python 创建虚拟环境,而不是每次依赖系统默认命令。

脚本开头的 Shebang 能不能指定 Python 版本

在 macOS 和 Linux 中,还经常会看到脚本第一行写成:

#!/usr/bin/env python3.11

完整示例:

#!/usr/bin/env python3.11

import sys

print(sys.version)
print(sys.executable)

这类写法主要用于脚本被直接执行的场景。例如在满足执行权限和系统环境条件后,可以使用:

./demo.py

/usr/bin/env python3.11 的含义不是写死某个安装目录,而是让 env 按当前 PATH 查找名为 python3.11 的程序。

这里需要区分一个容易混淆的情况。如果你明确执行:

python3.12 demo.py

那么实际使用的是命令行中的 Python 3.12,不能指望脚本第一行的 Shebang 把它重新切换到 Python 3.11。 因为此时脚本已经作为参数交给 Python 3.12 了。

为什么改了 PATH,运行的版本还是不对

PATH 的作用,是在只输入命令名称时帮助系统寻找可执行程序。例如:

python demo.py

如果 PATH 中某个目录里的 python 更早被找到,它就可能成为实际运行的解释器。

所以多版本环境中,与其反复修改 PATH,不如先用下面的方法确认现状:

python --version
python -c "import sys; print(sys.executable)"

如果发现实际路径并不是自己预期的解释器,再决定是使用带版本号命令、完整路径,还是为项目建立虚拟环境。

直接指定绝对路径时,不依赖 PATH 的版本选择顺序,这也是它最适合排查环境问题的原因之一。

pip 也要和对应的 Python 版本保持一致

指定 Python 版本运行脚本后,还有一个很常见的问题:脚本使用 Python 3.11, 但第三方库却被安装到了另一个 Python 中。

例如,不建议在多版本环境里只凭感觉执行:

pip install requests

因为此时的 pip 究竟属于哪个 Python,需要额外确认。

更明确的写法,是让目标解释器运行自己的 pip 模块:

python3.11 -m pip install requests

Windows 对应版本选择方式可以写成:

py -3.11 -m pip install requests

使用绝对路径时同样如此:

/path/to/python3.11 -m pip install requests

这样“安装依赖的 Python”和“运行脚本的 Python”使用的是同一个解释器,能减少 ModuleNotFoundError 一类由于环境错位导致的问题。

几种指定方式怎么选

使用场景 推荐方式 示例
临时运行一次指定版本 带版本号的解释器命令 python3.11 demo.py
Windows 中选择已安装版本 系统提供相应启动器时使用版本参数 py -3.11 demo.py
PATH 混乱或需要绝对明确 解释器完整路径 /path/to/python3.11 demo.py
项目长期固定一个版本 用目标解释器建立虚拟环境 python3.11 -m venv .venv
Unix 类系统直接执行脚本 根据需要使用 Shebang #!/usr/bin/env python3.11

常见问题:明明指定了Python 3.11,为什么脚本还是报缺少模块

这种情况通常不是“版本指定失效”,而是 Python 3.11 对应的环境里没有安装这个模块。

可以先确认解释器:

python3.11 -c "import sys; print(sys.executable)"

然后检查目标模块是否能被这个解释器导入。例如以 requests 为例:

python3.11 -c "import requests; print(requests.__file__)"

如果这里直接出现 ModuleNotFoundError,就说明当前 Python 3.11 环境没有找到该模块。 需要把依赖安装到这个解释器对应的环境,而不是盲目修改脚本。

python3.11 -m pip install requests

如果项目使用虚拟环境,则应先进入对应虚拟环境,再安装项目依赖。

多版本Python共存时怎么指定运行脚本
图4:临时运行、排查环境和长期项目,对应的版本指定方式并不相同。

一个完整的实际操作示例

假设电脑中同时安装了多个 Python,而某个项目明确要求使用 Python 3.11,脚本名为 demo.py。可以按照下面的顺序处理。

先确认命令是否对应目标版本:

python3.11 --version

再检查解释器位置:

python3.11 -c "import sys; print(sys.executable)"

确认无误后运行脚本:

python3.11 demo.py

如果这是一个长期维护的项目,则继续创建虚拟环境:

python3.11 -m venv .venv

激活环境后再次核对:

python --version
python -c "import sys; print(sys.executable)"

随后在这个环境中安装依赖并运行:

python -m pip install -r requirements.txt
python demo.py

这里有一个值得保留的习惯:安装包时使用 python -m pip,运行脚本时使用同一个环境里的 python。这样解释器和第三方库不容易错位。

总结:

多版本 Python 共存并不意味着必须频繁修改系统默认版本。真正可靠的做法,是在运行脚本时明确指定解释器。 临时执行可以使用 python3.11 demo.py 或对应解释器的完整路径;Windows 环境支持相应启动方式时, 可以使用 py -3.11 demo.py;长期项目则应使用目标 Python 创建独立虚拟环境。

如果不确定当前到底用了哪个版本,直接查看 sys.version 和 sys.executable。这比根据命令名称猜测版本更加可靠,也更容易定位 PATH、虚拟环境和依赖安装错位等问题。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。