Python模塊查找路徑


在編寫Python程序時候命名在IDE中運行正常可是到了服務器上就出現各種問題,經常發生的就是如下的錯誤:

ImportError: No module named 'hello'

這個錯誤我相信大家都不陌生學習初期都會遇到尤其是你引入第三方模塊(從網上下載的或者是你自己寫的)的時候可能會發生。那是為什么呢?在Python中這些東西叫做模塊,可是在系統中其實就是目錄,既然你要使用這些模塊也就是目錄里面的內容那么Python解釋器肯定要能找到才行,其實就跟系統中的環境變量一樣,編譯安裝程序的時候經常要手動設置環境變量為什么呢?同樣的道理如果你不設置那么你使用這些命令的時候就要使用絕對路徑或者進入到命令所在目錄才可以,你要想隨時隨地使用就必須設置環境變量,告訴系統去哪里找這些命令。知道原因之后我們看看Python是怎么找這些模塊的?

Python解釋器如何找到模塊

sys.path

這個函數輸出的是一個列表它就包含了搜索模塊的路徑,這個列表的第一個路徑就是當前路徑,所謂當前路徑就是你運行Python程序的當前路徑,比如你的程序放在/home/zhangsan/test.py, 在運行這個程序的時候,這個程序的sys.path列表的第一個路徑就是/home/zhangsan,其余的就是系統默認的路徑,如下圖:

Python解釋器就是通過這個類別來搜索模塊的,如果你引入的模塊不在這個列表里那么顯然就找不到了,也就有了上面的錯誤。那如何添加呢?

既然sys.path輸出是一個列表,那么我們就可以在列表中添加。看下圖:

兩個列表是不是不同呢?

1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 import sys
5 
6 print sys.path
7 # 添加
8 sys.path.insert(1, "/work/apps/mymodules")
9 print sys.path
View Code

這里為什么使用insert呢,其實你使用append也可以,使用插入就是為了讓它快速找到。這種是動態添加的,作用范圍僅僅是當前py文件,如果你的很多py文件都引入了其他模塊怎么辦?一個一個修改太麻煩了。

PYTHONPATH

這是個環境變量,系統默認沒有。你需要自己設置。

編輯 vim ~/.bashrc

export PYTHONPATH=$PYTHONPATH:/YOU_MODULE_DIRECTORY

然后執行 source ~/.bashrc 使其生效即可。不過不推薦這種方式,因為它會改變prefix和exec_prefix的值,默認情況下prefix和exec_prefix都是/usr/local

.pth文件

這種方式很簡單便於管理,在需要大量添加外部路徑的時候非常推薦,而且是永久生效。啟動Python程序時候,解釋器就會遍歷目錄,遇到pth就會讀取這個文件中的內容並添加到sys.path中。這里以系統自帶的Python2.7為例說明

/usr/lib/python2.7/site-packages

其內容就是路徑

 


免責聲明!

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



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