2009-03-30 11 views
5

Digamos que tengo proyectos x e y en directorios hermanos: projects/x y projects/y.
Hay algunos funcs de utilidad comunes a ambos proyectos en myutils.py y algunas cosas de db en mydbstuff.py, etc.
Esas cosas comunes menores, por lo que no quiero crear un solo paquete para ellas. surgen¿Cuál es la forma pitónica de compartir archivos comunes en múltiples proyectos?

preguntas sobre el paradero de estos archivos, las posibles modificaciones en PYTHONPATH, forma correcta de importar, etc.

¿Cuál es el 'camino Pythonic' para utilizar este tipo de archivos?

Respuesta

9

La manera pitónica es crear un único paquete adicional para ellos.

¿Por qué no quieres crear un paquete? Puede distribuir este paquete con ambos proyectos, y el efecto sería el mismo.

Nunca lo hará bien para todos los escenarios de instalación y plataformas si lo hace manipulando con PYTHONPATH y las importaciones personalizadas.

Simplemente cree otro paquete y hágalo de inmediato.

+0

+1: Evite modificar sys.path dinámicamente; usar paquetes o ajuste externo PYTHONPATH. –

1

Puede agregar la ruta a los archivos compartidos a sys.path ya sea directamente por sys.path.append(pathToShared) o definiendo .pth archivos y añadirlos a la site.addsitedir. Los archivos de ruta (.pth) son archivos de texto simples con una ruta en cada línea.

0

Estoy de acuerdo con 'crear un paquete'.

Si no puede hacer eso, ¿qué le parece usar enlaces/uniones simbólicas (ln -s en Linux, linkd en Windows)?

0

Aconsejo usar setuptools para esto. Le permite establecer dependencias para que pueda asegurarse de que todos estos paquetes/módulos individuales estén en sys.path antes de instalar un paquete. Si desea instalar algo que sea solo un único archivo fuente, tiene soporte para generar automágicamente un setup.py simple para él. Esto puede ser útil si decide no seguir la ruta del paquete.

Si planea implementar esto en varias computadoras, normalmente estableceré un servidor web con todas las dependencias que planeo usar para que pueda instalarlas automáticamente.

También he oído cosas buenas sobre paver, pero no las he usado.

Cuestiones relacionadas