Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc

前段时间在配置apache服务器时用到了这个参数,所以就特别查了一下

>>> import sys
>>> print sys.path
['', '/home/pig', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages']
>>> 

在python 调试模式中导入sys模块,就可以打印出它的值。

python 的官方文档关于此值是这样说的。

A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.

也就是说python解释器使用此值来,搜索模块,同时这个列表是由两部分组成的,一部分是从环境变量PYTHONPATH中取出的,另一部分中是安装时的默认值。

我做了测试,默认情况下,是没有这个环境变量的,因此我在环境变量中加入了PYTHONPATH

在~/.bashrc 中加入以下内容

PYTHONPATH="/home/pig"
export PYTHONPATH

大家可以看到在上面的运行结果中,已经生效了。除了这个,大家还能看到

1)此列表的第一个元素是一个空字符串,它表示python解释器运行的当前目录
2) /usr/lib/python2.6 像这种都是python相应库的安装目录

最后再来看一个实验,打开两个窗口,各启动一个python 解释器,修改其中其中一个sys.path,看对另一个解释器是否有影响
1)

>>> import sys
>>> print len(sys.path)
14
>>> sys.path.append('/home/aotian/test')
>>> print len(sys.path)
15
>>> 

2)

>>> import sys
>>> print len(sys.path)
14
>>> print len(sys.path)
14
>>> 

从对比结果可以看出,刚开始两个解释器的len(sys.path)都等于14,给第一个解释器增加元素,第二个解释器并没有收到影响。

也就是说对于两个python解释器而言,这个变量是相互独立的,它的表现行为类似于进程的环境变量。

有的时候我们需要在工程中引入其它公共模块的代码,则启动脚本可以这样写

cd "$(dirname "$0")"  
cd ..  
export PYTHONPATH=`pwd`  
nohup python webserver/src/webserver.py  &

通过shell 命令跳转到对应代码所在文件路径,再通过PYTHONPATH 引入该模块或代码
最后执行相应程序。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注