2012-08-28 39 views
2

我有一個名爲「PKG」具有若干擴展模塊,用C++編寫,其駐留在與名稱「_module1.so」共享庫,「_module2.so」包等,這些可以使用通常的語法導入:如何給擴展模塊一個不同的名稱?

import _module1 

不過,我更希望用戶看到的模塊名稱爲「MOD1」,「模2」等,讓他們會做這樣的進口:

import mod1 

是否有辦法在不重新命名共享庫的情況下做到這一點?

Thanx。

回答

4

如果你不介意在源代碼中原來的模塊名稱,而只是想使用一個替代名稱,可以使用下面的語法:

import _module1 as mod1 
+0

這是已經被分配給用戶的API。我不希望他們必須更改他們的代碼。 – user1631355

1

除了進口走樣建議,你可以在你的代碼,它有一個__init__.py文件,其中包含創建mod1文件夾:

from _module1 import * 

現在做import mod1將運行__init__.py文件,它將從0123加載一切並把它放在mod1的命名空間,有效地使mod1行爲像_module1(鑑於import *作品如預期)。

1

我也看到了由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 
+0

這很好。感謝名單! – user1631355