python的sys.path(环境变量)简单总结
基本概念:
sys.path指定⽤于模块搜索路径的字符串列表。
它根据环境变量PYTHONPATH进⾏初始化,再加上安装时的默认值。
>>> sys.path
['', '/opt/lib/python2.7/site-packages/setuptools-0.', '/opt/lib/python2.7/site-packages/SOAPpy-0.12.22-
', '/opt/lib/python2.7/site-packages/defusedxml-0.4.', '/opt/lib/python2.7/site-packages/wstools-
0.4.', '/opt/lib/python2.7/site-packages/docutils-0.', '/opt/lib/python2.7/site-packages/suds-0.', '/opt/lib/python27.zip', '/opt/lib/python2.7', '/opt/lib/python2.7/plat-linux2', '/opt/lib/python2.7/lib-tk',
'/opt/lib/python2.7/lib-old', '/opt/lib/python2.7/lib-dynload', '/opt/lib/python2.7/site-packages']
此列表的第⼀项path[0],在程序启动时初始化,是包含调⽤Python解释器的脚本的⽬录。
如果脚本⽬录不可⽤(例如,解释器以交互⽅式调⽤或脚本是从标准输⼊读取),path[0]是空字符串,表⽰Python⾸先搜索当前⽬录中的模块。
注意脚本的⽬录在依据PYTHONPATH⽣成的结果之前插⼊。
修改path:
⼀个程序可以根据它⾃⼰的⽬的⾃由地修改paht列表。
场景:在实际开发中,默认包含了当前⽬录为搜索路径,所以,当前⽬录下的模块和⼦模块均可以正常访问。
但是若⼀个模块需要import平级的不同⽬录的模块,或者上级⽬录⾥⾯的模块,就可以通过修改path来实现。
修改path常⽤两种⽅法:
1. 即时⽣效的⽅法,就是在模块⾥⾯修改sys.path值,这种⽅法修改的sys.path作⽤域只是当前进程,进程结束后就失效了。
个⼈⽐较推荐这种⽅法,⽐较⼲净, 避免⼀些冲突问题。
⽐如现在的代码⽬录结构:
/src/configs/config.py
/src/common/Database.py
假如Database.py期望导⼊config.py,则可以增加上级⽬录到sys.path列表⾥⾯:
parent_path = os.path.dirname(sys.path[0])
if parent_path not in sys.path:
sys.path.append(parent_path)
fig
最好加个判断,避免重复加⼊。
2. 在site-packages/ 增加路径,这种⽅法⼀劳永逸, 简单暴⼒。
举个例⼦,将/tmp/增加到sys.path
⾸先cd到指定python的sit-packages/⽬录下,然后创建⼀个⽂件,例如test.pth,在⽂件中增加/tmp/路径信息,保存退出。
[ root@localhost ~]# cat /opt/lib/python2.7/site-packages/test.pth
/tmp/
[ root@localhost site-packages]# /opt/bin/python
Python 2.7.3 (default, Jul 14 2015, 06:27:34)python默认安装路径
>>> import sys
>>> sys.path
['', '/opt/lib/python2.7/site-packages/setuptools-0.', '/opt/lib/python2.7/site-packages/SOAPpy-0.12.', '/opt/lib/python2.7/site-packages/defusedxml-0.4.', '/opt/lib/python2.7/site-packages/wstools-0.4.', '/opt/lib/python2.7/site-packag
es/docutils-0.', '/opt/lib/python2.7/site-packages/suds-0.', '/opt/lib/python27.zip', '/opt/lib/python2.7', '/opt/lib/python2.7/plat-linux2', '/opt/lib/python2.7/lib-
tk', '/opt/lib/python2.7/lib-old', '/opt/lib/python2.7/lib-dynload', '/opt/lib/python2.7/site-packages', '/tmp']

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。