我有一個名爲「PKG」具有若干擴展模塊,用C++編寫,其駐留在與名稱「_module1.so」共享庫,「_module2.so」包等,這些可以使用通常的語法導入:如何給擴展模塊一個不同的名稱?
import _module1
不過,我更希望用戶看到的模塊名稱爲「MOD1」,「模2」等,讓他們會做這樣的進口:
import mod1
是否有辦法在不重新命名共享庫的情況下做到這一點?
Thanx。
我有一個名爲「PKG」具有若干擴展模塊,用C++編寫,其駐留在與名稱「_module1.so」共享庫,「_module2.so」包等,這些可以使用通常的語法導入:如何給擴展模塊一個不同的名稱?
import _module1
不過,我更希望用戶看到的模塊名稱爲「MOD1」,「模2」等,讓他們會做這樣的進口:
import mod1
是否有辦法在不重新命名共享庫的情況下做到這一點?
Thanx。
如果你不介意在源代碼中原來的模塊名稱,而只是想使用一個替代名稱,可以使用下面的語法:
import _module1 as mod1
除了進口走樣建議,你可以在你的代碼,它有一個__init__.py
文件,其中包含創建mod1
文件夾:
from _module1 import *
現在做import mod1
將運行__init__.py
文件,它將從0123加載一切並把它放在mod1
的命名空間,有效地使mod1
行爲像_module1
(鑑於import *
作品如預期)。
我也看到了由passlib
使用更復雜的方法。基本上,用戶友好的模塊使用代理來處理調度到項目中使用的多個子模塊,而不犧牲可用性。
主模塊可能看起來像:
from mymodule.registry import _proxy
import sys
sys.modules[__name__] = _proxy
_proxy
基本proxy pattern的實現,並處理延遲加載,這樣的。
如果你不想與代理打擾:
"""Main module `mod1`"""
import _module1
import sys
sys.modules[__name__] = _module1
這很好。感謝名單! – user1631355
這是已經被分配給用戶的API。我不希望他們必須更改他們的代碼。 – user1631355