Tengo una serie de scripts que usan definiciones comunes. ¿Cómo los divido en múltiples archivos? Además, la aplicación no se puede instalar de ninguna manera en mi escenario; debe ser posible tener un número arbitrario de versiones ejecutándose simultáneamente y debe funcionar sin derechos de superusuario. Las soluciones que hemos llegado con son:Cómo modularizar una aplicación de Python
- código duplicado en cada guión . Desordenado, y probablemente el peor esquema .
- Poner todos los scripts y código común en un solo directorio, y uso
from . import
para cargarlos. La desventaja de este enfoque es que Me gustaría poner mis bibliotecas en otro directorio que las aplicaciones. - poner el código común en su propio directorio, escribir
__init__.py
que importa todos los submódulos y finalmente utilizarfrom . import
para cargarlos. Mantiene código organizado, pero es un poco sobrecarga mantener__init__.py
y calificar nombres. - Agregue el directorio de la biblioteca a
sys.path
yimport
. tiendo a esto, pero no estoy seguro de si jugando consys.path
es el código agradable. - carga utilizando
execfile
(exec
en Python 3). combina las ventajas de los dos enfoques anteriores : Sólo una línea de por módulo es necesario, y puedo usar un dedicado. Por otro lado, este evade el concepto de módulo python y polutes el espacio de nombres global. - escritura e instalar un módulo usando
distutils
. Este instala la biblioteca para todos los scripts de Python y necesita derechos de superusuario e impactos otras aplicaciones y no es por tanto aplicable en mi caso.
¿Cuál es el mejor método?
+1: Simplemente configure la variable de entorno PYTHONPATH. Simple, ordenado, portátil, limpio. Funciona en todas partes. –
@ S.Lott: funciona en todos los lugares donde tenga un entorno de shell. Además, necesitas un script de inicio para esto, lo que complica las cosas – phihag
@phihag: en realidad no necesitas un script de inicio. PYTHONPATH se puede configurar en .bashrc o en su configuración de Windows. –