January Star
  • Home
  • Categories
  • Tags
  • Archives

Python环境变量

Contents

  • 普通环境变量
    • PYTHONHOME
    • PYTHONPATH
    • PYTHONSTARTUP
    • PYTHONY2K
    • PYTHONOPTIMIZE
    • PYTHONDEBUG
    • PYTHONINSPECT
    • PYTHONUNBUFFERED
    • PYTHONVERBOSE
    • PYTHONCASEOK
    • PYTHONDONTWRITEBYTECODE
    • PYTHONHASHSEED
    • PYTHONIOENCODING
    • PYTHONNOUSERSITE
    • PYTHONUSERBASE
    • PYTHONEXECUTABLE
    • PYTHONWARNINGS
  • 调试模式下的环境变量
    • PYTHONTHREADDEBUG
    • PYTHONDUMPREFS
    • PYTHONMALLOCSTATS

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 命令行参数。

PYTHONVERBOSE

如果该环境变量被设定为一个非空字符串,就相当于 -v 命令行参数。

如果该环境变量被设定为一个数字 N, 就相当于 -vv (v 的个数为 N) 命令行参数。

PYTHONCASEOK

如果该环境变量被设定了,Python 会在 import 模块时忽略模块名的大小写。

Tip

此值只在 Windows, OS X, OS/2, and RiscOS 上有效。

PYTHONDONTWRITEBYTECODE

如果该环境变量被设定了,Python 不会在导入源码模块时生成 .pyc 或 .pyo 文件。

相当于 -B 命令行参数。

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 时的安装目录。

PYTHONEXECUTABLE

如果该环境变量被设定了, sys.argv[0] 就会为该环境变量的值。

Tip

该环境变量只在 Mac OS X 上有效。

PYTHONWARNINGS

如果该环境变量被设定为一个非空字符串,就相当于 -W 命令行参数。

如果该环境变量被设定为一个数字 N, 就相当于 -WW (W 的个数为 N) 命令行参数。

调试模式下的环境变量

以下的环境变量只有在 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 不知道啥意思,自己试了,网上查了也不知道是啥。

Comments
comments powered by Disqus

Published

Oct 3, 2014

Category

python

Tags

  • env 1
  • 环境变量 1
  • python 23
  • vars 1

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor