En mi aplicación me gustaría usar:
packageA
, que requierepackageX==1.3
packageB
, que requierepackageX==1.4
packageX==1.5
¿Cómo puedo instalar varias versiones de packageX
con pip para manejar esta situación?
En mi aplicación me gustaría usar:
packageA
, que requiere packageX==1.3
packageB
, que requiere packageX==1.4
packageX==1.5
¿Cómo puedo instalar varias versiones de packageX
con pip para manejar esta situación?
packageX>=1.3,<2
y packageX>=1.4,<2
(asumiendo que el packageX ascendente está siguiendo el control de versiones semántico ), entonces usted, como desarrollador de la aplicación descendente, no tendría ningún problema para anclar y usar packageX==1.5
y todos estarían felices. Más detalles aquí
Respuestas:
pip no te ayudará con esto.
Puede decirle que instale una versión específica, pero anulará la otra. Por otro lado, usar dos virtualenvs te permitirá instalar ambas versiones en la misma máquina, pero no usarlas al mismo tiempo.
Lo mejor es instalar ambas versiones manualmente, colocándolas en su ruta de Python con un nombre diferente.
Pero si sus dos bibliotecas esperan que tengan el mismo nombre (y deberían), tendrá que modificarlas para que obtengan la versión que necesitan con algún alias de importación como:
import dependencyname_version as dependencyname
Actualmente no hay una forma limpia de hacer esto. Lo mejor que puedes esperar es que este truco funcione.
Prefiero deshacerme de una de las dos bibliotecas y reemplazarla por una equivalente, o parchearla para aceptar la nueva versión de la dependencia y devolver el parche a la comunidad.
Descargue la fuente de ea. paquete. Instale cada uno en su propia carpeta separada. Por ejemplo. Tenía el paquete de la versión 1.10, pero quería cambiar a la versión dev para trabajar un poco. He descargado la fuente para el módulo dev:
git clone https://github.com/networkx/networkx.git
cd netwokrx
He creado una carpeta para esta versión:
mkdir /home/username/opt/python
, entonces me puse el PYTHONPATH env var a: export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/
. A continuación, lo instalé usando:python setup.py install --prefix=/home/username/opt/python
Ahora, dado que mi PYTHONPATH ahora apunta a esta otra carpeta de paquetes de sitio, cuando ejecuto Python en la línea de comandos e importo el nuevo módulo, funciona. Para volver a cambiar, elimine la nueva carpeta de PYTHONPATH.
>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'
networkx
diferencias de versión!
sys.path