Mac和Linux终端运行py脚本的命令
在 Mac 与 Linux 操作系统中,终端(Terminal)运行 Python 脚本的最核心命令形式是直接调用 Python 解释器并传入脚本文件名:python3 脚本名.py。这一命令指示系统唤起 Python 3 解释进程,逐行解析并执行脚本中的代码逻辑。本文将围绕这一核心操作,系统讲解从环境定位、基础命令执行、Shebang 独立可执行配置到虚拟环境调用的完整步骤与避坑细节。
一、基础操作流程:从定位目录到执行脚本
在终端中运行 Python 脚本遵循明确的前置操作顺序:打开终端、核对 Python 解释器环境、切换到目标工作目录,最后执行运行指令。任何一个环节缺失都可能导致命令报错或找不到文件。
1. 打开终端并核验解释器
在 Mac 上可以通过“聚焦搜索(Command + 空格)”输入“终端”或“Terminal”并打开;在 Linux 发行版(如 Ubuntu、CentOS、Debian)中,可以使用快捷键 Ctrl + Alt + T 快速开启终端窗口。
进入终端后,首先输入以下命令验证 Python 3 解释器是否可用:
python3 --version
示例输出:
Python 3.10.12
如果终端返回了具体的版本号,说明当前系统的 Python 3 运行时处于可用状态。在多数现代 Mac(macOS 12.3 以后已移除内置 Python 2)和主流 Linux 发行版中,python 命令通常未绑定或已弃用,因此应始终明确使用 python3 命令以避免歧义。
2. 切换到脚本所在目录并执行
终端默认位于用户主目录(~)。执行脚本前,推荐使用 cd 命令进入脚本保存的文件夹。例如脚本存放在 Documents/projects 目录下:
cd ~/Documents/projects
ls -l main.py
python3 main.py
除了先切换目录,也可以在任意工作路径下直接向 python3 传入脚本的相对路径或绝对路径:
# 使用绝对路径执行
python3 /Users/username/Documents/projects/main.py
# 在 Linux 下的绝对路径示例
python3 /home/username/projects/main.py
二、显式调用与 Shebang 独立执行的机制对比
在 Unix-like 系统中,运行 Python 脚本有两种主流机制:显式传参运行与利用 Shebang 将脚本转为直接可执行程序。两者的实现原理、依赖条件和运行命令均有所区别。
1. 方式 A:显式指定解释器(推荐通用方式)
命令格式:python3 script.py
在这种模式下,直接由 Shell 启动 python3 可执行程序,script.py 仅作为命令行参数传入。系统读取 script.py 的文件内容并送入解释器。此方式具有显著优势:
- 权限要求低:只需要对
script.py文件拥有读取权限(r),无需可执行权限(x)。 - 解释器明确:可以通过指定不同路径的解释器运行同一份脚本,例如使用系统解释器
/usr/bin/python3或特定虚拟环境解释器。 - 跨平台一致:命令形态在 macOS、Linux 以及 Windows PowerShell 中完全一致。
2. 方式 B:Shebang 模式(直接运行 ./script.py)
命令格式:./script.py
如果不希望每次都在文件名前手动键入 python3,可以通过以下两步将脚本转为独立可执行文件:
-
在脚本首行添加 Shebang 注释行:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- print("Hello from executable Python script!")这里的
#!/usr/bin/env python3指示系统通过env程序在当前 Shell 环境的PATH中寻找第一个python3解释器来运行后续代码。这比硬编码绝对路径#!/usr/bin/python3更加通用,能无缝适应 Mac 与不同 Linux 发行版的安装位置差异。 -
赋予文件可执行权限:
chmod +x script.py -
直接执行:
./script.py注意开头的
./不能省略。Unix 系统出于安全策略考虑,默认不将当前目录(.)加入到可执行路径搜索列表中,必须显式指明路径。
三、解释器路由、PATH 查找与虚拟环境运行
在 Mac 与 Linux 机器中,往往同时存在多个 Python 解释器(系统自带、Homebrew 安装、Conda 环境、venv 独立环境)。理解终端是如何找到解释器的,是避免“第三方库装了却找不到”的关键。
1. 解释器路径解析与 which 命令
在终端输入 python3 时,Shell 会按照环境变量 $PATH 中定义的目录顺序依次搜寻。可以使用 which 命令确认当前生效的具体二进制文件:
which python3
常见路径对应场景如下:
/usr/bin/python3:Linux 系统自带默认安装路径,或 macOS 命令行工具包提供的基础解释器。/usr/local/bin/python3(Intel Mac / Linux 手动编译)或/opt/homebrew/bin/python3(Apple Silicon Mac):由 Homebrew 或包管理器安装的独立版本。/home/user/myenv/bin/python3:当前处于激活状态的独立虚拟环境。
2. 虚拟环境(venv)中的两种执行方式
在真实项目中,为了避免污染系统全局环境,通常在项目内建立虚拟环境:
# 创建名为 .venv 的虚拟环境
python3 -m venv .venv
在虚拟环境中运行脚本有两种命令形态:
-
激活环境后运行(交互式开发推荐):
source .venv/bin/activate python main.py deactivate激活后,环境会自动修改当前 Shell 会话的
$PATH变量,并将.venv/bin置于首位,此时直接使用python main.py即可命中该虚拟环境及其依赖包。 -
直接调用虚拟环境解释器(脚本与定时任务推荐):
# 无需激活环境,直接显式指定虚拟环境内的 python 路径 ./.venv/bin/python main.py # 绝对路径形式(适用于 crontab 定时任务) /home/user/project/.venv/bin/python /home/user/project/main.py这种直接指定解释器路径的方式不依赖 Shell 激活状态,在 Linux 系统的
crontab定时任务、systemd守护进程或自动化部署脚本中极其稳定,能彻底隔绝环境变量缺失导致的找不到模块问题。
四、常用执行参数与进阶运行模式
在实际生产中,除了简单运行单个 .py 文件,还经常需要处理命令行传参、以模块形式启动包结构代码,以及在后台长期运行脚本。
1. 向脚本传递命令行参数
在文件名之后附加的任何内容都会作为参数传递给脚本,脚本内部可以通过内置的 sys.argv 或 argparse 模块接收:
python3 process_data.py --input /data/raw.csv --limit 100
如果使用 Shebang 可执行模式,传参方式完全相同:
./process_data.py --input /data/raw.csv --limit 100
2. 模块运行模式:-m 参数
当项目包含层级包结构,且代码中使用相对导入(如 from .utils import helper)时,直接执行子脚本容易触发 ImportError: attempted relative import with no known parent package。此时应退回到项目根目录,使用 -m 模块运行模式:
# 在项目根目录下,以模块名(不带 .py)形式执行
python3 -m my_package.sub_module
-m 参数会将当前执行目录自动添加到 sys.path 的首位,确保包内所有模块的相互引用关系正常解析。
3. 后台运行与防止会话中断
在 Linux 服务器或 Mac 远程 SSH 连接中执行耗时任务时,若直接关闭终端窗口,默认会发送 SIGHUP 信号终止当前进程。若需让脚本在后台持续执行,可使用 nohup 配合 &:
nohup python3 -u worker.py > worker.log 2>&1 &
参数解析:
nohup:忽略挂断信号(Hangup)。-u:强制标准输出和标准错误采用无缓冲(unbuffered)模式,确保日志即时写入文件。> worker.log 2>&1:将标准输出(1)和标准错误(2)全部重定向到worker.log文件。&:将任务置入后台运行,终端立即释放交互提示符。
五、常见报错排查与速查清单
在 Mac 与 Linux 终端运行 Python 脚本时,绝大多数问题集中在“权限不足”、“命令找不到”或“模块缺失”。针对这些高频报错,有针对性的排查步骤能快速定位并解决问题。
找不到命令看 PATH;权限受阻查 chmod;模块报错核对 which 解释器。
| 报错现象 | 底层原因 | 解决方案 |
|---|---|---|
command not found: python |
系统未建立 python 软链接,默认仅存在 python3 |
直接改用 python3 脚本.py,或在 ~/.zshrc / ~/.bashrc 中添加 alias python=python3 |
permission denied: ./script.py |
脚本文件未被赋予可执行权限位 | 执行 chmod +x script.py,或者放弃直接运行改为 python3 script.py |
No such file or directory |
终端当前所在工作路径与脚本路径不一致,或文件名拼写有误 | 执行 pwd 确认当前目录,使用 ls 核对文件是否存在,或使用绝对路径 |
ModuleNotFoundError: No module named 'xxx' |
当前调用的 python3 与执行 pip install 时的环境不一致 |
使用 python3 -m pip install xxx 确保依赖装入同一解释器 |
六、总结
在 Mac 与 Linux 终端运行 Python 脚本的核心逻辑十分清晰:
- 对于常规交互开发与学习测试,
python3 script.py是最稳妥、兼容性最好的命令形式,无需额外配置执行权限。 - 对于编写独立命令行运维工具,使用
chmod +x script.py配合首行#!/usr/bin/env python3,可以获得如同系统原生命令般直接运行(./script.py)的体验。 - 在复杂工程与自动化服务中,善用
python3 -m 模块名保证包检索路径无误,并通过 指定虚拟环境解释器完整路径 确保外部依赖隔离与调度任务的稳定运行。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













