2012-03-29 14 views
6

In Python, sto ricevendo un errore perché è caricare un modulo da /usr/lib/python2.6/site-packages ma mi piacerebbe che usare la mia versione in $HOME/python-modules/lib/python2.6/site-packages, che ho installato utilizzando pip-python --install-option="--prefix=$HOME/python-modules --ignore-installed

Come posso dire Python di usare la mia versione di la Biblioteca? L'impostazione di PYTHONPATH a $HOME/python-modules/lib/python2.6/site-packages non aiuta, dal momento che /usr/lib/... ha la precedenza.

+2

Hai provato solo anteponendo il percorso versione della libreria prima dell'importazione? cioè import sys; sys.path.insert (0, "/ path/to/file/versione"); importa qualcosa – bjarneh

+0

Non l'ho mai fatto da solo, ma penso che potresti usare imp.find_module() e imp.load_module(). [Documentazione] (http://docs.python.org/library/imp.html) – malbani

risposta

7

Dai uno sguardo al modulo site per modi di personalizzare il tuo ambiente.

Un modo per raggiungere questo obiettivo è quello di aggiungere un file in una posizione attualmente in sys.path chiamato usercustomize.py, quando Python si sta avviando verranno importati automaticamente questo file, ed è possibile utilizzarlo per modificare sys.path.

In primo luogo, impostare $PYTHONPATH a $HOME (o aggiungere $HOME se $PYTHONPATH ha un valore), quindi creare il file $HOME/usercustomize.py con il seguente contenuto:

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

Ora, quando si inizia a Python si dovrebbe vedere la vostra abitudine sito- directory dei pacchetti prima dell'impostazione predefinita del sistema su sys.path.

7

versioni di Python più recenti hanno ora il supporto integrato per cercare la posizione OpenDesktop:

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

Se mettete i moduli locali lì non c'è bisogno di alcuna manipolazione sys.path.

1

Se uno ha più versioni di un pacchetto installato, ad esempio ad es. SciPy:

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

e si vorrebbe la versione installata utente (ad esempio installato utilizzando pip install --user --upgrade scipy) da preferire, ha bisogno di un file di usercustomize.py in ~/.local/lib/python3.5/site-packages/ con per esempio questo contenuto:

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") 

(l'indice per la selezione del ciclo assicura che i pacchetti installati in modalità "sviluppare" ha la precedenza) ora abbiamo la nostra versione specifica all'utente di 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 preferire i pacchetti installati a userbase (ad es pip install --user --upgrade cool_thing)

in ~/.bashrc, ~/.profile, o qualunque sia il file di inizializzazione per la shell è, aggiungere

export PYTHONUSERBASE="$HOME/python-modules" 

in $PYTHONUSERBASE/usercustomize.py

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