我們都知道,使用python時,無論是使用第三方的模組(庫),還是自己開發的模組,都需要先在**中使用import來引入。對於初學者,經常會遇到的乙個問題是在使用import
時,python 找不到相應的模組,於是編譯器報 -importerror
錯誤。
那麼,python 如何知道在**搜尋模組的路徑呢?
當import某個模組時,直譯器首先搜尋具有該名稱的內建模組,如果沒有找到,將在變數 sys.path 給出的目錄列表中搜尋名為 模組名.py 的檔案。sys.path 包含了一下幾個目錄:
>>> import sys
>>> sys.path
['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
注:其中''表示的就是當前目錄。
先看乙個例子,在/root/ws目錄下建乙個hello.py檔案,內容如下:
def test():
print('hello')
return
然後我們在/root目錄下,使用python命令列引入該模組:
>>> import sys
>>> sys.path
['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
>>>
>>> import os
>>> os.getcwd()
'/root'
>>> import hello
traceback (most recent call last):
file "", line 1, in importerror: no module named hello
可以看到,當前目錄和sys.path中都不包含/root/ws ,所以會報importerror錯誤。
為了解決上述問題,我們可以通過一下三種方法來解決。
>>> sys.path
['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages', '/root/ws']
>>>
>>> import hello
>>> hello.test()
hello
可以看到,/root/ws路徑被動態的臨時新增到了sys.path中了。
2、修改pythonpath環境變數:
vim ~/.bashrc
#新增export pythonpath=$pythonpath:/root/ws
#生效source ~/.bashrc
#python**中引入hello模組
$ python
python 2.7.5 (default, sep 15 2016, 22:37:39)
[gcc 4.8.5 20150623 (red hat 4.8.5-4)] on linux2
>>> import sys
>>> sys.path
['', '/root', '/root/ws', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
>>> import hello
>>> hello.test()
hello
可以看到,/root/ws路徑被動態的永久新增到了sys.path中了。
3、使用.pt**件:
在/usr/lib/python2.7/site-packages 下新增乙個擴充套件名為 .pth 的配置檔案(例如:test.pth),內容為要新增的路徑:
/root/ws
這樣,就可以在python中引入hello模組了。 python 模組搜尋路徑
當你匯入乙個模組,python 解析器對模組位置的搜尋順序是 1 當前目錄 2 如果不在當前目錄,python 則搜尋在 shell 變數 pythonpath 下的每個目錄。3 如果都找不到,python會檢視預設路徑。unix下,預設路徑一般為 usr local lib python 模組搜尋...
Python模組搜尋路徑
最近一直被python包匯入絆倒,所以打算好好學習一下python包模組搜尋路徑 外部的terminal中執行,不是ide中 import的時候,python interpreter首先搜尋built in module中有沒有叫這個名的 比如os模組,用 builtins 檢視 若是沒有才會到sy...
python新增模組搜尋路徑
方法一 新建pt 件 在任意搜尋路徑下新建pt 件 檢視搜尋路徑 import sys print sys.path pt 件內容為被新增模組的所在路徑。示例 f python ml deepidentify 注意 通過pt 件新增的搜尋路徑下的pt 件不起作用,也就是不能套娃 方法二 新建使用者環...