python中sys.path--學習


本着下定義開頭吧:python中import某個A模塊時,首先會從python的內置模塊中查找是否含義該模塊的定義若未查詢到會從sys.path對應的模塊路徑查詢是否含有對應模塊的定義,如果搜索完成依然沒有對應A模塊時則拋出import的異常

接着說明下python的兩種加載py文件的方式:

  • python xxx.py
  • python -m xxx.py

第一種方式是直接運行方式

第二種方式是把模塊當做腳本來啟動

可能看起來說的python運行方式和sys.path有點大相徑庭,但實際上兩種不同方式的運行導致sys.path[0]的值是有差異的

第一種方式:sys.path[0]是當前腳本的運行目錄

第二種方式:sys.path[0]是空值字符串,也就是當前執行python的目錄

 

sys.path是一個python搜索模塊的路徑列表:
 eg、下邊的X.py文件中打印出sys.path內容:

import sys
print sys.path

python x.py運行

其中sys.path[0]是 I:\restful_code\tester,對應調用python解釋器的腳本所在的目錄。 其實就是存放需要運行的代碼的路徑

python -m x.py運行

 

 

什么是python解釋器?

 

當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。

 

由於整個Python語言從規范到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。

 

常見的Python解釋器有: CPython IPython   PyPy  Jython   IronPython   

 

 使用場景:

 在實際開發中,默認包含了當前目錄為搜索路徑,所以,當前目錄下的模塊和子模塊均可以正常訪問。但是若一個模塊需要import平級的不同目錄的模塊,或者上級目錄里面的模塊,就可以通過修改path來實現

 修改path的兩種方法:

方法一:函數添加
這是即時生效的方法,就是在模塊里面修改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

 

方法一:修改環境變量

添加系統環境變量PYTHONPATH,在這個環境變量中輸入相關的路徑,不同的路徑之間用逗號(英文的!)分開。路徑會自動加入到sys.path中。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM