2014-06-20 200 views
2

我有一個以我正在使用的產品命名的模塊,而某些第三方爲我們產品的API使用相同的模塊名稱構建了一個包。在試圖使用後者時,模塊名稱會相互衝突。如果我更改API包的名稱,我不會輕易做出更改並向上遊返回。改變我們的模塊名稱將是一團糟。Python模塊名稱衝突

這聽起來像是一個瘋狂的問題。現在我們通過向API模塊添加一個「父」模塊來解決它。有沒有更好的解決方案?

+2

使用'import xx as yy'?但通過查看你的代表,我會說你已經試過了。 –

+1

你能給我們一個使用場景,比如文件結構嗎?如果你有自己的應用程序,可以導入產品模塊和產品包,你可以使用相對導入來區分這兩者。 – OozeMeister

+0

它們在不同的目錄中,都在python路徑中。 'import xx as yy'將不起作用,因爲python路徑中首先出現的路徑是將要導入的路徑。 @OozeMeister目錄結構是:$ ROOT/product和$ ROOT/3rdparty/product,其中$ ROOT和$ ROOT/3rdparty都在python路徑中。 – marcog

回答

1

你應該換你自己的模塊在一個封裝中這樣說:

  1. 創建一個目錄(如mypylib
  2. 放在目錄命名爲__init__.py一個空文件
  3. 把你的模塊實現文件(如mymod.py)在DIR
  4. 假設有一個名爲submod實現子模塊mymod.py

當你想使用submod,你應該這樣做:

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "mypylib")) 
from mypylib.mymod import submod 

我想大多數第三方模塊應用類似的規則,以避免命名衝突,你應該做這樣了。

在您當前的情況下,您可以簡單地將__init__.py和您的模塊放在包目錄中,然後在所有源文件上進行字符串替換以應用模塊的新佈置。

我希望這會有所幫助。

+0

嗯,這可能工作。讓我思考這個,回到喲。 – marcog