modulos lista importar python module pythonpath versions sys.path

lista - importar modulos en python



Python: seleccione una de las múltiples versiones de módulos instalados (3)

Además de las sugerencias ya dadas en la sección de comentarios, ¿has pensado en usar virtualenv ? Esto le daría un control detallado sobre cada módulo que desee utilizar. Si no está familiarizado con virtualenv, querrá leer la documentación para tener una idea de cómo funciona.

Simplemente, por ejemplo, puedes instalarlo y configurarlo, así (virtualenv-1.11.6 looks ser la versión más reciente actualmente):

$ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz $ tar xvfz virtualenv-1.11.6.tar.gz $ cd virtualenv-1.11.6 $ python virtualenv.py ../numpyvenv $ cd ../numpyvenv $ source ./bin/activate (numpyvenv) $ pip install numpy # downloads, compiles, and installs numpy into the virtual environemnt (numpyvenv) $ python Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> numpy.version.version ''1.9.1'' >>> quit() (numpyvenv) $ deactivate $ # the virtual environment has been deactivated

Anteriormente, creamos un entorno virtual llamado "numpyvenv", activamos el entorno, instalamos numpy, imprimimos la versión numpy (para mostrar que funciona), salimos de python y desactivamos el entorno. La próxima vez que active el entorno, numpy estará allí junto con cualquier otro módulo que instale. Puede que tenga problemas al intentar esto, pero debería comenzar.

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 de numpy 1.8.0 instalada en /local/python/lib/python2.7/site-packages/ .

La razón por la que simplemente no puedo eliminar la versión anterior es que no tengo permisos para cambiar nada en la computadora de mi trabajo. Sin embargo necesito usar la nueva versión numpy.

He agregado /local/python/lib/python2.7/site-packages/ a mi PYTHONPATH . Desafortunadamente, esto no ayuda, ya que /usr/lib/python2.7/dist-packages se inserta primero en la ruta y, por lo tanto, se numpy 1.6.1 . 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'', ...]

Por lo tanto, parece que el orden de importación es

  1. directorio actual
  2. huevos de PYTHONPATH
  3. huevos de la ruta del módulo local ( ~/.local/lib/python2.7/site-packages/*.egg )
  4. ruta del módulo de todo el sistema ( ~/usr/lib/python2.7/dist-packages/ )
  5. directorios de PYTHONPATH
  6. Caminos intermedios (omitidos por brevedad)
  7. directorio de la base de usuarios ( ~/.local/lib/python2.7/site-packages/ )

Mi problema es que necesitaría poner el artículo 5. antes de los artículos 3. y 4. para que mi código funcione correctamente. En este momento, si importo un módulo que fue compilado contra numpy 1.8.0 desde el directorio /local/* , y este módulo importa numpy, aún tomará numpy del directorio /usr/* y fallará.

He evitado este problema colocando algo como esto en mis scripts:

import sys sys.path.insert(0, ''/local/python/lib/python2.7/site-packages/'')

Por lo tanto, puedo forzar a Python a usar el orden de importación correcto, pero por supuesto esto no es una solución, ya que tendría que hacer esto en cada script .


Tuve el mismo problema en Debian Wheezy después de instalar el último módulo numpy con easy_install.

El nuevo módulo numpy se instaló en /usr/local/lib/python2.7/dist-packages/numpy mientras que el módulo anterior estaba en /usr/lib/pymodules/python2.7/numpy . Cuando intenté importar el módulo numpy, se importó la versión anterior. Y como dice, agregar a PYTHONPATH la nueva ruta del módulo no ayuda, porque se agrega en sys.path debajo de la entrada anterior.

El problema parece estar en easy-install , porque crea un archivo easy-install.pth que importa /usr/lib/pymodules/python2.7 antes de cualquier módulo local.

Para solucionar el problema , solo edité el archivo /usr/local/lib/python2.7/dist-packages/easy-install.pth y /usr/local/lib/python2.7/dist-packages/easy-install.pth la línea /usr/lib/pymodules/python2.7 por lo que esta línea Se colocará a continuación en el sys.path.


Tuve este problema en una Mac que estaba usando sin acceso de administrador. Mi solución fue la siguiente:

  1. Encuentra el directorio de la versión numpy que quieres usar. Para mí esto fue /Library/Python/2.7/site-packages

  2. Cree un archivo ~/.startup.py y ~/.startup.py con PYTHONSTARTUP=~/.startup.py en su archivo .bashrc

  3. En .startup.py :

import sys

sys.path.insert(0,''/Library/Python/2.7/site-packages/'') <--- importa esto ANTES de las partes estándar

import numpy

print("Importing numpy version"+numpy.__version__) <---- Para recordar que hemos cambiado la versión numpy

Esto parece funcionar bien para mí. Espero que ayude.