一文解決python模塊導入

python 模塊導入 原理

查找是按照 sys.path 中的路徑挨個掃描。若都不存在則提示error。
sys.path路徑第一個是當前運行腳本所在的目錄,其後是PYTHONPATH(通常若步專門設置則爲空)設置的目錄,在後面是全局包所在目錄。python

PS:一個目錄要有__init__.py才能做爲包被導入git

示例代碼地址:

github

一共四種狀況

要導入的包在當前目錄
要導入的包在子目錄
要導入的包在父目錄
要導入的包在兄目錄(這種狀況和包在其餘十萬八千里地方同樣)github

如下是目錄結構
app

如下示例的運行目錄都是test_module/sub1
即 python case_.pycode

case1

要導入的模塊和當前運行文件在同一目錄,直接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

case2

子目錄創建__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

case3

兩個方法,其一直接改變sys.path內容,使用sys.path.append(),注意這裏添加的路徑是對於運行該文件時的當前目錄來講的;其二設置PYTHONPATH添加父目錄

case_3_1

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

執行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')

case4

和第三種同樣,使用sys.path.append()或者設置PYTHONPATH添加父目錄

case_4

#!/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吧,否則你之後會發瘋的。

相關文章
相關標籤/搜索