2009-11-30 18 views
10

¿Cuál sería la mejor estrategia de estructura de directorios para compartir un módulo de utilidades en mis proyectos Python? Como los módulos comunes se actualizarían con nuevas funciones, no me gustaría ponerlos en el directorio de instalación de python.Compartiendo módulos de utilidades en proyectos Python

project1/ 
project2/ 
sharedUtils/ 

Desde project1 No puedo usar "import .. \ sharedUtils", ¿hay alguna otra manera? Yo prefiero no codificar los "sharedUtils" ubicación

Gracias de antemano

Respuesta

6

Hacer un paquete independiente separada? ¿Y ponerlo en los/site-packages de tu instalación de python?

También hay mi favorito personal cuando se trata de modo de desarrollo: uso de enlaces simbólicos y/o archivos *.pth.

+3

Uso interesante de los signos de interrogación ... – tgray

+1

Dado que hay muchas posibilidades ... Uso el "enfoque de Sócrates": intente hacer que las personas reflexionen sobre las posibilidades. – jldupont

+2

¿Cómo se maneja el control de revisión de esta manera? Cuando compromete su proyecto, ¿también va manualmente al directorio de paquetes de sitio y hace lo mismo? –

5

Supongamos que tiene sharedUtils/utils_foo y sharedUtils/utils_bar. Se podría editar su PYTHONPATH incluir sharedUtils, a continuación, importarlos en project1 y project2 usando

import utils_foo 
import utils_bar 
etc. 

En Linux se puede hacer eso modificando el archivo ~/.profile con algo como esto:

PYTHONPATH=/path/to/sharedUtils:/other/paths 
export PYTHONPATH 

Uso la variable de entorno PYTHONPATH afecta a los directorios que python busca al buscar módulos. Como cada usuario puede establecer su propia PYTHONPATH, esta solución es buena para proyectos personales.

si desea que todos los usuarios de la máquina para poder importar módulos en sharedUtils, entonces se puede lograr esto mediante el uso de un archivo .pth. Exactamente donde pones el archivo .pth puede depender de tu distribución python. Ver http://bob.pythonmac.org/archives/2005/02/06/using-pth-files-for-python-development/

+0

Lo siento pero no conozco a Python, ¿podría codificar la ruta completa en PYTHONPATH o usar "../"? –

+0

@iKarampa, no hay problema. PYTHONPATH requiere una ruta completa (absoluta). – unutbu

+0

Cuando distribuye su archivo, necesita de alguna manera concatenar todas las utilidades en un directorio y las importaciones estándar funcionarán normalmente. ¡Ok lo tengo! Gracias –

4

estructura de directorios:

project1/foo.py 
sharedUtils/bar.py 

Con los directorios a medida que los has demostrado, desde foo.py dentro del directorio project1 puede agregar la ruta relativa a sharedUtils de la siguiente manera:

import sys 
sys.path.append("../sharedUtils") 
import bar 

Esto evita la codificación rígida de una ruta C:/../sharedUtils, y funcionará siempre que no cambie la estructura del directorio.

Cuestiones relacionadas