Как импортировать модуль, когда в имени модуля есть "-" тире или дефис?

Я хочу импортировать 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 *