1. 命令行和环境

CPython 解释器会在命令行和环境中扫描各种设置。

CPython 实现细节: 其他实现的命令行方案可能有所不同。有关更多资源,请参见Alternate Implementations

1.1. 命令行

调用 Python 时,您可以指定以下任何选项:

python [-bBdEiOQsRStuUvVWxX3?] [-c command | -m module-name | script | - ] [args]

当然,最常见的用例是对脚本的简单调用:

python myscript.py

1.1.1. 界面选项

解释器接口类似于 UNIX shell 的接口,但是提供了一些其他的调用方法:

在非交互模式下,将在执行整个 Importing 之前对其进行解析。

接口选项终止解释器使用的选项列表,所有连续参数都以sys.argv结尾–请注意,第一个元素下标零(sys.argv[0])是反映程序源的字符串。

如果指定了此选项,则sys.argv的第一个元素将是"-c",并且当前目录将被添加到sys.path的开头(允许将该目录中的模块作为顶级模块导入)。

由于参数是* module *名称,因此您不能给文件 extensions(.py)。 module-name应该是有效的 Python 模块名称,但是实现可能并不总是强制执行此操作(例如,它可能允许您使用包含连字符的名称)。

包名称也是允许的。当提供软件包名称而不是常规模块时,解释器将执行<pkg>.__main__作为主模块。这种行为故意类似于处理作为脚本参数传递给解释器的目录和 zipfile。

Note

该选项不能与用 C 编写的内置模块和扩展模块一起使用,因为它们没有 Python 模块文件。但是,即使原始源文件不可用,它仍然可以用于预编译的模块。

如果指定了此选项,则sys.argv的第一个元素将是模块文件的完整路径。与-c选项一样,当前目录将添加到sys.path的开头。

许多标准库模块包含在执行时作为脚本调用的代码。 timeit模块是一个示例:

python -mtimeit -s 'setup here' 'benchmarked code here'
python -mtimeit -h # for details

See also

PEP 338 –将模块作为脚本执行

2.4 版的新Function。

在版本 2.5 中进行了更改:命名模块现在可以位于包中。

在 2.7 版中进行了更改:提供程序包名称以运行__main__子模块。现在在搜索模块时将 sys.argv [0]设置为"-m"(以前错误地将其设置为"-c")

如果指定了此选项,则sys.argv的第一个元素将是"-",并且当前目录将被添加到sys.path的开头。

See also

如果指定了此选项,则sys.argv的第一个元素将是在命令行中指定的脚本名称。

如果脚本名称直接指向 Python 文件,则包含该文件的目录将添加到sys.path的开头,并且该文件将作为main模块执行。

如果脚本名称引用目录或 zipfile,则将脚本名称添加到sys.path的开头,并将该位置的__main__.py文件作为main模块执行。

在版本 2.5 中进行了更改:在顶层包含__main__.py文件的目录和 zipfile 现在被视为有效的 Python 脚本。

如果未提供任何接口选项,则表示-isys.argv[0]是空字符串(""),并且当前目录将添加到sys.path的开头。

1.1.2. 通用选项

在版本 2.5 中进行了更改:--help变体。

Python 2.5.1

在版本 2.5 中进行了更改:--version变体。

1.1.3. 杂项选项

请注意,与相应的 Python 3.x 标志不同,此标志将“不”发出strunicode之间进行比较的警告。而是将str实例隐式解码为unicode并使用 Unicode 比较。

2.6 版的新Function。

2.6 版的新Function。

2.2 版中的新Function。

当脚本引发异常时,这对于检查全局变量或堆栈跟踪很有用。另请参见 PYTHONINSPECT

See also

  • Tools/scripts/fixdiv.py

  • 用于warnall

PEP 238 –更改除法运算符

这旨在提供保护,防止由于精心选择的 Importing 而导致的拒绝服务,这些 Importing 利用了 dict 结构的最坏情况的性能,即 O(n ^ 2)复杂度。有关详情,请参见http://www.ocert.org/advisories/ocert-2011-003.html

更改哈希值会影响从字典中检索键的 Sequences。尽管 Python 从未对此 Sequences 提供保证(并且通常在 32 位和 64 位版本之间有所不同),但足够多的实际代码隐式依赖于这种非保证行为,即默认情况下禁用了随机化。

另请参见 PYTHONHASHSEED

2.6.8 版中的新Function。

2.6 版的新Function。

See also

PEP 370 –每个用户的站点软件包目录

请注意,file.readlines()File Objects(for line in sys.stdin)中有内部缓冲,不受该选项的影响。若要解决此问题,您将需要在while 1:循环内使用file.readline()

另请参见 PYTHONUNBUFFERED

file:line: category: message

默认情况下,每个警告在发生该警告的每个源行中都打印一次。此选项控制打印警告的频率。

可以提供多个-W选项;当警告匹配多个选项时,将执行最后一个匹配选项的操作。无效的-W选项将被忽略(尽管在发出第一个警告时会显示有关无效选项的警告消息)。

从 Python 2.7 开始,默认情况下会忽略DeprecationWarning及其后代。 -Wd选项可用于重新启用它们。

也可以使用warnings模块在 Python 程序中控制警告。

参数的最简单形式是下列操作字符串之一(或唯一的缩写):

完整的参数形式为:

action:message:category:module:line

这里,* action *如上所述,但仅适用于与其余字段匹配的消息。空字段匹配所有值;尾随的空白字段可以Ellipsis。 * message *字段与打印的警告消息的开头匹配;此匹配不区分大小写。 * category *字段与警告类别匹配。这必须是一个类名;匹配项测试消息的实际警告类别是否为指定警告类别的子类。必须提供完整的类名。 * module *字段与(完全限定的)模块名称匹配;此匹配区分大小写。 * line *字段与行号匹配,其中零与所有行号匹配,因此等效于Ellipsis的行号。

See also

warnings –警告模块

PEP 230 –警告框架

PYTHONWARNINGS

2.6 版的新Function。

有关更多详细信息,请参见将 Python 2 代码移植到 Python 3

1.1.4. 您不应该使用的选项

from __future__ import unicode_literals

在文件的顶部。有关详情,请参见future

1.2. 环境变量

这些环境变量会影响 Python 的行为,它们会在-E 以外的命令行开关之前进行处理。通常,命令行开关会在存在冲突的情况下覆盖环境变量。

PYTHONHOME设置为单个目录时,其值将替换prefixexec_prefix。要为此指定不同的值,请将 PYTHONHOME设置为prefix:exec_prefix

除普通目录外,单独的 PYTHONPATH条目可能引用包含纯 Python 模块(源或编译形式)的 zipfile。无法从 zip 文件导入扩展模块。

默认搜索路径取决于安装,但通常以prefix/lib/pythonversion开头(请参见上面的 PYTHONHOME)。总是将它附加到 PYTHONPATH

如上面Interface options所述,将在 PYTHONPATH前面的搜索路径中插入一个附加目录。搜索路径可以在 Python 程序中作为变量sys.path进行操作。

也可以使用os.environpass Python 代码修改此变量,以在程序终止时强制检查模式。

2.6 版的新Function。

如果 PYTHONHASHSEED设置为整数值,则将其用作固定种子来生成哈希随机化所覆盖类型的 hash()。

其目的是允许可重复的哈希,例如用于解释程序本身的自测,或允许一组 python 进程共享哈希值。

整数必须是[0,4294967295]范围内的十进制数。指定值 0 将产生与禁用散列随机化时相同的散列值。

2.6.8 版中的新Function。

2.6 版的新Function。

2.6 版的新Function。

See also

PEP 370 –每个用户的站点软件包目录

2.6 版的新Function。

See also

PEP 370 –每个用户的站点软件包目录

有关详细信息,请参见ssl._https_verify_certificates()的文档。

2.7.12 版中的新Function。

1.2.1. 调试模式变量

设置这些变量仅在 Python 的调试版本中有效,也就是说,如果 Python 是使用--with-pydebug build 选项配置的。

在 2.6 版中更改:以前,此变量称为THREADDEBUG

2.7.15 版中的新Function。

2.7.15 版中的新Function。

首页