Básicamente cuando tengo un archivo python como:
python-code.py
y use:
import (python-code)
El intérprete me da error de sintaxis.
¿Alguna idea de cómo arreglarlo? ¿Son ilegales los guiones en los nombres de archivos de Python?
Debe consultar PEP 8 , la Guía de estilo para el código Python:
Nombres de paquetes y módulos Los módulos deben tener nombres cortos en minúsculas. Los guiones bajos se pueden usar en el nombre del módulo si mejora la legibilidad. Los paquetes de Python también deben tener nombres cortos en minúsculas, aunque se desaconseja el uso de guiones bajos.
Dado que los nombres de los módulos se asignan a los nombres de los archivos, y algunos sistemas de archivos no distinguen entre mayúsculas y minúsculas y truncan los nombres largos, es importante que los nombres de los módulos se elijan como bastante cortos; esto no será un problema en Unix, pero puede ser un problema problema cuando el código se transporta a versiones anteriores de Mac o Windows, o DOS.
En otras palabras: cambie el nombre de su archivo :)
ops-scriptsy saber que no se pueden importar utilizando un enfoque de espacio de nombres de paquete normal. O se puede nombrar un solo scriptstop-website.pypara un efecto similar. Cualquiera de estos podría importarse a través derunpyotros métodos, por supuesto, pero esto ayuda a evitar algunos errores comunes.cgi-bincarpeta (haciendo unitttests en ellos), que es bastante estándar afaik. A menos que tenga un caso raro como este, definitivamente cambie el nombre de su módulo si tiene control sobre él.Otra cosa a tener en cuenta en su código es que importar no es una función. Entonces
import(python-code)debería ser loimport python-codeque, como algunos ya han mencionado, se interpreta como "importar Python menos código", no lo que pretendía. Si realmente necesita importar un archivo con un guión en su nombre, puede hacer lo siguiente:Pero, como también se mencionó anteriormente, esto no se recomienda realmente. Debes cambiar el nombre del archivo si es algo que controlas.
fuente
TLDR
Los guiones no son ilegales, pero no debe usarlos por 3 razones:
Si definitivamente necesita importar un nombre de archivo con un guión, la sintaxis especial es esta:
¿Curioso por qué necesitamos una sintaxis especial?
La razón de la sintaxis especial es que cuando escribe
import somenameestá creando un objeto de módulo con identificadorsomename(para que luego pueda usarlo con, por ejemplosomename.funcname). Por supuesto,module-nameno es un identificador válido y, por lo tanto, la sintaxis especial que da uno válido.¿No entiendes por qué el nombre del módulo no es un identificador válido?
No te preocupes, yo tampoco. He aquí un consejo para ayudarle a: Mira esta línea de pitón:
x=var1-var2. ¿Ves una resta en el lado derecho de la tarea o un nombre de variable con un guión?PD
No hay nada original en mi respuesta, excepto incluir lo que considero que es la información más relevante de todas las otras respuestas en un solo lugar.
fuente
psycopg2_binary = import_module('psycopg2-binary'). Error =>ModuleNotFoundError: No module named 'psycopg2-binary'. Peropsycopg2-binaryestá instalado. No tengo idea de cómo incluirlo.El problema es que
python-codeno es un identificador. El analizador ve esto comopythonmenoscode. Por supuesto, esto no hará lo que estás pidiendo. Deberá usar un nombre de archivo que también sea un identificador válido de Python. Intenta reemplazarlo-con un guión bajo.fuente
Probablemente podría importarlo a través de algún
__import__truco, pero si aún no sabe cómo, no debería. Los nombres de los módulos de Python deben ser nombres de variables válidos ("identificadores"); eso significa que si tiene un módulofoo_bar, puede usarlo desde Python (print foo_bar). No podría hacerlo con un nombre extraño (print foo-bar-> error de sintaxis).fuente
En Python 3 use import_module :
Más generalmente,
fuente
Aunque el nombre correcto de los archivos es el mejor curso, si
python-codeno está bajo nuestro control, un pirateo__import__es mejor que copiar, renombrar o jugar con el código de otros autores. Sin embargo, lo intenté y no funcionó a menos que cambie el nombre del archivo agregando la.pyextensión. Después de mirar el documento para obtener una descripción.py, terminé con esto:Creó un nuevo archivo
python-codecen la primera ejecución.fuente