Как импортировать модуль, когда в имени модуля есть "-" тире или дефис?
Я хочу импортировать foo-bar.py. Это работает:
foobar = __import__("foo-bar")
Это не означает:
from "foo-bar" import *
Мой вопрос: Можно ли использовать этот формат, т.е. from "foo-bar" import *
, чтобы импортировать модуль с -
в нем?
Ответы
Ответ 1
вы не можете. foo-bar
не является идентификатором. переименуйте файл в foo_bar.py
Изменить: Если import
не является вашей целью (как в: вам не важно, что происходит с sys.modules
, вам не нужно его импортировать), просто получая все файловых глобалов в вашу собственную область действия, вы можете использовать execfile
# contents of foo-bar.py
baz = 'quux'
>>> execfile('foo-bar.py')
>>> baz
'quux'
>>>
Ответ 2
Если вы не можете переименовать модуль в соответствии с соглашениями об именах Python, создайте новый модуль для работы в качестве посредника:
---- foo_proxy.py ----
tmp = __import__('foo-bar')
globals().update(vars(tmp))
---- main.py ----
from foo_proxy import *
Ответ 3
Если вы не можете переименовать исходный файл, вы также можете использовать символическую ссылку:
ln -s foo-bar.py foo_bar.py
Тогда вы можете просто:
from foo_bar import *