Básicamente cuando tengo un archivo de python como:

python-code.py

y uso:

import (python-code)

el intérprete me da error de sintaxis.

Alguna idea de cómo solucionarlo? Son guiones ilegal en python nombres de archivo?

InformationsquelleAutor Joan Venge | 2009-04-17

7 Comentarios

  1. 147

    Usted debe comprobar fuera de PEP 8, la Guía de Estilo de Python de Código:

    Paquete y los Nombres de los módulos los Módulos deben tener a corto, todos los nombres en minúsculas. Pone de relieve puede ser utilizado en el nombre del módulo, si mejora la legibilidad. Los paquetes de Python también debe tener a corto, todos los nombres en minúsculas, aunque el uso de guiones, no es aconsejable.

    Desde el módulo de nombres que se asignan a los nombres de archivo, y algunos sistemas de archivos son sensibles a mayúsculas y minúsculas y trunca los nombres largos, es importante que los nombres de módulo de ser elegido para ser bastante corto-esto no será un problema en Unix, pero puede ser un problema cuando el código es transportado a la edad de Mac o de las versiones de Windows, o DOS.

    En otras palabras: cambiar el nombre el archivo 🙂

    • el problema no tiene nada que ver con el estilo, es un la sintaxis de error
    • Como se muestra a continuación, es posible que aún tiene un archivo con este nombre, por lo que la guía de estilo es muy relevante.
    • Puede ser muy útil el uso de guiones en el directorio de Python y nombres de archivo cuando desee explícitamente para impedir las importaciones. Por ejemplo, en (digamos) un proyecto de Django, usted puede tener scripts escritos en Python que no debe ser direccionable como aplicaciones. Usted puede poner en una carpeta como ops-scripts y saben que no se pueden importar un paquete de espacio de nombres de enfoque. O una secuencia de comandos podría ser llamado stop-website.py para un efecto similar. Cualquiera de estos puede todavía ser importados a través de runpy y algunos otros métodos de curso, pero esto ayuda a evitar algunos errores comunes.
    • Cambiar el nombre de un módulo puede ser problemático, especialmente si usted está confiando en otra norma. En mi caso, estoy usando python archivos cgi en el cgi-bin carpeta (haciendo unitttests de ellos), que es bastante estándar afaik. A menos que usted tenga un caso raro como este, definitivamente cambiar el nombre de tu módulo, si se tiene el control sobre él.
    • Acabo de descubrir que PyDev permitirá directorio de nombres con guiones, pero no se muestran las clases y/o variables internas en el .py archivos que están contenidos en ese directorio.
  2. 113

    Una cosa a tener en cuenta en el código es que la importación no es una función. Así import(python-code) debe ser import python-code que, como algunos ya lo han mencionado, se interpreta como «importación de python menos código», no lo que se pretendía. Si usted realmente necesita para importar un archivo con un guión en su nombre, usted puede hacer lo siguiente::

    python_code = __import__('python-code')

    Pero, como también se ha mencionado, esto no es realmente recomendable. Usted debe cambiar el nombre de archivo si es algo que se puede controlar.

    • ¿tiene usted un ejemplo de la utilización de importación lib con un guión archivo? He intentado y han fracasado.
    • importlib.import_module(‘un.b.módulo 1’) debería funcionar. Si su import_module no funciona, creo que una normal de importación también no funciona.
  3. 46

    TLDR

    Guiones son no ilegal, pero usted no debe usar por 3 razones:

    1. Necesita una sintaxis especial para importar archivos con guiones
    2. Nadie espera que se de el nombre de un módulo con un guión
    3. Es en contra de las recomendaciones de la La Guía De Estilo De Python

    Si usted definitivamente necesidad de importación de un nombre de archivo con un toque especial sintaxis es esta:

    module_name = __import__('module-name')

    Curiosidad acerca de por qué necesitamos una sintaxis especial?

    La razón por la sintaxis especial es que cuando escribes import somename va a crear un módulo de objeto con el identificador somename (así que usted puede utilizarla más tarde, por ejemplo, con somename.funcname). Por supuesto module-name no es un identificador válido y, por tanto, la sintaxis especial que le da una válida.

    Usted no consigue el por qué de módulo nombre no es válido identificador?

    No te preocupes, yo tampoco. He aquí un consejo para ayudarle a: Mira esto de python línea: x=var1-var2. ¿Ve usted una sustracción en el lado derecho de la asignación o un nombre de variable con un guión?

    PS

    Nada original en mi respuesta, excepto incluyendo lo que yo consideraba el más relevante de los bits de información de todas las otras respuestas en un solo lugar

    • Estoy tratando de utilizar este importación de un pip paquete con un guión en él. psycopg2_binary = import_module('psycopg2-binary'). Error => ModuleNotFoundError: No module named 'psycopg2-binary'. Pero psycopg2-binary está instalado. Ni idea de cómo incluirlo.
    • Tal vez es un camino problema. Mira chrisyeh96.github.io/2017/08/08/…
  4. 28

    El problema es que python-code no es un identificador. El analizador ve esto como python menos code. Por supuesto, esto no quiere hacer lo que le estás pidiendo. Usted tendrá que utilizar un nombre de archivo que también es válida para python identificador. Trate de reemplazar la - con un carácter de subrayado.

    • +1. Nunca pensé que el nombre del archivo de código fuente de Python debe ser un identificador válido, causa el nombre de archivo se utiliza para referirse al objeto de módulo.
  5. 4

    Que probablemente podría importar a través de algunos __import__ hack, pero si no sabes cómo, no debería. Módulo de Python nombres deben ser válidos los nombres de las variables («identificadores») – que significa que si usted tiene un módulo de foo_bar, se puede utilizar desde dentro de Python (print foo_bar). Usted no será capaz de hacerlo con un nombre raro (print foo-bar -> error de sintaxis).

  6. 3

    En Python 3 uso import_module:

    from importlib import import_module
    python_code = import_module('python-code')

    De manera más general,

    import_module('package.subpackage.module')
  7. 0

    A pesar de la correcta nomenclatura de archivos es el mejor curso, si python-code no está bajo nuestro control, un hack usando __import__ es mejor que la copia, cambio de nombre, o de lo contrario vas a jugar con los otros autores de código. Sin embargo, he intentado y no funciona a menos que cambió el nombre del archivo de la adición de la .py extensión. Después de mirar el doc derivar cómo obtener una descripción para .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()

    Se crea un nuevo archivo python-codec en la primera ejecución.

Dejar respuesta

Please enter your comment!
Please enter your name here