1. 程式人生 > >Pycharm自定義包的匯入

Pycharm自定義包的匯入

https://blog.csdn.net/haiyanggeng/article/details/79215819 
https://blog.csdn.net/u010278162/article/details/52043308

PyCharm下解決Unresolved Reference問題
python在同級目錄下理應可以直接import的,而到Pycharm的.py檔案在同一級目錄下呼叫卻會出現Unresolved Reference,網上查了下資料,瞭解了一下python在import的時候到底執行了什麼操作。在這之前先貼上解決方法:

進入PyCharm->Settings->Build,Excution,Deployment->Console->Python Console勾選上Add source roots to PYTHONPATH;
進入PyCharm->Settings->Project->Project Structure,選中框中檔案目錄(即你的需要相互呼叫的py檔案所在目錄)右鍵新增sources;
點選Apply和OK之後即可.(應該要重啟Pycharm)
接下來大概瞭解下python在import的時候做的事情:

1. 建立一個新的,空的module物件(它可能包含多個module)

   #一個module也就是一個.py檔案,裡面包含定義的函式和變數
1
2. 把這個module物件插入sys.module

    #sys.modules是一個全域性字典,該字典是python啟動後就載入在記憶體中,每次匯入模組的時候sys.modules都會將
    #它加入字典,sys.modules對於載入模組起到了緩衝的作用。當某個模組第一次匯入,字典sys.modules將自動記錄
    #該模組。當第二次再匯入該模組時,python會直接到字典中查詢,從而加快了程式執行的速度。
1
2
3
3. 裝載module的程式碼(如果需要,首先必須編譯)

4. 執行新的module中對應的程式碼

在執行第3步時,首先要找到module程式所在的位置,其原理為:如 果需要匯入的module的名字是m1,則直譯器必須找到m1.py,它首先在當前目錄查詢,然後是在環境變數PYTHONPATH中查詢。 PYTHONPATH可以視為系統的PATH變數一類的東西,其中包含若干個目錄。如果PYTHONPATH沒有設定,或者找不到m1.py,則繼續搜尋 與python的安裝設定相關的預設路徑,在Unix下,通常是/usr/local/lib/python。事實上,搜尋的順序是:當前路徑 (以及從當前目錄指定的sys.path),然後是PYTHONPATH,然後是python的安裝設定相關的預設路徑。正因為存在這樣的順序,如果當前 路徑或PYTHONPATH中存在與標準module同樣的module,則會覆蓋標準module。也就是說,如果當前目錄下存在xml.py,那麼執 行import xml時,匯入的是當前目錄下的module,而不是系統標準的xml。

瞭解了這些,我們就可以先構建一個package,以普通module的方式匯入,就可以直接訪問此package中的各個module了。

Python中的package定義很簡單,其層次結構與程式所在目錄的層次結構相同,這一點與Java類似,唯一不同的地方在於,python中的package必須包含一個init.py的檔案。 
例如,我們可以這樣組織一個package:


package1/
    __init__.py
    subPack1/
        __init__.py
        module_11.py
        module_12.py
        module_13.py
    subPack2/
        __init__.py
        module_21.py
        module_22.py
    ……
1
2
3
4
5
6
7
8
9
10
11
12
13
init.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,init.py中也可以設定相應的內容。