Sul mio sistema, ho diversi moduli installati più volte. Per fare un esempio, numpy 1.6.1
è installato nel percorso standard al /usr/lib/python2.7/dist-packages
, e ho una versione aggiornata di numpy 1.8.0
installato presso /local/python/lib/python2.7/site-packages/
.Python: selezionare una delle molteplici versioni di moduli installati
Il motivo per cui non può semplicemente rimuovere la vecchia versione è che non ho i permessi di cambiare nulla sul mio computer di lavoro. Ho comunque bisogno di usare la nuova versione di numpy.
Ho aggiunto /local/python/lib/python2.7/site-packages/
al mio PYTHONPATH
. Sfortunatamente, questo non aiuta, poiché /usr/lib/python2.7/dist-packages
viene inserito prima nel percorso e, pertanto, verrà caricato numpy 1.6.1
. Ecco un esempio:
>>> 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',
...]
Così, sembra che l'ordine di importazione è
- directory corrente
- uova da
PYTHONPATH
- uova di percorso modulo locale (
~/.local/lib/python2.7/site-packages/*.egg
) - System- ampio sentiero modulo (
~/usr/lib/python2.7/dist-packages/
) - directory da
PYTHONPATH
- percorsi intermedi (omesse per brevità)
- directory base di utenti (
~/.local/lib/python2.7/site-packages/
)
Il mio problema è che avrei avuto bisogno di mettere punto 5. ante componenti 3. e 4. per il mio codice per funzionare correttamente . In questo momento, se importare un modulo che è stato compilato contro numpy 1.8.0
dalla directory /local/*
, e questo modulo importazioni NumPy, ci vorranno ancora numpy dalla directory /usr/*
e non riescono.
ho aggirato questo problema mettendo qualcosa di simile nel mio script:
import sys
sys.path.insert(0, '/local/python/lib/python2.7/site-packages/')
In tal modo posso forzare Python per utilizzare l'ordine di importazione giusta, ma naturalmente questo non è una soluzione, dal momento che avrei per farlo in ogni singolo script.
Nessuno ha un'idea o ci sono problemi con la mia domanda? Qualsiasi aiuto è apprezzato. – Jenny
La vera soluzione al tuo problema è la tua [propria copia dei moduli di Python] (https://docs.python.org/2/install/index.html#alternate-installation). –
Non vedo davvero come ciò possa essere d'aiuto, perché i moduli dalla base utente vengono importati * dopo * i moduli di quelli dalla base globale. Ho aggiornato la mia domanda per chiarezza. – Jenny