Python: seleccione una de las múltiples versiones de módulos instalados
En mi sistema, tengo varios módulos instalados varias veces. Para dar un ejemplo,numpy 1.6.1
se instala en la ruta estándar en/usr/lib/python2.7/dist-packages
y tengo una versión actualizada denumpy 1.8.0
instalado en/local/python/lib/python2.7/site-packages/
.
La razón por la que no puedo simplemente eliminar la versión anterior es que no tengo permisos para cambiar nada en mi computadora de trabajo. Sin embargo, necesito usar la nueva versión numpy.
Yo he añadido/local/python/lib/python2.7/site-packages/
para miPYTHONPATH
. Desafortunadamente, esto no ayuda, ya que/usr/lib/python2.7/dist-packages
se inserta primero en la ruta y, por lo tanto,numpy 1.6.1
será cargado Aquí hay un ejemplo:
>>> import os
>>> print os.environ['PYTHONPATH']
/local/python/lib/python2.7/site-packages
>>> import pprint
>>> import sys
>>> pprint.pprint(sys.path)
['',
'/local/python/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg',
'/local/python/lib/python2.7/site-packages/pyparsing-2.0.1-py2.7.egg',
'~/.local/lib/python2.7/site-packages/setuptools-3.4.4-py2.7.egg',
'~/.local/lib/python2.7/site-packages/mpldatacursor-0.5_dev-py2.7.egg',
'/usr/lib/python2.7/dist-packages',
'/local/python/lib/python2.7/site-packages',
'/usr/lib/python2.7',
...,
'~/.local/lib/python2.7/dist-packages',
...]
Entonces, parece que el orden de importación es
directorio actualhuevos dePYTHONPATH
huevos de la ruta del módulo local (~/.local/lib/python2.7/site-packages/*.egg
)ruta del módulo de todo el sistema (~/usr/lib/python2.7/dist-packages/
)directorios dePYTHONPATH
caminos intermedios (omitidos por brevedad)directorio de la base de usuarios~/.local/lib/python2.7/site-packages/
)Mi problema es que necesitaría poner el elemento 5. antes de los elementos 3. y 4. para que mi código funcione correctamente. En este momento, si importo un módulo que fue compilado contranumpy 1.8.0
desde el/local/*
directorio, y este módulo importa numpy, todavía tomará numpy del/usr/*
directorio y fallar.
He eludido este problema colocando algo como esto en mis scripts:
import sys
sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
De este modo, puedo obligar a Python a usar el orden de importación correcto, pero, por supuesto, esto no es una solución, ya que tendría que hacerlo encada guión.