Python中可选的环境变量设置


好记性不如烂笔头,看到Python Optional Variables这一块,把学习的东西记录下来


会写Java Hello World的同学一定知道如何设置环境变量,比如:JAVA_HOME,CLASSPATH等。


Python中也一样有类似的环境变量,有一些还是可选的(比如:PYTHONPATH, PYTHONSTARTUP等)

  1. 设置PYTHONPATH

这个环境变量有什么用呢?

我们知道在导入模块时(比如:import some_module_name),Python需要在某些路径(即sys.path这个列表中的路径)中去寻找相应的模块,而PYTHONPATH这个变量就是告诉Python,将它的值也加入到搜索路径中(即将PYTHONPATH的值合并到sys.path列表中)。

export PYTHONPATH=/tmp
python -c "import sys; print ‘found‘ if ‘/tmp‘ in sys.path else ‘‘ "

输出结果是:found

说明/tmp在sys.path中被找到了(即/tmp附加到了sys.path中)


2. 设置PYTHONSTARTUP

如果这个环境变量的值是一个可读的文件,那么该文件中的Python命令会在交互模式启动之前执行。

echo "print ‘hello world‘" > /tmp/a.py
export PYTHONSTARTUP=/tmp/a.py
python

在启动python交互模式后,会看到有hello world已经被输出了。


3. 设置PYTHONHOME

一般在这个变量没有被设置的情况下,Python中的sys.path会列出一些模块的搜索路径。

# 比如:
[‘‘, ‘/usr/lib/python2.7‘, ‘/usr/lib/python2.7/plat-linux2‘, 
‘/usr/lib/python2.7/lib-tk‘, ‘/usr/lib/python2.7/lib-old‘, 
‘/usr/lib/python2.7/lib-dynload‘, ‘/usr/local/lib/python2.7/dist-packages‘, 
‘/usr/lib/python2.7/dist-packages‘]

Python模块的搜索路径一般默认是sys.prefix/lib,可以看到很多路径是 /usr/lib/... 这种,其中/usr 就是sys.prefix这个变量的值(windows上可能是你安装Python的目录,比如: C:\Python2.7)。

如果人工指定了PYTHONHOME,那么sys.prefix的值就会被替换。


随便替换PYTHONHOME的值,可能造成Python无法启动,替换前请备份sys.prefix的值



4. 设置PYTHONCASEOK

这个变量只对Windows起效,可以设置为任意的值(比如:SET PYTHONCASEOK=OK)

设置了以后,Python对模块的导入,将忽略大小写(只对用户module忽略大小写,对built-in module还是大小写敏感)



5. 设置PYTHONIOENCODING

看这个名字,IO Encoding可以猜到这个东西是和输入输出有关的。对,这个环境变量的作用就是指定Python程序标准输入输出(stdin,stdout,stderr)的编码。

关于这个东西的运用,请参考:http://www.soimort.org/posts/118/  太长不看 :D



That‘s it!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。