原文标题: How to Run Your Python Scripts and Code
作者: Leodanis Pozo Ramos
Python 脚本或程序是包含可执行 Python 代码的文件。能够运行 Python 脚本和代码可能是您作为 Python 开发人员所需的最重要的技能。通过运行代码,您将知道它是否按计划工作。您还可以测试和调试代码以修复错误和问题。最终,您编写代码是为了运行它并完成任务。
在本教程中,您将学习一些运行 Python 脚本和代码的技术。在每种情况下使用的技术将取决于您的环境、平台、需求和技能。
在本教程中,您将学习如何:
- 从操作系统的命令行或终端运行 Python 脚本
- 使用标准 REPL 以交互模式执行 Python 代码和脚本
- 使用您喜爱的 IDE 或代码编辑器运行 Python 脚本
- 从操作系统的文件管理器中启动脚本和程序
为了充分利用本教程,您应该了解使用操作系统终端和文件管理器的基础知识。熟悉 Python 友好的 IDE 或代码编辑器以及标准的 Python REPL(Read-Eval-Print Loop)也是有益的。
什么是脚本和模块
在计算机中,脚本这个术语指的是一个文本文件,它包含了一个逻辑顺序,你可以运行它来完成一个特定的任务。这些命令通常用脚本语言表示,脚本语言是一种允许您操作、自定义和自动化任务的编程语言。
脚本语言通常在运行时解释而不是编译。因此,脚本通常由某种解释器运行,该解释器负责执行序列中的每个命令。
Python 是一种解释性语言。因此,Python 程序通常被称为脚本。然而,这个术语并不完全准确,因为 Python 程序可能比简单的顺序脚本复杂得多。
通常,包含可执行 Python 代码的文件称为脚本(在更复杂的应用程序中称为入口点脚本),这是顶级程序的常用术语。另一方面,包含 Python 代码的文件被设计为从另一个 Python 文件导入和使用,称为模块。
因此,模块和脚本之间的主要区别在于模块存储可导入 的代码,而脚本存储可执行的代码。
注:可导入代码是定义了某些内容但不执行特定操作的代码。一些例子包括函数和类定义。相反,可执行代码是执行特定操作的代码。一些例子包括函数调用、循环和条件。
在下面的部分中,您将学习如何运行 Python 脚本、程序和代码。为了开始,您将从学习如何从操作系统的命令行或终端运行它们开始。
如何在命令行中运行 Python 脚本
在 Python 编程中,您可以以纯文本文件编写程序。按照惯例,包含 Python 代码的文件使用 .py
扩展名,脚本或可执行程序和模块之间的文件格式都没有区别。所有这些都将使用相同的扩展名。
注意:在 Windows 系统上,对于那些应该使用
pythonw.exe
启动器的应用程序,扩展名也可以是.pyw
。
要创建 Python 脚本,您可以使用任何 Python 友好的代码编辑器或 IDE (集成开发环境)。要继续学习本教程,您需要创建一个基本脚本,因此启动您最喜欢的文本编辑器并创建一个包含以下代码的新 hello.py
文件:
python
# hello.py
print("Hello, World!")
这是 Python 中的经典 "Hello, World!"
程序。可执行代码包括对内置的 print()
函数的调用,该函数在屏幕上显示 "Hello, World!"
消息。
有了这个小程序,您就可以学习不同的运行方法了。您将从命令行运行程序开始,这可以说是运行脚本最常用的方法。
使用 python
命令
要使用 python
命令运行 Python 脚本,您需要打开一个命令行窗口,并键入单词 python
,然后键入目标脚本的路径:
Windows:
powershell
PS> python .\hello.py
Hello, World!
PS> py .\hello.py
Hello, World!
Linux+macOS:
shell
$ python ./hello.py
Hello, World!
按下 Enter
后,您将在屏幕上看到短语 Hello, World!
。如果前面的命令不能正常工作,那么你可能需要检查 Python 是否在你的系统的 PATH
中。您也可以查看您保存的位置 hello.py
。
注意:在某些Linux发行版中,可能在某些macOS版本中,您可能需要使用
python3
命令,而不是简单的python
。
就这样!你已经运行了你的第一个脚本!请注意,在 Windows 上,您还可以选择使用 py
命令,该命令触发控制台应用程序的 py.exe
启动器。这是运行 Python 脚本的最基本和最实用的方法。
注意:如果您从未使用过命令行或终端,那么您可以尝试以下操作,具体取决于您的操作系统:
- 在 Windows 上,最新版本的操作系统附带了一个名为 PowerShell 的应用程序,您可以从搜索栏快速运行。一旦你启动了这个程序,你就可以开始在里面运行命令了。
- 在 Linux 上,有几个应用程序可以给予访问系统命令行的权限。在许多桌面环境中,您可以通过按
Ctrl
+Alt
+T
快速访问默认终端。- 在 macOS 上,您可以从访达 中访问系统终端,方法是键入终端并在应用出现时按
Enter
。要了解有关使用命令行或终端的更多信息,请查看终端:第一步和有用的命令。
终端或 shell 应用程序的一个很酷的特性是,您可以使用简单的语法重定向命令的输出。如果你需要生成长文本输出的 Python 程序,并且您希望将其保存到一个文件中以供以后分析,则此功能可能非常有用。
在这些情况下,您可以执行以下操作:
shell
$ python hello.py > output.txt
在这个命令中, 重定向符 >
符号告诉shell将命令的输出重定向到 output.txt
文件,而不是标准的系统输出,即屏幕。此过程通常称为重定向,它适用于 Windows 和类 Unix 系统,如 Linux 和 macOS 。
如果输出文件不存在,那么 shell 会自动创建它。另一方面,如果文件已经存在,那么 shell 会用新的输出覆盖它的旧内容。
最后,如果你想把连续执行的输出添加到 output.txt
的末尾,那么你可以使用两个尖括号( >>
)而不是一个:
shell
$ python hello.py >> output.txt
现在,shell 应用程序将把当前输出附加到 output.txt
的末尾。您将得到一个包含短语 "Hello, World!"
两次的文件。
直接使用脚本名称
在 Windows 上,您还可以通过在命令行中输入包含可执行代码的文件的名称来运行 Python 脚本:
powershell
PS> .\hello.py
一旦你写了脚本的路径并按下 Enter
,你会注意到一个新的终端窗口出现在你的屏幕上几秒钟,显示脚本输出。这是可能的,因为 Windows 将 .py
和 .pyw
文件分别关联到 python.exe
和 pythonw.exe
。
这种在 Windows 上运行 Python 脚本的方式可能很烦人,因为代码在一个新的终端窗口中运行,该窗口在执行结束后自动关闭。在大多数情况下,您将无法检查程序的输出。
在 Linux 和 macOS 上,您还可以直接运行脚本。但是,这里的情况有点不同,您需要一些设置步骤。继续并运行以下命令:
shell
$ ./hello.py
bash: ./hello.py: Permission denied
Unix 系统优先考虑安全性,这意味着您不能将任何文件作为程序执行。所以,当你尝试直接运行 hello.py
时,你会得到一个权限被拒绝的错误。要解决此问题,您需要显式地告诉系统该文件是可执行的。为此,您可以使用 chmod
命令:
shell
$ chmod +x hello.py
运行此命令后,您的 hello.py
文件将是可执行的。然而,这还不足以让脚本正常运行:
shell
$ ./hello.py
./hello.py: line 1: syntax error near unexpected token `"Hello, World!"'
./hello.py: line 1: `print("Hello, World!")'
为什么现在又出现错误?问题是您的操作系统(OS)不知道使用哪个程序来运行脚本,而是试图使用 shell 本身来运行脚本。您可以通过在 hello.py
文件中添加一个小内容来解决这个问题:
python
#!/usr/bin/env python3
print("Hello, World!")
您已在 hello.py
的开头添加了新行。它现在以 Unix 风格的 shebang 开始,这是一种特殊的注释,您可以将其包含在脚本中,以告诉操作系统使用哪个程序来运行此文件的内容。在这种情况下,你告诉操作系统使用 Python。
注意:在 shebang 注释中,你至少有两种不同的方式来指定解释器的路径:
- 提供解释器的绝对路径,如
#!/usr/bin/python3
中所示- 使用操作系统的
env
命令,如#!/usr/bin/env python3
中所示第一种方法的可移植性较差,因为并非所有 Unix 系统都将 Python 解释器放在同一个目录中。相比之下,第二种方法更安全,更便携。它调用
env
命令来找出解释器所在的位置。
现在,您可以直接从命令行运行脚本:
shell
$ ./hello.py
Hello, World!
哇!这是一条漫长的道路!然而,这些努力是值得的,现在当你在 Unix 操作系统中创建一个 Python 脚本来自动化任务时,你知道如何使它可执行并从命令行运行它。
使用 -m
选项运行模块
python
命令有一系列命令行选项,在特定情况下很有用。例如,如果你想运行一个 Python 模块,那么你可以使用命令 python -m <module-name>
。 -m
选项在Python的模块搜索路径 sys.path
中搜索模块名称并运行其内容:
shell
$ python -m hello
Hello, World!
在本例中,您将 hello.py
文件作为模块运行。这是可能的,因为 Python 会自动将当前目录添加到其 sys.path
列表中。请注意, module-name
参数必须是模块对象的名称,而不是文件名。换句话说,你不包括 .py
后缀。
注意:当您需要使用标准库模块的命令行界面(CLI)时,通常使用
-m
选项,例如pip
、venv
、http.server
和zipfile
。
如果目标模块不在 sys.path
中,那么你会得到一个错误:
shell
$ python -m missing
.../python: No module named missing
在这个例子中, missing
名称不在 sys.path
列表中,所以 Python 无法执行它,因此它返回一个错误。
如何以交互方式运行 Python 代码
运行脚本并不是运行 Python 代码的唯一方法。因为 Python 是一种解释型语言,所以你可以使用解释器来交互式地运行代码。当您运行不带参数的 python
命令时,您将启动一个新的交互式会话或 REPL(读取-评估-打印循环)。在那里,你可以运行任何 Python 代码,并立即获得有关代码工作方式的反馈。
在接下来的部分中,你将学习 Python 解释器的基础知识以及如何在其中运行代码。这些知识对你来说非常有价值,特别是在那些需要快速测试一小段 Python 代码的情况下。
了解Python解释器
Python 是一种高级编程语言,具有清晰可读的语法。Python 及其广泛的包和库生态系统可以提高您在各个领域的生产力。Python 这个名字也指的是一个叫做解释器的软件,它是允许你运行 Python 代码的程序。
解释器是一层软件,它在程序和计算机硬件之间工作,使代码运行。根据您使用的 Python 实现,解释器可以是用以下语言编写的程序:
- C,比如 CPython,这是该语言的核心实现
- Python 本身,比如 PyPy,它是一个带有即时(just-in time, JIT)编译器的快速实现
- Java,比如 Jython,它可以利用 Java 生态系统
- .Net,比如 IronPython,它使用 .NET 生态系统
无论你使用什么解释器,你写的代码都会在这个程序中运行。因此,能够运行脚本和代码的第一个条件是在操作系统上正确安装解释器。
Python解释器可以以两种不同的模式运行代码:
在脚本模式下,您使用解释器将源文件作为可执行程序运行,就像您在上一节中学习的那样。在这种情况下, Python 加载文件内容,并按照程序的执行流程逐行运行代码。
或者,交互模式是当您启动解释器并将其用作运行直接键入的代码的平台时。这种模式对于学习 Python 以及开发、测试和调试应用程序非常有用。
交互式运行 Python 代码
交互式会话是运行 Python 代码的广泛使用的工具。要启动 Python 交互式会话或 REPL ,请打开命令行窗口,键入 python
命令,然后按 Enter
。
这些步骤将带你进入 Python 解释器,它看起来像下面这样:
macOS:
shell
$ python
Python 3.11.5 (main, Aug 31 2023, 19:03:43) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Linux:
shell
$ python
Python 3.11.5 (main, Sep 13 2023, 18:12:18) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Windows:
dart
PS> python
Python 3.11.5 (tags/v3.11.5:cce6ba9, Aug 24 2023, 14:38:34) [MSC v.1936 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
交互模式的标准主提示符由三个右尖括号 >>>
组成。所以,只要你看到这些字符,你就知道你进入了交互模式。
注意:标准 REPL 也有一个二级提示符,由三个句点(
...
)组成。在向复合语句(如条件语句、函数和类定义以及循环)中添加缩进行时,将出现此提示。
Python 解释器是一种使用语言与计算机进行交互的方式。就像在线聊天一样。它也被称为 REPL,因为它在底层运行四个步骤:
- Reading 读取输入,输入由 Python 代码作为表达式和语句组成
- Evaluating 评估 Python 代码,这会产生结果或导致副作用
- Printing 打印任何输出,以便您可以检查代码的结果并获得即时反馈
- Looping返回到第一步继续交互
Python 的这个特性是一个强大的工具,你将在 Python 编码冒险中需要它,特别是当你正在学习这门语言或处于开发过程的早期阶段时。
一旦启动了 REPL 会话,就可以随心所欲地编写和运行 Python 代码。唯一的缺点是,当你关闭会话时,你的代码将消失。这是脚本模式和交互模式之间的另一个区别。他们坚持不懈。
当你以交互方式工作时,Python 会立即计算并执行每个表达式和语句:
python
>>> print("Hello, World!")
Hello, World!
>>> 2 + 5
7
>>> print("Welcome to Real Python!")
Welcome to Real Python!
交互式会话将允许您测试您执行的每一段代码。这就是为什么这个工具是一个很棒的开发助手和一个很好的空间来实验语言和测试想法。
要退出交互模式并跳回到系统外壳,您可以使用以下选项之一:
- 执行内置的
quit()
或exit()
函数 - 在 Windows 上按
Ctrl
+Z
和Enter
组合键,或在 Unix 系统(如 Linux 和 macOS )上按Ctrl
+D
组合键
继续并尝试使用 Python REPL 。您将看到它是一个非常好的开发工具,您必须将它保存在您的工具箱中。
如何从 Python 代码中运行 Python
您还可以从交互式会话或 .py
文件运行Python脚本和模块。这一选项提供了多种可能性。在下面的部分中,您将探索一些工具和技术,这些工具和技术将允许您从 Python 代码运行脚本和代码。
import
语句的优点
当您从另一个模块、脚本或交互式会话导入模块时,实际发生的是 Python 加载其内容以供以后访问和使用。有趣的是, import
语句运行导入模块中的任何可执行代码。
当模块只包含类、函数、变量和常量定义时,您可能不会意识到代码已经运行。但是,当模块包含对函数、方法或其他生成可见结果的语句的调用时,您将看到它的执行。
这为您提供了另一个运行脚本的选项:
python
>>> import hello
Hello, World!
您会注意到 import
在每个会话中只运行一次代码。第一次导入模块后,即使修改了模块的内容,后续的导入也不会执行任何操作。这是因为 import
操作是费时的,Python 需要一些额外的步骤来优化整体性能:
python
>>> import hello # Do nothing
>>> import hello # Do nothing again
这两个导入没有任何作用,因为 Python 知道 hello
模块已经被导入了。因此,Python 跳过了 import
。这种行为可能看起来很烦人,尤其是当您正在处理模块并试图在交互式会话中测试更改时。这是一种有意的优化。
使用 importlib
标准库模块
在 Python 标准库中,您可以找到 importlib
模块。这个模块提供了 import_module()
函数,它允许您以编程方式导入模块。
使用 import_module()
,您可以模拟 import
操作,因此可以执行任何模块或脚本。看看这个例子:
python
>>> import importlib
>>> importlib.import_module("hello")
Hello, World!
<module 'hello' from '/home/username/hello.py'>
import_module()
函数的作用是:导入一个模块,并将其名称添加到当前的命名空间。它还运行目标模块包含的任何可执行代码。这就是为什么你在屏幕上显示 Hello, World!
。
你已经知道,一旦你第一次导入了一个模块,你就不能再用另一个 import
语句导入它了。如果你想重新加载模块并再次运行它,那么你可以使用 reload()
函数,它强制解释器再次导入模块:
python
>>> import hello
Hello World!
>>> import importlib
>>> importlib.reload(hello)
Hello World!
<module 'hello' from '/home/username/hello.py'>
这里需要注意的一点是, reload()
的参数必须是模块对象的名称,而不是字符串。因此,要成功使用 reload()
,您需要提供一个已经导入的模块。
利用内置 exec()
功能的强大功能
到目前为止,您已经了解了一些运行 Python 脚本的方便方法。在本节中,您将学习如何使用内置的 exec()
函数来实现这一点,该函数支持 Python 代码的动态执行。
exec()
函数提供了一种从代码内部运行脚本的替代方法:
python
>>> with open("hello.py") as hello:
... exec(hello.read())
...
Hello, World!
在本例中,使用 with
语句打开 hello.py
文件进行阅读。然后,使用 .read()
方法读取文件的内容。此方法返回一个字符串,您将其传递给 exec()
执行。
在使用 exec()
函数时必须小心,因为它意味着一些重要的安全风险,特别是当您使用它来运行外部代码时。要了解有关此函数的更多信息,请查看 Python 的 exec()
:执行动态生成的代码。
如何在 IDE 和代码编辑器上运行 Python 脚本
要开发大型复杂的应用程序,您应该使用集成开发环境(IDE)或包含程序员友好功能的高级文本编辑器。
这些程序中的大多数都有允许您从环境本身内部运行程序的选项。它们通常包含 Run 或 Build 操作,这些操作通常可以从工具栏或主菜单中获得。
Python 的标准发行版将 IDLE 作为默认 IDE。您可以使用此程序编写、调试、修改和运行模块和脚本。其他 IDE,如PyCharm 和 Thonny,也允许您从环境内部运行脚本。例如,在 PyCharm 中,您可以按键盘上的 Ctrl
+ R
来快速运行应用的入口脚本。
Visual Studio Code 和 Sublime Text 等高级代码编辑器也允许您运行脚本。例如,在 Visual Studio Code 中,您可以按 Ctrl
+ F5
来运行当前活动的文件。
若要了解如何从首选 IDE 或代码编辑器运行 Python 脚本,请查看其特定文档或快速查看程序的 GUI。你很快就会找到答案。
如何在文件管理器中运行 Python 脚本
通过双击文件管理器中的脚本图标来运行脚本是运行 Python 脚本的另一种方法。在开发阶段,您可能不会经常使用此选项,但在将代码发布到生产环境时,您可能会使用它。
为了通过双击运行脚本,您必须满足一些条件,这些条件取决于您的操作系统。
例如,Windows将扩展名 .py
和 .pyw
分别与程序 python.exe
和 pythonw.exe
相关联。这允许您通过双击脚本图标来运行脚本。
在 Unix 系统上,您可能可以通过在文件管理器中双击脚本来运行脚本。要实现这一点,您的脚本必须具有执行权限,并且需要使用您已经学习过的 shebang 技巧。与 Windows 一样,当涉及到命令行界面脚本时,您可能不会在屏幕上看到任何输出。
通过双击执行脚本有几个限制,并取决于许多因素,如操作系统,文件管理器,执行权限和文件关联。不过,对于生产就绪的脚本和程序,您可以将此替代方案视为一个可行的选择。
总结
您已经获得了以多种方式在各种情况和开发环境中运行 Python 脚本和代码所需的知识和技能。当您需要运行生产就绪脚本时,命令行将是您最好的朋友。在开发过程中,IDE 或代码编辑器将提供正确的选项来运行代码。
在本教程中,您已经学习了如何:
- 在当前操作系统中从命令行或终端运行 Python 脚本
- 使用 Python 的标准REPL以交互模式执行代码
- 在开发过程中使用您喜爱的 IDE 或代码编辑器运行 Python 脚本
- 从操作系统的文件管理器启动脚本和程序
这些技能对于 Python 开发人员来说是必不可少的。它们将使您的开发过程更快,更高效,更灵活。