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-scripts
y saber que no se pueden importar utilizando un enfoque de espacio de nombres de paquete normal. O se puede nombrar un solo scriptstop-website.py
para un efecto similar. Cualquiera de estos podría importarse a través derunpy
otros métodos, por supuesto, pero esto ayuda a evitar algunos errores comunes.cgi-bin
carpeta (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-code
que, 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 somename
está creando un objeto de módulo con identificadorsomename
(para que luego pueda usarlo con, por ejemplosomename.funcname
). Por supuesto,module-name
no 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-binary
está instalado. No tengo idea de cómo incluirlo.El problema es que
python-code
no es un identificador. El analizador ve esto comopython
menoscode
. 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-code
no 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.py
extensión. Después de mirar el documento para obtener una descripción.py
, terminé con esto:Creó un nuevo archivo
python-codec
en la primera ejecución.fuente