Esta es la respuesta más completa que encomtrarás aportar, pero primero mírala pausadamente y analiza si se adapta a tu trabajo.
Solución:
dist-packages es una convención específica de Debian que también está presente en sus derivados, como Ubuntu. Los módulos se instalan en dist-paquetes cuando provienen del administrador de paquetes de Debian en esta ubicación:
/usr/lib/python2.7/dist-packages
Ya que easy_install
y pip
se instalan desde el administrador de paquetes, también usan dist-packages, pero ponen paquetes aquí:
/usr/local/lib/python2.7/dist-packages
De la wiki de Debian Python:
dist-paquetes en lugar de paquetes de sitio. El software Python de terceros instalado desde los paquetes de Debian va a los paquetes dist, no a los paquetes del sitio. Esto es para reducir el conflicto entre el sistema Python y cualquier compilación de Python desde la fuente que pueda instalar manualmente.
Esto significa que si instala manualmente Python desde la fuente, utiliza el directorio de paquetes del sitio. Esto le permite mantener las dos instalaciones separadas, especialmente porque Debian y Ubuntu dependen de la versión del sistema de Python para muchas utilidades del sistema.
dist-packages
es el directorio específico de debian donde apt
y amigos instalan sus cosas, y site-packages
es el estándar pip
directorio.
El problema es: ¿qué sucede cuando diferentes versiones del mismo paquete están presentes en diferentes directorios?
Mi solución al problema es hacer dist-packages
un enlace simbólico a site-packages
:
for d in $(find $WORKON_HOME -type d -name dist-packages); do
pushd $d
cd ..
if test -d dist-packages/__pycache__; then
mv -v dist-packages/__pycache__/* site-packages/__pycache__/
rmdir -v dist-packages/__pycache__
fi
mv -v dist-packages/* site-packages/
rmdir -v dist-packages
ln -sv site-packages dist-packages
popd
done
(si no está utilizando herramientas gnu, elimine el -v
opción).
Si para ti ha sido útil nuestro artículo, nos gustaría que lo compartas con el resto juniors y nos ayudes a extender este contenido.