Básicamente, hay un archivo llamado 8puzzle.py
y quiero importar el archivo a otro archivo (en la misma carpeta y no puedo cambiar el nombre del archivo como se proporciona el archivo). ¿Hay alguna forma de hacer esto en Python? Intenté de la manera habitual from 8puzzle import *
, me da un error.
El error es:
>>> import 8puzzle
File "<input>", line 1
import 8puzzle
^
SyntaxError: invalid syntax
>>>
8puzzle.py
depuzzle8.py
y el usoimport puzzle8
.Respuestas:
Podrías hacerlo
puzzle = __import__('8puzzle')
Problema muy interesante. Recordaré no nombrar nada con un número.
Si lo desea
import *
, debe consultar esta pregunta y respuesta .fuente
Las respuestas anteriores son correctas, pero por ahora, la forma recomendada es usar la
import_module
función:__import__
no se recomienda ahora.fuente
an_imported_file = importlib.import_module('13_file')
, entonces no puedofrom an_imported_file import var_x
. ¿Hay algo que se pueda hacer para lograrlo?/usr/local/bin/python3.7 "/Users/constan/Desktop/2_COData/1_PYTHON /CODEX/13_Spacy/children.py" Traceback (most recent call last): File "/Users/constan/Desktop/2_COData/1_PYTHON /CODEX/13_Spacy/children.py", line 7, in <module> from an_imported_file import var_x ModuleNotFoundError: No module named 'an_imported_file'
No use la
.py
extensión en sus importaciones.¿
from 8puzzle import *
Funciona?Por lo que vale,
from x import *
no es un patrón de Python preferido, ya que sangra el espacio de nombres de ese módulo en su contexto actual.En general, intente importar cosas que desee específicamente de ese módulo. Se puede importar cualquier global del otro módulo.
por ejemplo, si lo ha hecho
8puzzle.foo
, podría hacer desde 8puzzleEditar:
Si bien mi
.py
mensaje es correcto, no es suficiente.La
__import__('8puzzle')
sugerencia del otro cartel es correcta. Sin embargo, recomiendo encarecidamente evitar este patrón .Por un lado, está reservado un método Python interno y privado. Básicamente, está rompiendo las suposiciones fundamentales de lo que significa poder importar un módulo. Simplemente cambiar el nombre del archivo por otro, como
puzzle8
, solucionará esto.Esto frustrará muchísimo a los programadores de Python experimentados que esperan saber cuáles son sus importaciones en la parte superior y esperan que el código (intente) ajustarse a PEP8 .
fuente
from 8puzzle import *
editar mi pregunta original. Y no funciona como dijo mvanveen.