Contents
Python 即可以通过命令行参数,也可以通过环境变量来进行定制。
- 命令行参数的优先级比较环境变量高。
- 当使用 -E 参数时,所有的环境变量都会忽略掉。
- 如果某个环境变量和命令行参数冲突,以命令行参数为准。
Note
此处只列出了 CPython 实现版本支持的环境变量,其它实现版本请查看其官方文档。
普通环境变量
PYTHONHOME
定制 Python 标准库的路径。
在默认情况下,Python 会查找 prefix/lib/pythonversion 和 exec_prefix/lib/pythonversion 。
prefix 和 exec_prefix 由你的安装环境决定。在 Unix 系统上一般情况下为 /usr/local 。
如果 PYTHONHOME 被设置为单个目录,那么 prefix 和 exec_prefix 都会被设定为该目录。
如果分别设定这两个值,可以使用 prefix:exec_prefix 格式来设定 PYTHONHOME 。
Tip
如果想定制一个受限的 Python 环境,可以将某些标准库文件链接到某个特定目录,然后将该目录作为受限 Python 环境的 PYTHONHOME 。
PYTHONPATH
默认的 Python 模块搜索路径。
它的格式和系统的 PATH 是一样,可以指定多个路径,每个路径可以包含纯 Python 实现的 zip 包,但不支持其它语言实现的 zip 包。
PYTHONHOME 指定的路径总是会自动添加到 PYTHONPATH 中。
PYTHONSTARTUP
如果该值为一个可读的文件,在 Python 命令行模式下,该文件中的 Python 代码会在交互式界面出来之前执行一遍。
Tip
主要可用来对自己的 Python 的交互式环境进行一下定制什么的。
比如设置一下 sys.ps1 和 sys.ps2 来定制自己的命令行提示符。
或者添加如下代码:
1 2 3 4 | import rlcompleter
import readline
readline.parse_and_bind("tab: complete")
|
可以让你的命令行支持 TAB 键功能(PS: 用 IPython 更爽一些 )。
PYTHONY2K
默认情况下 time 模块中如果有函数需要指定年参数时,可以为 4 位,也可以为 2 位。
如果为 2 位,Python 会自动按照一定的规则进行转换。具体可以查看 time 模块官方文档 。
如果该值被设定了, time.accept2dyear 值就会变成 0,默认为 1。
这样会导致 time 模块中如果有函数需要指定年参数时,必须要求为 4 位。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | In [2]: time.mktime((12, 1, 1, 1, 1, 1, 1, 1, 1))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-7e161cf670eb> in <module>()
----> 1 time.mktime((12, 1, 1, 1, 1, 1, 1, 1, 1))
ValueError: year >= 1900 required
In [3]: time.accept2dyear
Out[3]: 0
In [4]: time.accept2dyear = 1
In [5]: time.mktime((12, 1, 1, 1, 1, 1, 1, 1, 1))
Out[5]: 1325350861.0
|
PYTHONOPTIMIZE
用于 Python 性能优化。
如果该环境变量被设定为一个非空字符串,就相当于 -O 命令行参数。
如果该环境变量被设定为一个数字 N,就相当于 -OO (O 的个数为 N)命令行参数。
PYTHONDEBUG
用于 Python 调试。
如果该环境变量被设定为一个非空字符串,就相当于 -d 命令行参数。
如果该环境变量被设定为一个数字 N, 就相当于 -dd (d 的个数为 N) 命令行参数。
PYTHONINSPECT
如果该环境变量被设定为一个非空字符串,就相当于 -i 命令行参数。
PYTHONUNBUFFERED
如果该环境变量被设定为一个非空字符串,就相当于 -u 命令行参数。
PYTHONCASEOK
如果该环境变量被设定了,Python 会在 import 模块时忽略模块名的大小写。
Tip
此值只在 Windows, OS X, OS/2, and RiscOS 上有效。
PYTHONHASHSEED
如果该环境变量被设定为 random ,相当于 -R 命令行参数。
Python 会用一个随机的种子来生成 str/bytes/datetime 对象的 hash 值。
如果该环境变量被设定为一个数字,它就被当作一个固定的种子来生成 str/bytes/datetime 对象的 hash 值。
Note
该环境变量的目的是允许生成重复的 Hash, 这样可以用来进行 Python 解释器的自测, 或者允许 Python 进程的子进程能够分享同样的 hash 值。
Tip
如果为数字,该数字范围为 [0,4294967295]
PYTHONIOENCODING
设定 stdin/stdout/stderr 的默认编码格式。
其格式为:
encodingname:errorhandler
:errorhandler 是可选的,它的意思类似于 str.encode() 中的 errors 参数。
PYTHONNOUSERSITE
如果该环境变量被设定了,Python 不会将用户的 site-packages 添加到 sys.path 中。
PYTHONUSERBASE
用于设定用户主目录,根据用户主目录可推知用户的 site-packages 目录,以及使用 python setup.py install --user 时的安装目录。
调试模式下的环境变量
以下的环境变量只有在 DEBUG 编译版本的 Python 下才可起作用 (Debug 编译版本:在编译 Python 时,使用 --with-pydebug 参数)。
PYTHONTHREADDEBUG
如果该值被设定了,Python 将会打印出线程调试信息。
该值的名称在 Python2.6 之前为 THREADDEBUG 。
1 2 3 4 | >>> a = 1
PyThread_acquire_lock(0x8467e00, 1) called
PyThread_acquire_lock(0x8467e00, 1) -> 1
PyThread_release_lock(0x8467e00) called
|
上面就是设定该值后一个简单的赋值操作引起的线程操作信息。
PyThread_acquire_lock 是获取 GIL 操作。
PyThread_release_lock 是释放 GIL 操作。
PYTHONDUMPREFS
当该值被设定了,Python 会在解释器退出时打印出当前仍然存活的对象以及其引用计数。
我试一下, Python2.7.8 的输出格式为:
内存地址 [ 引用计数 ] 对象类型
PYTHONMALLOCSTATS
当该值被设定了,Python 将会打印每个新的 object arena 在生成时的内存分配统计,同时在退出解释器时也会打印出内存分配统计。
Tip
object arena 不知道啥意思,自己试了,网上查了也不知道是啥。