Eu quero importar foo-bar.py. Isso funciona:
foobar = __import__("foo-bar")
Isto não:
from "foo-bar" import *
Minha pergunta: Existe alguma maneira de usar o formato acima, ou seja, from "foo-bar" import *
para importar um módulo que contenha um -
?
Respostas:
você não pode.
foo-bar
não é um identificador. renomeie o arquivo parafoo_bar.py
Edit: Se
import
não é o seu objetivo (como em: você não se importa o que acontece comsys.modules
, você não precisa dele para importar-se), apenas recebendo todos globals do arquivo em seu próprio escopo, você pode usarexecfile
fonte
execfile(fn)
usarexec(open(fn).read())
Também há o pacote importlib.Se você não pode renomear o módulo para corresponder às convenções de nomenclatura do Python, crie um novo módulo para atuar como intermediário:
fonte
foo_proxy.py
arquivo, atribua a saída de__import__(...)
parasys.modules['foo_proxy']
. Na verdade, não faça isso, é uma péssima ideia.A partir do Python 3.1, você pode usar importlib:
( https://docs.python.org/3/library/importlib.html )
fonte
Se você não pode renomear o arquivo original, também pode usar um link simbólico:
Então você pode apenas:
fonte
Como outros disseram que você não pode usar o "-" na nomeação python, existem muitas soluções alternativas, uma solução alternativa que seria útil se você tivesse que adicionar vários módulos de um caminho usando
sys.path
Por exemplo, se sua estrutura é assim:
fonte