Ottenere PATH giusto per Python dopo l'installazione di MacPorts


1

Non riesco a importare alcune librerie di Python (PIL, psycopg2) che ho appena installato con MacPorts. Ho consultato questi forum e ho cercato di adattare la mia PATHvariabile ~/.bash_profileper risolvere il problema, ma non ha funzionato.

Ho aggiunto la posizione di PIL e psycopg2 a PATH.
So che Terminal sta usando una versione di Python /usr/local/binpiuttosto che quella installata da MacPorts su /opt/local/bin.

Devo usare la versione MacPorts di Python per assicurarmi che PIL e psycopg2 siano su sys.path quando uso python in Terminal? Devo passare alla versione MacPorts di Python o questo causerà più problemi?

Nel caso sia utile, ecco altri fatti:

PIl e psycopg2 sono installati in /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages

which pythonritorna/usr/bin/python

$ echo $PATHritorni (ho separato ogni percorso per una facile lettura):

:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/
:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages
:/opt/local/bin
:/opt/local/sbin
:/usr/local/git/bin
:/usr/bin
:/bin
:/usr/sbin
:/sbin
:/usr/local/bin
:/usr/local/git/bin
:/usr/X11/bin
:/opt/local/bin

in Python, >>> sys.pathrestituisce:

/Library/Frameworks/SQLite3.framework/Versions/3/Python
/Library/Python/2.6/site-packages/numpy-override
/Library/Frameworks/GDAL.framework/Versions/1.7/Python/site-packages
/Library/Frameworks/cairo.framework/Versions/1/Python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages
 /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Python/2.6/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode

Accolgo con favore qualsiasi critica e commento, se una delle precedenti sembra sciocca o mal concepita. Sono nuovo di tutto questo. Grazie!

Esecuzione di OSX 10.6.5 su un MacBook Pro, invocando python 2.6.1 dal Terminale

Risposte:


5

Usa il comando 'notes' dopo aver installato python (cambia python26 in qualunque versione tu abbia installato):

$ port notes python26

Vedrai alcune variazioni sui consigli post installazione:

python26 has the following notes:
  To fully complete your installation and make python 2.6 the default,  please
  run:
    sudo port install python_select
    sudo port select python python26

È necessario installare python_selecte quindi selezionare python26come Python predefinito. Quindi, se hai effettivamente installato PIL e pyscopg2 usando MacPorts (cioè qualcosa di simile port install py26-psycopg2 py26-pil), non dovresti specificare nulla in PYTHONPATH. Inoltre, non è necessario aggiungere le /opt/local/Library/Frameworks/…directory al tuo PATH. Dopo averlo fatto, which pythondovrebbe tornare /opt/local/bin/python. Le porte Python installate da MacPorts /opt/local/Library/Frameworks/Python.frameworksono già presenti in sys.pathMacPorts Python. Non li trovavi prima perché stavi usando System Python (cioè /usr/bin/python), che non ha conoscenza dei pacchetti MacPorts Python.


Grazie fideli. L'ho appena provato. È stato super facile e totalmente funzionante. Questo è il modo giusto per farlo.
BenjaminGolder,

Perché i macports richiedono che tu selezioni questo pitone? Perché non è selezionato da solo (almeno sulla mia macchina, ho installato Python per la prima volta su Macport; non avrebbe dovuto selezionarlo automaticamente?)
Kalaracey,

@kalaracey MacPorts tenta di non essere invadente in caso di conflitti evidenti, ovvero MacPorts vs System Python. Se desideri utilizzare python26installato tramite MacPorts, devi selezionarlo utilizzando python-select. Si noti che l'utilizzo di Python con il percorso completo /opt/local/bin/python2.6funziona sempre.
fideli,

1
In questi giorni sembra:$ port notes python27 sudo port select --set python python27
smci

2

Io penso che ho capito la risposta alla mia domanda. Ho modificato il mio file ~ / .bash_profile per includerlo

export PYTHONPATH=

e poi ho aggiunto tutti i percorsi esistenti in sys.path:

export PYTHONPATH=/Library/Frameworks/SQLite3.framework/Versions/3/Python:/Library/Python/2.6/site-packages/numpy-override:/Library/Frameworks/GDAL.framework/Versions/1.7/Python/site-packages:/Library/Frameworks/cairo.framework/Versions/1/Python:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages:/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload:/Library/Python/2.6/site-packages:/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC:/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages:

e poi ho aggiunto i percorsi alle directory in cui MacPorts ha installato roba:

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/:/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages:

ora quando stampo sys.path, sono inclusi i percorsi delle directory di installazione di MacPorts:

/Library/Frameworks/SQLite3.framework/Versions/3/Python
/Library/Python/2.6/site-packages/numpy-override
/Library/Frameworks/GDAL.framework/Versions/1.7/Python/site-packages
/Library/Frameworks/cairo.framework/Versions/1/Python
/Library/Frameworks/SQLite3.framework/Versions/3/Python
/Library/Python/2.6/site-packages/numpy-override
/Library/Frameworks/GDAL.framework/Versions/1.7/Python/site-packages
/Library/Frameworks/cairo.framework/Versions/1/Python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Python/2.6/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages

Adesso

>>> import PIL

e

>>> import psycopg2

funziona benissimo.


Sfortunatamente, questo non risolve davvero il problema di avere più versioni della stessa libreria. Se esiste una libreria con lo stesso nome in due directory ed entrambe sono in PERCORSO, come si fa a sapere quale verrà utilizzato?
BenjaminGolder,

Trovato un libro su UNIX e sulla programmazione della shell, in cui si dice che quando viene dato un comando la shell cercherà tra le directory in PATH secondo l'ordine in cui sono elencate. In altre parole, verrà cercata per prima la prima directory elencata quando si digita echo $ PATH. Presumo che lo stesso sia vero per PYTHONPATH.
BenjaminGolder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.