Compartir módulos de utilidades en proyectos de Python
-
10-07-2019 - |
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
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.