Python 模組搜尋路徑

2021-10-24 15:32:13 字數 2785 閱讀 8133

我們都知道,使用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 件不起作用,也就是不能套娃 方法二 新建使用者環...