python的sys.path(環境變量)簡單總結

基本概念 python

sys.path指定用於模塊搜索路徑的字符串列表。 linux

它根據環境變量PYTHONPATH進行初始化,再加上安裝時的默認值。 app


>>> sys.path python2.7

['', '/opt/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', '/opt/lib/python2.7/site-packages/SOAPpy-0.12.22-py2.7.egg', '/opt/lib/python2.7/site-packages/defusedxml-0.4.1-py2.7.egg', '/opt/lib/python2.7/site-packages/wstools-0.4.3-py2.7.egg', '/opt/lib/python2.7/site-packages/docutils-0.12-py2.7.egg', '/opt/lib/python2.7/site-packages/suds-0.4-py2.7.egg', '/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'] spa


此列表的第一項path[0],在程序啓動時初始化,是包含調用Python解釋器的腳本的目錄。 code

若是腳本目錄不可用(例如,解釋器以交互方式調用或腳本是從標準輸入讀取),path[0]是空字符串,表示Python首先搜索當前目錄中的模塊。 orm

注意腳本的目錄在依據PYTHONPATH生成的結果以前插入。 xml

 

 

修改path: 進程

一個程序能夠根據它本身的目的自由地修改paht列表。 ip

場景:在實際開發中,默認包含了當前目錄爲搜索路徑,因此,當前目錄下的模塊和子模塊都可以正常訪問。

可是若一個模塊須要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)
import configs.config

 最好加個判斷,避免重複加入。

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)  >>> import sys >>> sys.path ['', '/opt/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', '/opt/lib/python2.7/site-packages/SOAPpy-0.12.22-py2.7.egg', '/opt/lib/python2.7/site-packages/defusedxml-0.4.1-py2.7.egg', '/opt/lib/python2.7/site-packages/wstools-0.4.3-py2.7.egg', '/opt/lib/python2.7/site-packages/docutils-0.12-py2.7.egg', '/opt/lib/python2.7/site-packages/suds-0.4-py2.7.egg', '/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']
相關文章
相關標籤/搜索