我想导入 foo-bar.py。这有效:
foobar = __import__("foo-bar")
这不会:
from "foo-bar" import *
我的问题:有什么方法可以使用上述格式,即from "foo-bar" import *
导入其中包含的模块-
?
从 Python 3.1 开始,您可以使用 importlib :
import importlib
foobar = importlib.import_module("foo-bar")
你不能。 foo-bar
不是标识符。将文件重命名为foo_bar.py
编辑:如果import
不是您的目标(如:您不在乎发生了什么sys.modules
,您不需要它自己导入),只需将所有文件的全局变量放入您自己的范围内,您可以使用execfile
# contents of foo-bar.py
baz = 'quux'
>>> execfile('foo-bar.py')
>>> baz
'quux'
>>>
如果您无法重命名模块以匹配 Python 命名约定,请创建一个新模块以充当中介:
---- 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 *
就像其他人说你不能在 python 命名中使用“-”一样,有很多解决方法,如果你必须从一个路径添加多个模块,一个这样的解决方法会很有用sys.path
例如,如果您的结构是这样的:
foo-bar
├── barfoo.py
└── __init__.py
import sys
sys.path.append('foo-bar')
import barfoo
在 Python 3.6 中我invalid syntax
直接遇到了同样的问题“”
import 'jaro-winkler' as jw
使用时说“ No module named 'jaro-winkler'
”:
jw = __import__('jaro-winkler')
和importlib.import_module()
一样。
最后我使用 pip 卸载jaro-winkler
模块...仅供参考