2012-03-29 12 views
6

En Python, estoy recibiendo un error porque se carga un módulo de /usr/lib/python2.6/site-packages pero me gustaría que utilice mi versión en $HOME/python-modules/lib/python2.6/site-packages, que he instalado usando pip-python --install-option="--prefix=$HOME/python-modules --ignore-installed

¿Cómo puedo saber Python para usar mi versión de ¿la biblioteca? Establecer PYTHONPATH a $HOME/python-modules/lib/python2.6/site-packages no ayuda, ya que /usr/lib/... aparentemente tiene prioridad.

+2

has necesitado simplemente anteponiendo la ruta a su versión de la biblioteca antes de la importación? es decir 'import sys; sys.path.insert (0, "/ ruta/a/su/versión"); import something ' – bjarneh

+0

Nunca he hecho esto yo mismo, pero creo que podrías usar imp.find_module() y imp.load_module(). [Documentación] (http://docs.python.org/library/imp.html) – malbani

Respuesta

7

Eche un vistazo al módulo site para conocer las formas de personalizar su entorno.

Una forma de lograr esto es agregar un archivo en una ubicación actualmente en sys.path llamada usercustomize.py, cuando se está iniciando Python que importará automáticamente este archivo, y se puede utilizar para modificar sys.path.

En primer lugar, establece $PYTHONPATH a $HOME (o añadir $HOME si $PYTHONPATH tiene un valor), a continuación, crear el archivo $HOME/usercustomize.py con el siguiente contenido:

import sys, os 
my_site = os.path.join(os.environ['HOME'], 
         'python-modules/lib/python2.6/site-packages') 
sys.path.insert(0, my_site) 

Ahora al iniciar Python debería ver su encargo sitio- directorio de paquetes antes del sistema predeterminado en sys.path.

7

Las nuevas versiones de Python ahora se han incorporado en el apoyo para buscar la ubicación OpenDesktop:

$HOME/.local/lib/pythonX.Y/site-packages 

Si coloca sus módulos locales no usted no tiene a ninguna manipulación sys.path.

1

Si tiene varias versiones de un paquete instalado, p. Ej. SciPy:

>>> import scipy; print(scipy.__version__); print(scipy.__file__) 
0.17.0 
/usr/lib/python3/dist-packages/scipy/__init__.py 

y uno le gustaría la versión instalada de usuario (por ejemplo, usando instalado pip install --user --upgrade scipy) a ser preferidas, uno necesita un archivo usercustomize.py en ~/.local/lib/python3.5/site-packages/ con, por ejemplo este contenido:

import sys, os 
my_site = os.path.join(
    os.environ['HOME'], '.local/lib/python%d.%d/site-packages' % (
     sys.version_info[0], sys.version_info[1])) 
for idx, pth in enumerate(sys.path): 
    if pth.startswith('/usr'): 
     sys.path.insert(idx, my_site) 
     break 
else: 
    raise ValueError("No path starting with /usr in sys.path") 

(el índice de selección de lazo garantiza que los paquetes instalados en el "modo de desarrollo" tiene prioridad) ahora tenemos nuestra versión específica de usuario de SciPy:

>>> import scipy; print(scipy.__version__); print(scipy.__file__) 
0.18.1 
/home/user/.local/lib/python3.5/site-packages/scipy/__init__.py 
0

a preferir los paquetes instalados a base de usuarios (por ejemplo, pip install --user --upgrade cool_thing)

en ~/.bashrc, ~/.profile, o lo que el archivo de inicio para el shell es decir, añadir

export PYTHONUSERBASE="$HOME/python-modules" 

en $PYTHONUSERBASE/usercustomize.py

#!/usr/bin/env python 
import sys, site 
sys.path.insert(0, site.getusersitepackages()) 
Cuestiones relacionadas