Python脚本与代码的多种运行方式详解
本文详细解析Python脚本的多种运行方式,涵盖命令行直接执行、使用-m参数运行模块、REPL交互式编程以及通过import、importlib和exec在代码内部动态加载与执行脚本。文章对比了不同场景下的操作命令、权限要求及性能差异,帮助开发者掌握灵活运行Python代码的技巧。
Python脚本本质上是一个包含Python代码的文本文件。为了让这些代码实现预期功能,我们需要掌握正确的运行(run)方法。
通过执行Python代码,我们可以验证脚本或程序是否按预期工作。这一过程也是测试和调试的关键环节,有助于发现并修复潜在的Bug。
在Python生态中,运行脚本或程序的方式多种多样,具体选择取决于开发者的需求和个人偏好。
原文参考:https://realpython.com/run-python-scripts/
脚本与模块的概念区分
在计算机术语中,脚本(scripts)是指包含有序逻辑的文本文件,通过运行脚本来完成特定任务。
这些逻辑通常由脚本语言(scripting language)编写,脚本语言是一种允许用户操作、定制或自动化任务的编程语言。
脚本语言通常在运行时(runtime)由解释器逐行解释执行,而非在编译(compiled)阶段处理。因此,脚本的执行依赖于解释器按顺序执行其中的代码。
Python属于解释型语言。通常情况下,我们编写的Python代码被称为脚本,而在更复杂的应用程序中,它可能被称为入口点脚本。
另一方面,包含Python代码的文件(例如 )可以被其他Python文件(例如 )导入和使用,这种文件被称为模块(module)。
模块与脚本的核心区别在于:模块存储的是可导入(Importable)的代码,而脚本存储的是可执行(executable)的代码。
可导入代码通常指定义了某些内容(如函数或类)但不立即执行特定操作的代码。
可执行代码则指实际执行特定操作的代码,例如调用函数、执行循环或条件判断等。
通过命令行运行脚本
在Python编程中,我们可以使用纯文本文件编写程序。需要注意的是,包含Python代码的文件通常以 .py 作为后缀名。
首先,我们创建一个名为 hello.py 的Python脚本。
# hello.py
print("Hello, World!")
- 使用
python命令来执行脚本。
以Windows系统为例,我们需要打开Windows终端(通过 win + R 然后输入 cmd 打开),然后输入相应的执行命令。
# 相对路径 >>> python .\hello.py Hello, World! >>> py .\hello.py Hello, World! # 绝对路径 >>> python D:\python\hello.py Hello, World! >>> py D:\python\hello.py Hello, World!
在Windows中,还可以使用 py 命令,该命令会触发控制台应用程序的 py.exe 启动器来执行脚本。
在某些Linux发行版中,可能需要使用
python3命令,而不是简单的python命令。
在终端或Shell中运行Python脚本还有一个实用功能:利用重定向将执行结果输出到文件中,便于保存结果并进行后续分析。
>>> python D:\python\hello.py > D:\python\output.txt
在上述命令中,> 符号表示将输出(即Python脚本的执行结果 hello world!)重定向到 output.txt 文件中,而不是直接显示在标准输出屏幕上。
如果指定的 output.txt 文件不存在,系统会自动创建它;如果文件已存在:
- 使用
>符号会覆盖原文件内容。 - 使用
>>符号会将新内容追加到文件末尾。
- 直接使用脚本文件名执行
以Windows系统为例,我们可以直接通过脚本的文件名来执行脚本。
# 绝对路径 >>> D:\python\hello.py # 相对路径 >>> .\hello.py
在Linux系统中,执行前需先赋予脚本可执行权限,否则可能会遇到“没有权限”的错误提示。
chmod +x hello.py
赋权之后,hello.py 脚本即可被调用执行,但这并不保证一定能正常运行。

出现报错的原因通常是操作系统无法识别应使用哪个程序来执行该脚本,从而尝试使用Shell直接运行它。
为了解决这个问题,我们需要在脚本的第一行添加一个shebang行。
[root@localhost ~]# vim /hello.py
#!/usr/bin/env python3
print("Hello, World!")
添加shebang行之后,再次运行脚本即可正常执行。

- **使用
-m选项运行Python模块**
# 语法 python -m <module-name>
-m 参数会在Python的模块搜索路径,即 sys.path 列表中搜索模块名称并运行对应内容。
# Linux 为例 # 执行命令的时候最好跟 hello.py 在同一层级目录中 [root@localhost ~]# python -m hello

在上面的例子中,我们将 hello.py 文件作为模块来运行。需要注意的是,<module-name> 是模块的名称,而不是文件名(即不包含 .py 后缀)。
通过交互式解释器运行
前文提到,Python是一门解释型语言,在执行Python脚本时,解释器会按顺序将代码解释为机器语言。
因此,我们可以通过解释器以交互方式运行代码。
严谨地说,Python这个名字指的是一种解释器软件。
- Python解释器
解释器是介于你的程序和计算机硬件之间的一层软件,负责使你的代码得以运行。
根据你使用的Python实现,解释器可能是由以下语言编写的程序:
- C语言:如CPython,这是最常用的实现方式。
- Python本身:如PyPy,它是一个带有即时(JIT)编译器的快速实现。
- Java:如Jython,可以利用Java生态系统。
无论使用哪种解释器,我们编写的代码都将在其上运行,因此运行脚本和代码的首要条件是正确安装解释器。
Python解释器可以在两种不同的模式下运行代码:
- 脚本或程序模式。
- 交互式模式或REPL(Read-Eval-Print Loop,读取-执行-打印循环)。
在脚本模式下,我们可以使用解释器将源文件(.py)作为可执行程序运行;而在交互模式下,你启动解释器并将其作为一个平台来直接输入并运行代码。
- Python的REPL运行机制
REPL(Read Eval Print Loop)表示一个循环过程,不断执行以下步骤:
- Read(读取):读取用户输入。
- Eval(执行):执行输入的代码内容。
- Print(打印):打印输出结果。
- Loop(循环):不断重复以上步骤。
Read -> Eval -> Print -> Read -> Eval -> Print -> Read -> Eval -> Print -> ...
交互式会话是运行Python代码的广泛使用的工具。若要启动Python交互式会话(REPL),请打开命令行窗口,键入 python 命令。
交互模式的标准主提示符由三个右尖括号 >>> 组成,以Windows系统为例。

在Linux系统中,提示符显示方式类似。

标准REPL还具有由三个句点 ... 组成的辅助提示符。在编写复合语句(如条件判断、函数和类定义以及循环)并添加缩进时,会出现此提示符。
>>> for i in range(0,10): ... print(i)
一旦启动了REPL会话,就可以按照自己的意愿编写和运行Python代码。唯一的缺点是:当关闭会话时,之前输入的代码将消失。
这是脚本模式和交互模式之间的一个主要区别——脚本文件是持久的,而交互会话中的代码是非持久的。
在交互式模式下执行Python代码时,Python会立即计算并执行每个表达式和语句。

从其他Python代码中运行脚本
- 使用
import语句
当我们从另一个模块、脚本或交互式会话导入模块时,Python会加载其中的内容供后续访问和使用。
如果被导入模块仅包含类、函数、变量或常量的定义,我们往往不会意识到代码其实已经运行了;但如果模块中包含生成可见结果的函数、方法或其他语句的调用,我们就能在导入时看到执行结果。
>>> import hello Hello, World!
多次执行 语句可以发现:每个会话中模块中的代码只会运行一次。

首次导入模块后,即使后续修改了模块内容,连续导入也不会再次执行任何操作。这是因为 操作成本较高,Python会采取额外措施来优化整体性能。
对于上述例子,Python知道 hello 模块已经导入。因此,Python会跳过后续的重复导入语句。
importlib
importlib 是Python标准库中的一个模块,我们可以通过 importlib 以编程的方式导入模块。
使用 import_module() 函数,可以模拟 import 操作,从而动态执行任何模块或脚本。
>>> import importlib
>>> importlib.import_module("hello")
Hello, World!
<module 'hello' from '/root/hello.py'>
import_module() 函数导入一个模块,将模块名字放入当前的命名空间中。它还会运行目标模块包含的任何可执行代码。这就是为什么你会在屏幕上看到 Hello, World! 输出的原因。
前文提到,导入时Python只执行一次模块中的代码,后续导入不会再次执行。
如果你想重新加载模块并再次运行其中的代码,可以使用 reload() 函数,它会强制解释器重新导入模块。
>>> import hello Hello World! >>> import importlib >>> importlib.reload(hello) Hello World! <module 'hello' from '/root/hello.py'>
- 使用
exec()函数
除此之外,我们还可以使用内置的 exec() 函数来执行代码。
>>> with open("hello.py") as hello:
... exec(hello.read())
...
Hello, World!
我们首先打开 hello.py 文件,读取文件内容,然后将内容传递给 exec() 函数执行。
通过IDE或代码编辑器运行
为了开发大型和复杂的应用程序,建议使用集成开发环境(IDE)或高级文本编辑器。
这些程序通常提供在环境内部直接运行程序的选项,它们通常包含“Run”或“Build”操作,这些功能通常可以从工具栏或主菜单中获取。

以上就是Python脚本/代码的几种常见运行方式的详细内容,更多关于Python脚本/代码运行方式的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









