Quiero importar foo-bar.py. Esto funciona:
foobar = __import__("foo-bar")
Esto no lo hace:
from "foo-bar" import *
Mi pregunta: ¿Hay alguna forma en que pueda usar el formato anterior, es decir, from "foo-bar" import *
para importar un módulo que tiene un -
?
Respuestas:
no puedes
foo-bar
No es un identificador. cambiar el nombre del archivo afoo_bar.py
Editar: si
import
no es su objetivo (como en: no le importa lo que sucedesys.modules
, no necesita que se importe solo), solo puede obtener todos los globales del archivo en su propio alcance, puede usarexecfile
fuente
execfile(fn)
usoexec(open(fn).read())
También hay un paquete importlib.Si no puede cambiar el nombre del módulo para que coincida con las convenciones de nomenclatura de Python, cree un nuevo módulo para que actúe como intermediario:
fuente
foo_proxy.py
archivo, asignar la salida de__import__(...)
asys.modules['foo_proxy']
. En realidad, no hagas eso, es una idea terrible.A partir de Python 3.1, puede usar importlib:
( https://docs.python.org/3/library/importlib.html )
fuente
Si no puede cambiar el nombre del archivo original, también puede usar un enlace simbólico:
Entonces puedes simplemente:
fuente
Como otro dijo que no puede usar el "-" en la denominación de Python, hay muchas soluciones alternativas, una de ellas sería útil si tuviera que agregar múltiples módulos desde una ruta.
sys.path
Por ejemplo, si su estructura es así:
fuente