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?
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?
Respuestas:
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 script stop-website.py
para un efecto similar. Cualquiera de estos podría importarse a través de runpy
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 lo import 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:
python_code = __import__('python-code')
Pero, como también se mencionó anteriormente, esto no se recomienda realmente. Debes cambiar el nombre del archivo si es algo que controlas.
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:
module_name = __import__('module-name')
¿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 identificador somename
(para que luego pueda usarlo con, por ejemplo somename.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.
psycopg2_binary = import_module('psycopg2-binary')
. Error => ModuleNotFoundError: No module named 'psycopg2-binary'
. Pero psycopg2-binary
está instalado. No tengo idea de cómo incluirlo.
El problema es que python-code
no es un identificador. El analizador ve esto como python
menos code
. 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.
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ódulo foo_bar
, puede usarlo desde Python ( print foo_bar
). No podría hacerlo con un nombre extraño ( print foo-bar
-> error de sintaxis).
En Python 3 use import_module :
from importlib import import_module
python_code = import_module('python-code')
Más generalmente,
import_module('package.subpackage.module')
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:
import imp
try:
python_code_file = open("python-code")
python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
python_code_file.close()
Creó un nuevo archivo python-codec
en la primera ejecución.