直接import
例如我要在ma_main.py
中導入env包
中的make_env.py
檔, 從而讀取其中的函數
因為此時ma_main.py
和env套件
都在 src
這個根目錄下, 所以可以直接import繼續導入
#這裡from
再import
是因為make_env.py
中只有一個函數就是make_env()
, 所以直接import該函數, 在呼叫的時候可以直接寫名字
如果是from env import make_env
, 那麼呼叫make_env.py
中的make_env()函數
., 還要用.
進行宣告
PS: from env import make_env
和import env.make_env
是一樣的
如果執行檔和模組不在同一目錄,這時候直接import是找不到自訂模組的。
例如這種情況: 要在main.py
中匯入pwcong
套件從而執行__init__.py
的一些方法
然而main.py
在./Torch/main/
#下, 而pwcong
在./Torch/
下
即不在同一個目錄, 此時main.py
檔案python解釋器模組搜尋的路徑列表中不包含是./Torch
所以這時候就要用python中自帶的sys套件
導入自訂模組的路徑, 從而手動添加Python解釋器在main.py
中的模組搜尋的路徑列表 , 之後才能成功導入
在Python中,當你導入一個模組時,解釋器會從一個路徑列表中找到該模組。
這個路徑清單通常會包含Python解釋器安裝的預設路徑,以及在環境變數PYTHONPATH
中指定的任何路徑。
使用sys.path.append()
函數可以在這個路徑清單中新增新的路徑,以便解譯器可以找到你指定的模組。
新增路徑後,你就可以透過import
語句導入該路徑下的模組。
這並不會影響命名空間,而只是告訴解釋器在哪裡可以找到要導入的模組。
匯入自訂模組的步驟如下:
先導入sys模組
#然後透過sys.path.append(path)
函數來導入自訂模組所在的目錄
導入自訂模組。
即在main.py
的最上面幾行寫入如下程式碼手動定義該檔案的python解釋器路徑
import sys sys.path.append(r"C:\Users\PC\Desktop\Torch") # 要加上地址生命符r, 并且要是绝对路径
在__init__.py
中定義一個hello函數, 列印hello
#透過sys.path.append新增解釋器模組搜尋的路徑, 然後透過模組名執行函數
一個模組必須要有__init__.py
檔案
在Python中,一個目錄要被視為一個套件,它必須包含一個__init__.py
檔案。這個文件可以是一個空文件,或是包含一些包初始化的程式碼。
沒有__init__.py
檔案的目錄就只是一個目錄, 其他py檔案無法導入該目錄下的任何py檔案中的函數
__init__. py
檔案可能包含:
聲明命名空間:__init__.py
檔案可以包含變數、類別和函數的宣告
初始化程式碼:init.py檔案可以包含初始化程式碼,這些程式碼會在套件被導入時執行。這可以用於執行某些必要的操作,例如配置套件或確保套件的依賴項已安裝。
子模組導入:init.py檔案可以包含導入其他模組的程式碼。這可以用於將子模組新增到套件的命名空間中,以便使用者可以存取它們。
在 Python 中,命名空間是一個包含變數和函數名字的字典,用來記錄每個識別碼(identifier)的名稱和值。 Python 解譯器中的每個命名空間都是字典對象,可以透過字典的鍵值對來存取其中的變數和函數。
Python 中有三種命名空間:
內建命名空間:包含了Python解釋器內建的變數和函數,這些變數和函數可以直接在程式中使用而不需要導入任何模組,例如:print()
函數、len()
函數等。
全域命名空間:在模組定義時創建,包含了在模組檔案中定義的變數和函數。可以在模組中的任何地方使用這些變數和函數。
局部命名空間:在函數呼叫時創建,包含了函數中定義的變數和函數。只能在函數內部使用這些變數和函數。
命名空間的作用是避免不同命名空間之間的變數或函數名稱衝突,並且可以更好地管理程式中的變數和函數。在Python中,可以透過使用global
和nonlocal
關鍵字來存取和修改全域和非局部命名空間中的變數。
以上是python套件導入的方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!