首頁 > 軟體

Python中__init__.py檔案的作用

2022-09-26 14:04:52

1 init資料夾圖示

在PyCharm中,帶有__init__.py這個檔案的目錄被認為是Python的包目錄,與普通目錄的圖示有不一樣的顯示。
如下圖所示,data目錄沒有__init__.py,其圖示是個資料夾圖示;而model下有_init__.py檔案,其圖示是一個包。所以__init__.py是Python中package的標識

2 init.py匯入包方式

__init__.py檔案的一個主要作用是將資料夾變為一個Python模組,Python中的每個模組的包中,都有__init__.py 檔案。

python在解釋包的時候會給本模組下的所有檔案建立一個索引放在當前路徑下的__init__.py檔案中,如果沒有檔案索引,即使import了指定的包,直譯器還是找不到這個模組下的檔案。如果一個資料夾下沒有__init__.py檔案,不會被當做一個模組。

2.1 單個匯入

# package
# __init__.py
import re
import urllib
import sys
import os
# a.py
import package 
print(package.re, package.urllib, package.sys, package.os)

注意這裡存取__init__.py檔案中的參照檔案,需要加上包名。

2.2 批次引入(定義__all__用來模糊匯入)

我們在python中匯入一個包時,實際上是匯入了它的__init__.py檔案,這樣我們可以在__init__.py檔案中批次匯入我們所需要的模組,而不再需要一個一個的匯入。

使用__init__.py中的重要變數__all__, 將模組全部匯入。

# __init__.py
__all__ = ['os', 'sys', 're', 'urllib']
# a.py
from package import *

這就會將註冊在__init__.py檔案中__all__列表中的模組和包匯入到當前檔案中來。

3 範例

假設我們的模組包的目錄結構如下:

- mypackage
- - subpackage_1
- - - test11.py
- - - test12.py
- - subpackage_2
- - - test21.py
- - - test22.py
- - subpackage_3
- - - test31.py
- - - test32.py

直接匯入:

如果我們使用最直接的匯入方式,將整個檔案拷貝到工程目錄下,然後直接匯入:

from mypackage.subpackage_1 import test11
from mypackage.subpackage_1 import test12
from mypackage.subpackage_2 import test21
from mypackage.subpackage_2 import test22
from mypackage.subpackage_3 import test31
from mypackage.subpackage_3 import test32

這樣的話,查詢的時候也會麻煩,此時__init__.py就起到了簡化的作用。

init.py匯入:

在mypackage/新增__init__.py程式,有三種寫入方式。

from mypackage.subpackage_1 import test11
from mypackage import *
from mypackage.subpackage_1 import *

4 其他常見問題

4.1 使用__init__.py檔案的優點

  • ①當目錄下包含這個檔案時,Python會將其當作成包目錄,進而可以使用import xx.xx的方式匯入目錄下的檔案或者模組。
  • ②使用__init__.py檔案可以控制模組匯入時的變數和內容,便於程式設計者的控制。(簡化作用)

4.2 沒有__init__.py檔案的目錄,使用import xx.xx會報錯嗎?

在較低的版本中(如3.2及以下),沒有__init__.py檔案的目錄不能使用import xx.xx匯入相關模組,但是後面的版本可以。

4.3 根據匯入模組和主程式不同import方式

(1)如果匯入的模組和主程式在同個目錄下,直接import就行了

(2)如果匯入的模組是在主程式所在目錄的子目錄下,可以在子目錄中增加一個空白的__init__.py檔案,該檔案使得python直譯器將子目錄整個也當成一個模組,然後直接通過“import 子目錄.模組”匯入即可。

(3)如果匯入的模組是在主程式所在目錄的父目錄下,則要通過修改path來解決,有兩種方法:
①通過sys.path.append

import sys
sys.path.append('父目錄的路徑')  # '需要參照模組的地址'

來改變。python直譯器就是通過sys.path去的尋找模組的。sys.path是一個列表 list ,它裡面包含了已經新增到系統的環境變數路徑。

【注意】:這種方法是執行時修改,指令碼執行後就會失效。

②直接修改環境變數:在windows中是 “ set 變數=‘路徑’ ” 例如:set PYTHONPATH=‘C:test…’ 檢視是否設定成功用echo %PYTHONPATH%,而且進到python直譯器中檢視sys.path,會發現已經有了新增加的路徑了。這 種方式是永久的,一次設定以後一直都有效。在linux中是 “export 變數=‘路徑’ “,檢視是” echo $變數 "

到此這篇關於Python中__init__.py檔案的作用的文章就介紹到這了,更多相關Python__init__.py檔案 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com