Python模块的名称中带有短划线或连字符( – )

我有一个名为foo-bar.py的破折号的现有python模块

改变模块名称是我宁愿避免的,因为模块是共享的,我将不得不追逐所有使用它的地方,以便我的特殊情况将起作用。

有没有办法加载名称中包含通常被禁止的' – '的模块?

(我明白这不是最佳做法,但是对于这种情况,我不想重新devise和testing更多的应用程序,我也不认为我的公司主人会赞成我花时间去实施这样的改变。)

你可以使用__import__()来做到这__import__() 。 例如:

 foobar = __import__("foo-bar") 

但是你真的应该重新命名模块。 这样,您可以避免模块的文件名与程序中使用的标识符不同的混淆。

我知道这个问题已经回答了提问者的满意,但是这里有另外一个答案,我认为上面有一些优点使用__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 +