查找是按照 sys.path 中的路徑挨個掃描。若都不存在則提示error。
sys.path路徑第一個是當前運行腳本所在的目錄,其後是PYTHONPATH(通常若步專門設置則爲空)設置的目錄,在後面是全局包所在目錄。python
PS:一個目錄要有__init__.py才能做爲包被導入git
要導入的包在當前目錄
要導入的包在子目錄
要導入的包在父目錄
要導入的包在兄目錄(這種狀況和包在其餘十萬八千里地方同樣)github
如下是目錄結構
app
如下示例的運行目錄都是test_module/sub1
即 python case_.pycode
要導入的模塊和當前運行文件在同一目錄,直接import
a.pyblog
print("I'm a.py")
case_1.pyutf-8
#!/usr/bin/env python # encoding: utf-8 import a print('I\'m case_1.py')
輸出:get
I'm sub1/a.py I'm case_1.py
子目錄創建__init__.py 文件,import subsub.ait
case2ast
#!/usr/bin/env python # encoding: utf-8 import subsub.a print('I\'m case_2.py')
輸出
I'm subsub/aa.py I'm case_2.py
兩個方法,其一直接改變sys.path內容,使用sys.path.append(),注意這裏添加的路徑是對於運行該文件時的當前目錄來講的;其二設置PYTHONPATH添加父目錄
case_3_1.py
#!/usr/bin/env python # encoding: utf-8 import sys sys.path.append('../') import aa print('I\'m case_3_1.py')
執行case_3_2前 先使用這個命令 export PYTHONPATH=$PYTHONPATH:/home/pb/test_module
case_3_2.py
#!/usr/bin/env python # encoding: utf-8 import aa print('I\'m case_3_2.py')
和第三種同樣,使用sys.path.append()或者設置PYTHONPATH添加父目錄
#!/usr/bin/env python # encoding: utf-8 import sys sys.path.append('../') import sub2.aa print('I\'m case_4.py')
其實掌握了sys.path 和PYTHONPATH後目錄在哪裏都能用這樣的stopgap方法搞一下,可是若是是第四種狀況仍是建議使用virtualenv吧,否則你之後會發瘋的。