¿Cuáles son los requisitos para nombrar módulos de python?

He estado leyendo Learn Python The Hard Way como una especie de actualización. Sin embargo, en lugar de nombrar cada ejemplo ex # .py (donde # es el número del ejercicio), sin embargo, los he estado llamando # .py. Esto funcionó bien hasta que llegué al Ejercicio 25 , que requiere que importe un módulo que acaba de crear a través del intérprete. Cuando bash esto sucede lo siguiente:

>>> import 25 File "", line 1 import 25 ^ SyntaxError: invalid syntax 

Intenté cambiar el nombre del archivo a ex25.py y luego funcionó como se esperaba (>>> importar ex25). Lo que me pregunto es ¿cuáles son los requisitos de nombres para los módulos de Python? Eché un vistazo a la documentación oficial aquí, pero no vi ninguna restricción.

Edición: las tres respuestas de iCodez, Pavel y BrenBarn brindan buenos recursos y ayudan a responder diferentes aspectos de esta pregunta. Terminé eligiendo la respuesta de iCodez como la correcta simplemente porque era la primera respuesta.

Los módulos que importe con la statement de import deben seguir las mismas reglas de nomenclatura establecidas para los nombres de variables (identificadores). Específicamente, deben comenzar con una letra 1 o un guión bajo y, luego, estar compuestos en su totalidad por letras, dígitos 2 y / o guiones bajos.

También te puede interesar lo que PEP 8 , la guía de estilo oficial para el código Python, tiene que decir sobre los nombres de los módulos:

Los módulos deben tener nombres cortos, todo 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.


1 Las letras son los caracteres ASCII AZ y az .
2 dígitos son los caracteres ASCII 0-9 .

Las reglas explícitas para lo que se permite que sea un identificador válido (variable, nombre del módulo, etc.) se pueden encontrar aquí: https://docs.python.org/dev/reference/lexical_analysis.html#identifiers

En tu caso, esta es la frase relevante:

Dentro del rango ASCII (U + 0001..U + 007F), los caracteres válidos para los identificadores son los mismos que en Python 2.x: las letras mayúsculas y minúsculas de la A a la Z, el guión bajo _ y, excepto el primer carácter , Los dígitos del 0 al 9.

Estrictamente hablando, puedes nombrar un archivo de Python como desees. Sin embargo, para importarlo usando la statement de import , el nombre de archivo debe ser un identificador de Python válido, algo que se pueda usar como nombre de variable. Eso significa que debe usar solo caracteres alfanuméricos y guiones bajos, y no comenzar con un dígito. Esto se debe a que la gramática de la statement de import requiere que el nombre del módulo sea un identificador.

Es por eso que no vio el problema hasta que llegó a un ejercicio que requiere importación. Puede ejecutar un script de Python con un nombre numérico desde la línea de comandos con python 123.py , pero no podrá importar ese módulo.