Pregunta

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

project1/
project2/
sharedUtils/

Desde el proyecto 1 no puedo usar "import .. \ sharedUtils", ¿hay alguna otra manera? Prefiero no codificar los '' sharedUtils '' ubicación

Gracias de antemano

¿Fue útil?

Solución

¿Hacer un paquete independiente por separado? ¿Y ponerlo en los paquetes / sitio de su instalación de Python?

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

Otros consejos

Suponga que tiene sharedUtils / utils_foo y sharedUtils / utils_bar . Puede editar su PYTHONPATH para incluir sharedUtils , luego importarlos en project1 y project2 usando

import utils_foo
import utils_bar
etc.

En Linux puedes hacer eso editando ~ / .profile con algo como esto:

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

El uso de la variable de entorno PYTHONPATH afecta los directorios que Python busca cuando busca módulos. Dado que cada usuario puede configurar su propio PYTHONPATH, esta solución es buena para proyectos personales.

Si desea que todos los usuarios de la máquina puedan importar módulos en sharedUtils , entonces puede lograr esto utilizando un archivo .pth . El lugar exacto donde coloca el archivo .pth puede depender de su distribución de Python. Ver http: //bob.pythonmac. org / archives / 2005/02/06 / using-pth-files-for-python-development /

Estructura del directorio:

project1/foo.py
sharedUtils/bar.py

Con los directorios como los ha mostrado, 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 codificar una ruta C: /../ sharedUtils , y funcionará siempre que no cambie la estructura del directorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top