Я хочу импортировать foo-bar.py. Это работает:
foobar = __import__("foo-bar")
Это не:
from "foo-bar" import *
Мой вопрос: есть ли способ, которым я могу использовать вышеуказанный формат, т.е. from "foo-bar" import *
импортировать модуль, в котором есть -
?
Ответы:
ты не можешь
foo-bar
не является идентификатором. переименовать файл вfoo_bar.py
Изменить: Если
import
не ваша цель (как в: вам все равно, что происходитsys.modules
, вам не нужно импортировать саму себя), просто перенесите все глобальные переменные файла в свою область видимости, вы можете использоватьexecfile
источник
execfile(fn)
использованияexec(open(fn).read())
также есть пакет importlib.Если вы не можете переименовать модуль в соответствии с соглашениями об именах Python, создайте новый модуль, который будет выступать в качестве посредника:
источник
foo_proxy.py
файла, назначив вывод__import__(...)
дляsys.modules['foo_proxy']
. На самом деле, не делай этого, это ужасная идея.Начиная с Python 3.1, вы можете использовать importlib:
( https://docs.python.org/3/library/importlib.html )
источник
Если вы не можете переименовать исходный файл, вы также можете использовать символическую ссылку:
Тогда вы можете просто:
источник
Как и другие говорили, что вы не можете использовать «-» в именовании Python, есть много обходных путей, один из таких обходных путей, который будет полезен, если вам нужно добавить несколько модулей из пути, использует
sys.path
Например, если ваша структура такая:
источник