如何在模块名称中带有' – '短划线或连字符时导入模块?

我想导入foo-bar.py。 这工作:

foobar = __import__("foo-bar") 

这不:

 from "foo-bar" import * 

我的问题:有没有什么办法,我可以使用上述格式,即from "foo-bar" import *导入一个模块,它有一个?

你不能。 foo-bar不是一个标识符。 将该文件重命名为foo_bar.py

编辑:如果import不是你的目标(如:你不关心sys.modules发生了什么,你不需要导入它自己),只需要将所有的文件全局变成你自己的范围,你可以使用execfile

 # contents of foo-bar.py baz = 'quux' 
 >>> execfile('foo-bar.py') >>> baz 'quux' >>> 

如果您不能重命名模块以匹配Python命名约定,请创build一个新模块充当中介:

  ---- foo_proxy.py ---- tmp = __import__('foo-bar') globals().update(vars(tmp)) ---- main.py ---- from foo_proxy import * 

如果您不能重命名原始文件,也可以使用符号链接:

 ln -s foo-bar.py foo_bar.py 

那么你可以只是:

 from foo_bar import *