How python’s import machinery works 簡單的筆記, 順便整理一下 import 的資料。
import 就像 C的 include
…用來引用其他的程式庫。
並簡單說明引用的機制、優先順序。
A module is a file containing Python definitions and statements.
modules
是有 python 程式碼的檔案, 是單一檔案,副檔名是 .py
,檔案名就是 import name
a way of structuring Python’s module namespace by using “dotted module names”.
packages
是 modules
的集合,import name 通常是 資料夾名。
假設有個 package
長這樣
tmp/
my_package/
__init__.py
my_module.py
my_module.py
class MyClass:
def __init__(self):
print('init called')
def caps(self, word):
print(word.upper())
import
方法一進 tmp
後,執行 python
$cd tmp
$python
通常 import
的方式是這樣。
物件產生時,和物件方法執行時,會印出一些訊息。
>>> from my_package import my_module
>>> something = my_module.MyClass()
init called
>>> something.caps('hello')
HELLO
import
方法二:import_module
動態載入先載入 import_module 後,再用它載入其他的 package
>>> from importlib import import_module
>>>
>>> my_module = import_module('my_package.my_module')
>>> obj = my_module.MyClass()
init called
>>> obj.caps('hello')
HELLO
How to import a module given the full path?
sys.modules
先找sys.modules
是 python 執行時會先載入的 module,通常是系統內建的程式庫sys.meta_path
次之前面的 sys.modules 找不到後,會載入 sys.meta_path
物件,開始從 sys.path
裡去找你想載入的 packages。
這邊比較需要記得就是 sys.path
是放要載入的程式庫的路徑,
所以把你的程式庫路徑加進 sys.path
應該就可以找到了。
整個 import
載入的機制,參考連結說的滿清楚的的,
太細節的部分,之後有空再來細看。