python脚本怎么执行基本方式有哪几种
全面解析Python脚本执行的几种基本方式,包括命令行直接运行、模块模式(-m)、Shebang可执行权限、IDE运行与交互式执行,并辨析常见误区与环境差异。
一、命令行/终端直接调用:最基础的标准方式
这是所有 Python 开发者必须掌握的核心方式。无论使用 Windows 的 PowerShell / CMD,还是 macOS 和 Linux 的 Terminal,直接调用解释器运行脚本的逻辑完全一致:在终端中输入解释器名称,后接待运行的脚本文件路径。
1. 基本命令格式与多版本区分
基本语法格式如下:
python script.py
在 Linux 或 macOS 系统中,由于历史上系统常预装 Python 2,系统别名可能将 python 指向旧版本,或完全未设置该别名。此时应明确使用 python3:
python3 script.py
2. 相对路径与绝对路径的使用
终端需要定位到该脚本所在的位置。有两种常见做法:
- 切换目录后执行:先用
cd进入脚本所在文件夹,再直接输入文件名:
cd /path/to/project
python3 main.py
- 直接使用完整路径执行:无需切换当前工作目录,在任何位置直接指定绝对路径或相对路径:
python3 /path/to/project/main.py
3. 携带命令行参数执行
执行脚本时可以在文件名后附加参数,多个参数之间使用空格分隔。这些参数会被捕获并存入标准库 sys.argv 列表中:
python3 process_data.py --input raw.csv --limit 100
在 process_data.py 中,sys.argv[0] 存放脚本名称,随后的元素依次存放传入的参数值。
二、以模块方式执行(python -m):规范的多文件项目运行方式
在编写中大型项目时,代码往往被组织在具有层次的包(Package)和子目录中。此时如果直接使用 python path/to/script.py,常常会遇到 ModuleNotFoundError 或相对导入失败(ImportError: attempted relative import with no known parent package)。
这是因为两者的模块搜索路径(sys.path)初始化机制截然不同:
- 使用
python script.py时,Python 会将script.py所在的直接目录添加到sys.path的第一个元素中。父级目录并不在搜索路径内。 - 使用
python -m mypackage.script时,Python 会将当前终端所在的工作目录(Current Working Directory)作为搜索根路径,随后按照模块层级逐步向下查找并执行。
操作示例与对比
假设项目结构如下:
my_project/
├── data/
│ └── helper.py
└── run/
└── task.py
如果在 task.py 中编写了 from data.helper import query_db,当在 my_project 目录下运行:
# 容易报错的方式:
python run/task.py
# 报错原因:此时 sys.path[0] 是 my_project/run,解释器找不到同级的 data 目录
# 正确规范的方式:
python -m run.task
# 正常运行:此时 sys.path[0] 是 my_project,能正确识别到 data 模块
三、作为系统可执行文件直接运行(Shebang 与文件权限)
在 Linux 和 macOS 环境下,可以像执行系统原生程序或 Shell 脚本一样,输入 ./script.py 直接运行 Python 脚本。这需要完成两个必要前置设置:声明 Shebang 首行与赋予执行权限。
1. 声明 Shebang(释伴行)
在 Python 脚本的最顶部第一行添加指示系统内核调用哪个解释器的指令:
#!/usr/bin/env python3
使用 /usr/bin/env python3 比直接硬编码 #!/usr/bin/python3 更推荐。因为 env 会在当前用户的 PATH 环境变量中动态查找第一个出现的 python3,当项目启用了虚拟环境时,它会自动匹配虚拟环境中的解释器,而不是强行使用系统默认环境。
2. 授予可执行权限
新建的文件在 Linux/macOS 上默认没有执行(x)权限,如果直接执行会收到 Permission denied 提示。需要在终端中为其赋予执行权限:
chmod +x script.py
3. 直接调用运行
赋予权限后,即可使用相对路径直接调用:
./script.py
py.exe)。如果系统安装了 py 启动器,在 CMD 中直接运行 py script.py,它同样能够识别文件开头的 #!/usr/bin/env python3 标记,并自动切换到匹配的 32 位/64 位或特定版本解释器。
四、在集成开发环境(IDE)中一键运行
在日常编写与调试代码时,绝大多数开发者更倾向于使用 IDE(如 VS Code、PyCharm、Spyder)或 Python 官方附带的 IDLE。这些工具提供了图形界面的“Run / 运行”按钮或快捷键(如 PyCharm 的 Shift + F10、VS Code 的 F5 / Ctrl + F5)。
IDE 运行的底层本质
很多初学者误以为 IDE 内部拥有一套不同于命令行的特殊执行引擎,其实不然。当你在 IDE 中点击“Run”时,IDE 做的实质工作是:
- 读取你在当前项目配置中绑定的 Python 解释器路径(例如
/project/.venv/bin/python); - 启动一个内置的终端会话(Integrated Terminal);
- 在终端中自动拼接并执行类似
/path/to/venv/python /path/to/current_file.py的完整命令。
理解这一点非常关键。当在 IDE 中遇到“第三方库已安装却报找不到”时,问题几乎总是因为 IDE 右下角选中的解释器 与你在系统终端里安装第三方库所使用的 Python 环境不一致所导致的。
五、在交互式环境(REPL / IPython / Jupyter)中动态执行
在进行算法调试、数据探索或快速验证时,除了将代码作为一个独立进程从头跑到尾,还可以利用交互式环境加载运行已保存的脚本。
1. 原生 REPL 中使用 exec() 动态执行
在终端直接输入 python 启动交互式命令行(出现 >>> 提示符)后,可以使用内置函数读取并执行文件:
>>> with open("script.py", "r", encoding="utf-8") as f:
... exec(f.read())
这种方式会将脚本中的变量、函数直接注入到当前交互会话的全局作用域中,方便在执行完毕后继续在 >>> 提示符下打印变量或调用函数检查结果。
2. IPython 与 Jupyter 中的 %run 魔法命令
在 IPython 交互终端或 Jupyter Notebook 单元格中,可以使用 %run 魔法命令:
In [1]: %run script.py
与原生的 exec() 相比,%run 会作为一个独立的顶层命名空间运行脚本(__name__ 会被置为 "__main__"),且运行完成后所有定义的变量依然驻留在交互环境中,非常利于数据分析过程中的重复实验。
六、容易混淆的说法与常见避坑点辨析
1. 说法辨析:“双击 .py 文件就能直接运行”
为什么看似合理:在 Windows 系统上安装 Python 时,如果勾选了文件关联,.py 文件的默认打开方式就是 Python 解释器。双击该文件确实会启动进程。
哪里需要修正:很多初学者双击后只看到一个黑色的黑框(命令行窗口)一闪而过,程序就结束了。这是因为控制台程序执行完毕后,操作系统会自动关闭该终端窗口。如果脚本没有最后一句阻塞等待用户输入的语句(例如 input("按回车键退出...")),肉眼根本来不及看清楚输出结果或报错信息。因此,脚本开发与调试应始终优先在终端或 IDE 中运行,而不是依赖双击。
2. 说法辨析:“只要有了虚拟环境,直接打 python 就一定使用的是该环境”
为什么看似合理:很多开发者认为自己已经在项目里建了 venv 目录,输入 python 就该自动关联。
哪里需要修正:虚拟环境生效的前提是已激活(Activate)或直接通过虚拟环境路径调用。如果没有执行激活脚本(如 source .venv/bin/activate 或 Windows 下的 .venv\Scriptsctivate),系统中的 python 命令依然指向全局 Python,从而导致依赖包缺失报错。最稳妥的方式是直接带路径执行:
# Linux / macOS:
.venv/bin/python main.py
# Windows:
.venv\Scripts\python.exe main.py
七、总结
执行 Python 脚本并没有唯一固定的方式,核心在于根据开发与运行环境的需求做出选择:
- 对于单文件测试与快速脚本,使用
python script.py即可快速满足需求; - 对于包含复杂模块引用的规范工程,优先在根目录执行
python -m package.module; - 对于类 Unix 运维脚本与自动化工具,编写首行 Shebang 配合
chmod +x可以让体验如原生命令般流畅; - 在开发阶段,合理配置 IDE 的解释器以获得良好的单步调试与补全支持;
- 在交互分析场景下,善用
%run保持内存状态,大幅提高探索效率。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









