使用 #!/usr/bin/env python3 (Shebang / 魔法行)
这是最常用、最推荐的方法,尤其是在编写需要直接执行的脚本时,它告诉操作系统:“请使用 PATH 环境变量中找到的第一个 python3 解释器来执行此脚本”。

优点:
- 可移植性强:脚本在不同机器上都能工作,只要用户的
PATH中有python3。 - 简单直观:是 Unix/Linux/macOS 脚本的标准做法。
- Windows 支持:现代 Windows (通过 WSL 或 Git Bash) 和 Python 安装程序也能很好地识别这种 shebang。
如何使用:
- 在你的 Python 脚本的第一行,写下
#!/usr/bin/env python3。 - 确保你的脚本有可执行权限 (
chmod +x your_script.py)。 - 直接通过
./your_script.py运行脚本。
示例 (my_script.py):
#!/usr/bin/env python3
import sys
print(f"当前使用的 Python 版本是: {sys.version}")
print("脚本执行成功!")
# 你还可以指定更精确的版本,但这需要系统支持
# 指定 Python 3.9:
#!/usr/bin/env python3.9
如何指定更精确的版本 (如 Python 3.9)?

如果系统中有 python3.9 这个可执行文件,你可以直接替换:
#!/usr/bin/env python3.9
但这种方法依赖于 PATH 中是否存在 python3.9,不如第一种通用。
使用虚拟环境
这是管理项目依赖和 Python 版本的最佳实践,虚拟环境可以为每个项目创建一个独立的、隔离的 Python 环境,你可以在这个环境中指定任意你需要的 Python 版本。
优点:

- 完美隔离:避免项目之间的依赖冲突。
- 版本精确控制:可以为每个项目指定不同的 Python 版本。
- 可重现性:确保开发、测试和生产环境的一致性。
如何使用 (以 venv 为例,Python 3.3+ 内置):
-
创建虚拟环境:
- 假设你希望项目使用 Python 3.9,确保你的系统已安装 Python 3.9。
- 在项目根目录下,运行以下命令来创建一个使用 Python 3.9 的虚拟环境:
# python3.9 -m venv my_project_env
这会创建一个名为
my_project_env的文件夹,里面包含了独立的 Python 解释器和 pip。
-
激活虚拟环境:
- macOS / Linux:
source my_project_env/bin/activate
- Windows (CMD):
my_project_env\Scripts\activate.bat
- Windows (PowerShell):
my_project_env\Scripts\Activate.ps1
激活后,你的终端提示符前面会出现
(my_project_env),表示你已在该环境中。
- macOS / Linux:
-
运行脚本: 你在这个终端中运行的任何
python或pip命令,都会使用虚拟环境中的版本(即 Python 3.9),直接运行你的脚本即可:python your_script.py
-
退出虚拟环境:
deactivate
使用 pyenv 管理 Python 版本
如果你的系统需要同时管理多个 Python 版本(同时有 Python 3.8, 3.9, 3.10),pyenv 是一个非常强大的工具,它允许你轻松地在全局或按项目目录切换 Python 版本。
优点:
- 多版本管理:可以安装和管理多个 Python 版本。
- 项目级覆盖:可以为每个项目目录设置一个“局部”的 Python 版本。
- 与
pipenv和poetry良好集成。
如何使用:
-
安装
pyenv:- macOS (使用 Homebrew):
brew install pyenv - Linux (Ubuntu/Debian):
curl https://pyenv.run | bash - Windows: 可以通过 pyenv-win 安装。
- macOS (使用 Homebrew):
-
安装你需要的 Python 版本:
# 安装 Python 3.9 pyenv install 3.9.18 # 安装 Python 3.10 pyenv install 3.10.8
-
设置 Python 版本:
-
全局设置 (影响所有新 shell 会话):
pyenv global 3.9.18
-
局部设置 (仅影响当前目录及其子目录):
# 进入你的项目目录 cd /path/to/your/project # 为当前项目设置 Python 3.10 pyenv local 3.10.8
这会在当前目录创建一个
.python-version文件,pyenv会自动读取它。
-
-
运行脚本: 设置完成后,在当前 shell 中,
python命令会自动指向你指定的版本,直接运行脚本即可:python your_script.py
使用 __requires__ 和 importlib (高级技巧)
这是一种非常规的方法,可以在脚本运行时动态查找并加载指定版本的 Python 解释器,它不常用,但在某些特殊场景下(如创建一个启动器脚本)很有用。
工作原理:脚本会检查当前解释器版本,如果不匹配,则尝试调用 subprocess 来运行正确版本的 Python 解释器,并重新执行自身。
示例 (launcher.py):
import sys
import subprocess
# 定义你需要的 Python 版本
REQUIRED_VERSION = (3, 9)
def check_version():
"""检查当前 Python 版本是否符合要求"""
current_version = sys.version_info[:2]
if current_version < REQUIRED_VERSION:
print(f"错误: 需要 Python {REQUIRED_VERSION[0]}.{REQUIRED_VERSION[1]} 或更高版本。", file=sys.stderr)
print(f"当前版本是: {sys.version.split()[0]}", file=sys.stderr)
print("尝试使用 'pyenv' 或 'python3.9' 来运行脚本...", file=sys.stderr)
# 尝试使用 python3.9 运行
try:
# 获取当前脚本的路径
script_path = sys.argv[0]
# 使用 subprocess 调用正确版本的 python
subprocess.run([f"python{REQUIRED_VERSION[0]}.{REQUIRED_VERSION[1]}", script_path] + sys.argv[1:])
sys.exit(0) # 成功后退出
except FileNotFoundError:
print(f"错误: 未找到 python{REQUIRED_VERSION[0]}.{REQUIRED_VERSION[1]} 解释器。", file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f"启动正确版本时出错: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
check_version()
# --- 脚本的实际逻辑从这里开始 ---
print(f"成功使用 {sys.version.split()[0]} 运行脚本!")
print("这里是你的脚本内容...")
总结与推荐
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
Shebang (#!/usr/bin/env python3) |
可执行的脚本、CI/CD 任务 | 简单、可移植 | 依赖系统 PATH,精确版本控制较弱 |
虚拟环境 (venv) |
项目开发(强烈推荐) | 完美隔离、依赖管理、版本精确控制 | 需要手动激活/退出 |
pyenv |
需要在多个项目间切换 Python 版本 | 强大的多版本管理、项目级设置 | 需要额外安装工具,配置稍复杂 |
__requires__ 技巧 |
创建启动器脚本、兼容性检查 | 动态、自动化 | 代码侵入性强,不常用,可能引发递归问题 |
最佳实践建议:
- 对于绝大多数项目开发:使用 虚拟环境 (
venv),这是最标准、最可靠的方式。 - 如果你需要管理多个 Python 版本:使用
pyenv来配合虚拟环境。 - 对于需要直接在命令行执行的简单脚本:使用 Shebang 方法,并确保你的系统有
python3。 - 尽量避免在脚本内部进行复杂的版本检查和切换,这会使脚本变得复杂且难以维护,让环境管理工具(如
pyenv、venv)来处理版本问题。
