我有一個以我正在使用的產品命名的模塊,而某些第三方爲我們產品的API使用相同的模塊名稱構建了一個包。在試圖使用後者時,模塊名稱會相互衝突。如果我更改API包的名稱,我不會輕易做出更改並向上遊返回。改變我們的模塊名稱將是一團糟。Python模塊名稱衝突
這聽起來像是一個瘋狂的問題。現在我們通過向API模塊添加一個「父」模塊來解決它。有沒有更好的解決方案?
我有一個以我正在使用的產品命名的模塊,而某些第三方爲我們產品的API使用相同的模塊名稱構建了一個包。在試圖使用後者時,模塊名稱會相互衝突。如果我更改API包的名稱,我不會輕易做出更改並向上遊返回。改變我們的模塊名稱將是一團糟。Python模塊名稱衝突
這聽起來像是一個瘋狂的問題。現在我們通過向API模塊添加一個「父」模塊來解決它。有沒有更好的解決方案?
你應該換你自己的模塊在一個封裝中這樣說:
mypylib
)__init__.py
一個空文件mymod.py
)在DIRsubmod
實現子模塊mymod.py
當你想使用submod
,你應該這樣做:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "mypylib"))
from mypylib.mymod import submod
我想大多數第三方模塊應用類似的規則,以避免命名衝突,你應該做這樣了。
在您當前的情況下,您可以簡單地將__init__.py
和您的模塊放在包目錄中,然後在所有源文件上進行字符串替換以應用模塊的新佈置。
我希望這會有所幫助。
嗯,這可能工作。讓我思考這個,回到喲。 – marcog
使用'import xx as yy'?但通過查看你的代表,我會說你已經試過了。 –
你能給我們一個使用場景,比如文件結構嗎?如果你有自己的應用程序,可以導入產品模塊和產品包,你可以使用相對導入來區分這兩者。 – OozeMeister
它們在不同的目錄中,都在python路徑中。 'import xx as yy'將不起作用,因爲python路徑中首先出現的路徑是將要導入的路徑。 @OozeMeister目錄結構是:$ ROOT/product和$ ROOT/3rdparty/product,其中$ ROOT和$ ROOT/3rdparty都在python路徑中。 – marcog