1. 命令行和环境 — Python 文档
1. 命令行和环境
CPython 解释器会扫描命令行和环境以进行各种设置。
1.1. 命令行
调用 Python 时,您可以指定以下任何选项:
python [-bBdEiOQsRStuUvVWxX3?] [-c command | -m module-name | script | - ] [args]
当然,最常见的用例是对脚本的简单调用:
python myscript.py
1.1.1. 接口选项
解释器接口类似于 UNIX shell 的接口,但提供了一些额外的调用方法:
- 当使用连接到 tty 设备的标准输入调用时,它会提示输入命令并执行它们直到 EOF(文件结束字符,您可以在 UNIX 或 上使用 Ctrl-D 生成该字符) Ctrl-Z,在 Windows 上 Enter)被读取。
- 当使用文件名参数或文件作为标准输入调用时,它从该文件读取并执行脚本。
- 当使用目录名称参数调用时,它会从该目录读取并执行适当命名的脚本。
- 当用
-c command
调用时,它执行作为 command 给出的 Python 语句。 这里 command 可能包含多个由换行符分隔的语句。 前导空格在 Python 语句中很重要! - 当使用
-m module-name
调用时,给定的模块位于 Python 模块路径上并作为脚本执行。
在非交互模式下,整个输入在执行之前被解析。
接口选项终止解释器使用的选项列表,所有连续的参数都将在 sys.argv 中结束——注意第一个元素,下标零 (sys.argv[0]
),是一个字符串反映程序的来源。
- -c <command>
执行command中的Python代码。 command 可以是一个或多个由换行符分隔的语句,与正常模块代码中的前导空格相同。
如果给出这个选项,sys.argv 的第一个元素将是
"-c"
并且当前目录将被添加到 sys.path 的开头(允许模块在该目录中作为顶级模块导入)。
- -m <module-name>
在 sys.path 中搜索命名模块并将其内容作为 __main__ 模块执行。
由于参数是 模块 名称,您不能提供文件扩展名 (
.py
)。module-name
应该是一个有效的 Python 模块名称,但实现可能并不总是强制这样做(例如 它可能允许您使用包含连字符的名称)。包名也是允许的。 当提供包名而不是普通模块时,解释器将执行
<pkg>.__main__
作为主模块。 这种行为特意类似于处理作为脚本参数传递给解释器的目录和 zip 文件。笔记
此选项不能与用 C 编写的内置模块和扩展模块一起使用,因为它们没有 Python 模块文件。 但是,它仍然可以用于预编译模块,即使原始源文件不可用。
如果给出此选项,sys.argv 的第一个元素将是模块文件的完整路径。 与 -c 选项一样,当前目录将添加到 sys.path 的开头。
许多标准库模块包含在作为脚本执行时调用的代码。 一个例子是 timeit 模块:
python -mtimeit -s 'setup here' 'benchmarked code here' python -mtimeit -h # for details
2.4 版中的新功能。
2.5 版更改: 命名模块现在可以位于包内。
在 2.7 版更改: 提供包名称以运行
__main__
子模块。 sys.argv[0] 现在在搜索模块时设置为"-m"
(以前错误地设置为"-c"
)
- <script>
执行包含在 script 中的 Python 代码,它必须是一个文件系统路径(绝对或相对),引用 Python 文件、包含
__main__.py
文件的目录或包含 [ X211X] 文件。如果给出此选项,sys.argv 的第一个元素将是命令行中给出的脚本名称。
如果脚本名称直接引用 Python 文件,则将包含该文件的目录添加到 sys.path 的开头,并且该文件作为 __main__ 模块执行。
如果脚本名称引用目录或 zip 文件,则脚本名称将添加到 sys.path 的开头,并且该位置的
__main__.py
文件将作为 __main__[ X183X] 模块。在 2.5 版中更改: 包含顶级
__main__.py
文件的目录和 zipfile 现在被视为有效的 Python 脚本。
如果没有给出接口选项,则隐含 -i,sys.argv[0]
为空字符串(""
),当前目录将添加到 的开头sys.path。
1.1.2. 通用选项
- -?
-h
--help 打印所有命令行选项的简短描述。
2.5 版更改:
--help
变体。
- -V
--version 打印 Python 版本号并退出。 示例输出可能是:
Python 2.5.1
2.5 版更改:
--version
变体。
1.1.3. 其他选项
- -b
比较 unicode 和 bytearray 时发出警告。 两次给出选项时发出错误 (
-bb
)。请注意,与相应的 Python 3.x 标志不同,这将 not 发出警告,以便在 str 和 unicode 之间进行比较。 相反,
str
实例将被隐式解码为unicode
并使用 Unicode 比较。2.6 版中的新功能。
- -B
如果给定,Python 不会尝试在源模块的导入上编写
.pyc
或.pyo
文件。 另见 PYTHONDONTWRITEBYTECODE。2.6 版中的新功能。
- -d
- 打开解析器调试输出(仅适用于向导,取决于编译选项)。 另见 PYTHONDEBUG。
- -E
忽略所有
PYTHON*
环境变量,例如 PYTHONPATH 和 PYTHONHOME,可以设置。2.2 版中的新功能。
- -i
当脚本作为第一个参数传递或使用 -c 选项时,执行脚本或命令后进入交互模式,即使 sys.stdin 看起来不是一个终端。 未读取 PYTHONSTARTUP 文件。
当脚本引发异常时,这对于检查全局变量或堆栈跟踪非常有用。 另见 PYTHONINSPECT。
- -O
- 打开基本优化。 这会将已编译 ( 字节码 ) 文件的文件扩展名从
.pyc
更改为.pyo
。 另见 PYTHONOPTIMIZE。
- -OO
- 除了 -O 优化之外,还丢弃文档字符串。
- -Q <arg>
分区控制。 参数必须是以下之一:
old
int/int 和 long/long 的除法返回一个 int 或 long (default)
new
新的除法语义,即 int/int 和 long/long 的除法返回一个浮点数
warn
带有 int/int 和 long/long 警告的旧除法语义
warnall
旧的除法语义,对除法运算符的所有使用发出警告
- -R
打开散列随机化,这样 str、bytes 和 datetime 对象的
__hash__()
值被“加盐”了一个不可预测的随机值。 尽管它们在单个 Python 进程中保持不变,但它们在 Python 的重复调用之间是不可预测的。这旨在提供保护,防止由精心选择的输入引起的拒绝服务,这些输入利用 dict 构造的最坏情况性能,O(n^2) 复杂度。 有关详细信息,请参阅 http://www.ocert.org/advisories/ocert-2011-003.html。
更改哈希值会影响从字典中检索键的顺序。 尽管 Python 从未对这种排序做出保证(并且它通常在 32 位和 64 位构建之间变化),但足够的现实世界代码隐式依赖于这种无保证的行为,即默认情况下禁用随机化。
另见 PYTHONHASHSEED。
2.6.8 版中的新功能。
- -t
- 当源文件混合使用制表符和空格进行缩进时发出警告,这种方式使其依赖于以空格表示的制表符的价值。 两次给出选项时发出错误 (
-tt
)。
- -u
强制标准输入、标准输出和标准错误完全无缓冲。 在重要的系统上,还将 stdin、stdout 和 stderr 置于二进制模式。
请注意,在 file.readlines() 和 File Objects (
for line in sys.stdin
) 中有内部缓冲,不受此选项的影响。 要解决此问题,您需要在while 1:
循环中使用 file.readline()。另见 PYTHONUNBUFFERED。
- -v
- 每次初始化模块时打印一条消息,显示加载它的位置(文件名或内置模块)。 当给定两次 (
-vv
) 时,为搜索模块时检查的每个文件打印一条消息。 还提供有关退出时模块清理的信息。 另见 PYTHONVERBOSE。
- -W arg
警告控制。 默认情况下,Python 的警告机制将警告消息打印到 sys.stderr。 典型的警告消息具有以下形式:
file:line: category: message
默认情况下,每个警告都会为出现它的每个源代码行打印一次。 此选项控制打印警告的频率。
可以给出多个 -W 选项; 当警告匹配多个选项时,将执行最后一个匹配选项的操作。 无效的 -W 选项将被忽略(不过,在发出第一个警告时会打印一条关于无效选项的警告消息)。
从 Python 2.7 开始,默认情况下会忽略
DeprecationWarning
及其后代。-Wd
选项可用于重新启用它们。也可以使用 warnings 模块从 Python 程序中控制警告。
最简单的参数形式是以下操作字符串之一(或唯一的缩写):
ignore
忽略所有警告。
default
显式请求默认行为(每个源行打印每个警告一次)。
all
每次发生时打印警告(如果同一源代码行重复触发警告,例如在循环内,这可能会生成许多消息)。
module
仅在每个模块中第一次出现警告时打印每个警告。
once
仅在程序中第一次出现警告时打印每个警告。
error
引发异常而不是打印警告消息。
完整的论证形式是:
action:message:category:module:line
这里, action 如上所述,但仅适用于匹配其余字段的消息。 空字段匹配所有值; 尾随空字段可以省略。 message 字段与打印的警告消息的开头匹配; 此匹配不区分大小写。 category 字段与警告类别匹配。 这必须是一个类名; 匹配测试消息的实际警告类别是否是指定警告类别的子类。 必须给出完整的类名。 module 字段匹配(完全限定的)模块名称; 此匹配区分大小写。 line 字段匹配行号,其中零匹配所有行号,因此等效于省略的行号。
- -x
- 跳过源代码的第一行,允许使用非 Unix 形式的
#!cmd
。 这仅适用于特定于 DOS 的 hack。
- -3
对于 Python 3 中已删除或显着更改且无法使用静态代码分析检测到的功能,通过发出
DeprecationWarning
来警告 Python 3.x 可能的不兼容性。2.6 版中的新功能。
有关更多详细信息,请参阅 将 Python 2 代码移植到 Python 3。
1.1.4. 你不应该使用的选项
- -J
- 保留供 Jython 使用。
- -U
将所有字符串文字全局转换为 unicodes。 不要试图使用此选项,因为它可能会破坏您的世界。 它还生成具有与正常情况不同的幻数的
.pyc
文件。 相反,您可以使用以下方法在每个模块的基础上启用 unicode 文字:from __future__ import unicode_literals
在文件的顶部。 有关详细信息,请参阅 __future__。
- -X
- 保留用于 Python 的替代实现以用于自己的目的。
1.2. 环境变量
这些环境变量会影响 Python 的行为,它们在 -E 以外的命令行开关之前被处理。 通常,命令行开关会覆盖存在冲突的环境变量。
- PYTHONHOME
更改标准 Python 库的位置。 默认在
prefix/lib/pythonversion
和exec_prefix/lib/pythonversion
中搜索库,其中prefix
和exec_prefix
为安装依赖目录,均默认为/usr/local
]。当 PYTHONHOME 设置为单个目录时,其值将同时替换
prefix
和exec_prefix
。 要为这些指定不同的值,请将 PYTHONHOME 设置为prefix:exec_prefix
。
- PYTHONPATH
增加模块文件的默认搜索路径。 格式与shell的
PATH
相同:一个或多个目录路径名用os.pathsep分隔(例如 Unix 上的冒号或 Windows 上的分号)。 不存在的目录将被静默忽略。除了普通目录之外,单独的 PYTHONPATH 条目可能是指包含纯 Python 模块(源代码或编译形式)的 zipfiles。 不能从 zipfiles 导入扩展模块。
默认搜索路径取决于安装,但通常以
prefix/lib/pythonversion
开头(请参阅上面的 PYTHONHOME)。 它是 总是 附加到 PYTHONPATH。将在 PYTHONPATH 前面的搜索路径中插入一个附加目录,如上文 接口选项 下所述。 搜索路径可以在 Python 程序中作为变量 sys.path 进行操作。
- PYTHONSTARTUP
- 如果这是一个可读文件的名称,则该文件中的 Python 命令在以交互模式显示第一个提示之前执行。 该文件在执行交互式命令的同一命名空间中执行,以便在其中定义或导入的对象可以在交互式会话中不加限定地使用。 您还可以更改此文件中的提示 sys.ps1 和 sys.ps2。
- PYTHONY2K
- 将此设置为非空字符串,使 time 模块要求指定为字符串的日期包含 4 位年份,否则 2 位年份将根据 time[] 中描述的规则进行转换X207X] 模块文档。
- PYTHONINSPECT
如果将其设置为非空字符串,则等效于指定 -i 选项。
这个变量也可以通过 Python 代码修改,使用 os.environ 在程序终止时强制检查模式。
- PYTHONUNBUFFERED
- 如果将其设置为非空字符串,则等效于指定 -u 选项。
- PYTHONCASEOK
- 如果设置,Python 将忽略 import 语句中的大小写。 这仅适用于 Windows、OS X、OS/2 和 RiscOS。
- PYTHONDONTWRITEBYTECODE
如果设置了这个,Python 将不会尝试在导入源模块时写入
.pyc
或.pyo
文件。 这等效于指定 -B 选项。2.6 版中的新功能。
- PYTHONHASHSEED
如果此变量设置为
random
,效果与指定 -R 选项相同:使用随机值作为 str、bytes 和 datetime 对象的散列的种子。如果 PYTHONHASHSEED 被设置为一个整数值,它被用作一个固定种子,用于生成哈希随机化所涵盖的类型的 hash()。
它的目的是允许可重复的散列,例如用于解释器本身的自测,或允许一组 python 进程共享散列值。
整数必须是 [0,4294967295] 范围内的十进制数。 指定值 0 将导致与禁用散列随机化时相同的散列值。
2.6.8 版中的新功能。
- PYTHONIOENCODING
在语法
encodingname:errorhandler
中覆盖用于 stdin/stdout/stderr 的编码。:errorhandler
部分是可选的,与 str.encode() 中的含义相同。2.6 版中的新功能。
- PYTHONUSERBASE
定义用户基目录,用于计算用户站点包目录和Distutils安装路径的路径
python setup.py install --user
。2.6 版中的新功能。
也可以看看
PEP 370 – 每个用户的站点包目录
- PYTHONEXECUTABLE
- 如果设置了这个环境变量,
sys.argv[0]
将被设置为其值而不是通过 C 运行时获得的值。 仅适用于 Mac OS X。
- PYTHONHTTPSVERIFY
如果这个环境变量专门设置为
0
,那么就相当于当ssl为第一个时,用enable=False
隐式调用ssl._https_verify_certificates()进口的。有关详细信息,请参阅 ssl._https_verify_certificates() 的文档。
2.7.12 版中的新功能。
1.2.1. 调试模式变量
设置这些变量仅在 Python 的调试构建中有效,也就是说,如果 Python 配置了 --with-pydebug
构建选项。
- PYTHONTHREADDEBUG
如果设置,Python 将打印线程调试信息。
在 2.6 版更改: 以前,此变量称为
THREADDEBUG
。
- PYTHONDUMPREFS
- 如果设置,Python 将在关闭解释器后转储仍然存在的对象和引用计数。
- PYTHONMALLOCSTATS
- 如果设置,Python 将在每次创建新对象领域和关闭时打印内存分配统计信息。
- PYTHONSHOWALLOCCOUNT
如果 set 并且 Python 是在定义
COUNT_ALLOCS
的情况下编译的,则 Python 将在关闭时将分配计数转储到 stderr 中。2.7.15 版中的新功能。
- PYTHONSHOWREFCOUNT
如果设置,Python 将在程序完成时或在交互式解释器中的每个语句之后打印总引用计数。
2.7.15 版中的新功能。