如何在模块名称中带有' – '短划线或连字符时导入模块?
我想导入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 *