2011-09-28 53 views
45

我有現有的Python模塊名稱中帶有一個破折號,foo-bar.pyPython模塊用破折號或連字符( - )的名稱中

更改模塊名稱是東西,我寧願避免因爲模塊是共享的,我將不得不追逐所有使用它的地方,這樣我的特殊情況纔會起作用。

有沒有辦法加載名稱中包含通常被禁止的' - '的模塊? (我明白這不是最佳實踐,但是對於這種情況,我不想重新設計和測試更多的應用程序,我也不認爲我的公司主人會贊同我的服用方式執行此類更改的時間。)

+5

你不能只是做一個發現,在檔案在你的IDE和替換所有'FOO,bar's與'foobar'或其他?那有多難? – agf

+2

http://stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them – BenH

+2

這個答案特別是:http:// stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them/762693#762693 – BenH

回答

64

您可以使用__import__()來執行此操作。例如:

foobar = __import__("foo-bar") 

但是你真的應該改名模塊來代替。這樣可以避免模塊的文件名與程序中使用的標識符不同的混淆。

+3

謝謝。我確實知道應該在任何可行的地方遵循公約。我將在部門代碼審查期間提出這個具體問題。 –

+13

如何導入一個子模塊使用這種方法? – Fydo

25

我知道這個問題已經回答了滿意的提問者,但這裏是另一個答案,我認爲有一些優點使用__import__()

import importlib 
mod = importlib.import_module("path.to.my-module") 
# mod.yourmethod() 

根據文檔:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python." 

Python 2.7 +僅

+2

我正在尋找如何做到這一點,你的答案比舊的答案適用於我的情況更好。如果你看到已有人的獨特答案,將其添加爲新的答案,這樣一來,像我這樣的人就可以在一個地方找到所有相關信息,這總是很好。 –

相關問題