影响Python行为的环境变量

Python解释器其实也是一个软件,运行再操作系统环境下,所以Python是受操作系统环境变量影响的。所以环境变量也是需要关注的。特别是当我们使用sys模块时,很多都必须考虑环境变量。

命令行指定变量值会覆盖环境变量值。

环境变量

1. PYTHONHOME

该变量影响python标准库的位置。

默认:库是在prefix/lib/pythonversion 和 exec_prefix/lib/pythonversion。 prefix和exec_prefix是和安装有关的目录,两个默认是/usr/local

如果PYTHONHOME设置的是单个目录,那么prefix和exec_prefix都是该目录。如果要指定两者的不同值,那么设置值就像这样的格式:prefix:exec_prefix

2. PYTHONPATH

这个变量是影响python搜索module模块的路径。这个变量值的格式就像linux-shell的PATH。

出了是路径外,还可以是一个纯粹包含python代码文件的zip压缩包。

默认:默认搜索路径值是依赖安装目录的,一般都是prefix/lib/pythonversion

一些额外的路径,是会放在PYTHONPATH默认值的前面追加。

通过sys.path可以在代码层面修改搜索路径。

3. PYTHONSTARTUP

如果这个值是一个可读文件名字,那么在这个文件里的python命令将被执行,执行的时机是在python解释器打印提示信息前,在交互模式下。

利用这个我们可以改变交互模式下的提示信息。

4. PYTHONOPTIMIZE

如果设置了这个是一个非空的字符串,等价于指定了python解释器参数-O选项,如果设置的是一个整数,等价于设置了多次-O选项。

5. PYTHONBREAKPOINT

如果设置了这个,且这个值指定的是一个已点号间隔的可执行python路径。这个路径指定的模块,所包含的可执行对象都会被import,然后当在代码中用到sys.breakpointhook()时,就是在调用这个模块里的可执行对象。下面没有翻译了,能力有限:

If not set, or set to the empty string, it is equivalent to the value “pdb.set_trace”. Setting this to the string “0” causes the default implementation of sys.breakpointhook() to do nothing but return immediately.

Python 3.7才有的

6. PYITHONDEBUG

If this is set to a non-empty string it is equivalent to specifying the -d option. If set to an integer, it is equivalent to specifying -d multiple times.

7. PYTHONINSPECT

If this is set to a non-empty string it is equivalent to specifying the -i option

.This variable can also be modified by Python code using os.environ to force inspect mode on program termination.

8. PYTHONUNBUFFERED

如果设置了该值且是一个非空字符串,等价于命令行参数加了-u选项

9. PYTHONVERBOSE

If this is set to a non-empty string it is equivalent to specifying the -v option. If set to an integer, it is equivalent to specifying -v multiple times.

10. PYTHONCASEOK

If this is set, Python ignores case in import statements. This only works on Windows and OS X.

11. PYTHONDONTWRITEBYTECODE

如果设置为一个非空的字符串,那么python不会去创建.pyc文件在导入源码模块。这个等价于命令行加-B选项。

12. PYTHONHASHSEED

如果这个值不设置或者设置为random值,那么将会使用一个随机的值作为seed值用在str,bytes,datetime对象的hash算法中。seed值影响多次hash的随机性,如果seed值相同,那么多次运行python解释器,这三个对象的相同值hash将会相同。如果时随机,那么多次运行python解释器,相同值hash也会不同。

设置固定值的目的就是为了允许可重复hash. 如解释器自测,或者允许一个python进程cluster共享hash值。

这个固定值必须是一个decimal number 在[0,4294967295]范围内。特别是的0值将会关闭hash随机性。

13. PYTHONIOENCODING

在解释器启动前设置,它将覆盖stdin/stdout/stderr的编码,值格式是:encodingname:errorhandler。

encodingname和:errorhandler都是可选的并且意义同str.encode

14. PYTHONNOUSERSITE

See also PEP 370 – Per user site-packages directory

15. PYTHONUSERBASE

16. PYTHONEXECUTABLE

如果设置了这个环境变量, 那么sys.argv[0] 将会被设置为这个值,

instead of the value got through the C runtime. Only works on Mac OS X.

17. PYTHONWARNINGS

This is equivalent to the -W option.

18. PYTHONFAULTHANDLER

If this environment variable is set to a non-empty string, faulthandler.enable() is called at startup: install a handler for SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL signals to dump the Python traceback. This is equivalent to -X faulthandler option.

19. PYTHONTRACEMALLOC

If this environment variable is set to a non-empty string, start tracing Python memory allocations using the tracemalloc module. The value of the variable is the maximum number of frames stored in a traceback of a trace. For example, PYTHONTRACEMALLOC=1 stores only the most recent frame. See the tracemalloc.start() for more information.

20. PYTHONPROFILEIMPORTTIME

If this environment variable is set to a non-empty string, Python will show how long each import takes. This is exactly equivalent to setting -X importtime on the command line.

21. PYTHONASYNCIODEBUG

If this environment variable is set to a non-empty string, enable the debug mode of the asyncio module.

22. PYTHONMALLOC

23. PYTHONMALLOCSTATS

24. PYTHONLEGACYWINDOWSFSENCODING

25. PYTHONLEGACYWINDOWSSTDIO

26. PYTHONCOERCECLOCALE

27. PYTHONDEVMODE

28. PYTHONUTF8

输入设置为1,那么python解释器时UTF-8模式,即使当前文件设置了文件编码也会使用这个UTF-8。

也就是说:

sys.getfilesystemencoding() 返回'UTF-8'
locale.getpreferredencoding()
sys.stdin, sys.stdout, sys.stderr

Debug模式下支持的环境变量

PYTHONTHREADDEBUG

If set, Python will print threading debug info.

PYTHONDUMPREFS

If set, Python will dump objects and reference counts still alive after shutting down the interpreter.

对于当前工作路径

没有环境变量可以指定,默认时启动程序所在路径,但是可以通过os.chdir('路径')改变。然后通过os.getcwd()获取。