Qual è il modo più compatibile per installare i moduli Python su un Mac?


125

Sto iniziando a imparare il pitone e ad amarlo. Lavoro su un Mac principalmente come su Linux. Lo trovo su Linux (principalmente Ubuntu 9.04) quando installo un modulo Python usando apt-get, funziona bene. Posso importarlo senza problemi.

Sul Mac, sono abituato a usare Macports per installare tutto ciò che riguarda Unixy. Tuttavia, sto scoprendo che la maggior parte dei moduli Python che installo con esso non vengono visti da Python. Ho trascorso un po 'di tempo a giocare con le impostazioni PATH e usando python_select. Niente ha funzionato davvero e a questo punto non capisco davvero, invece sto solo frugando in giro.

Ho l'impressione che Macports non sia universalmente amato per la gestione dei moduli Python. Vorrei ricominciare da capo usando un approccio più "accettato" (se questa è la parola giusta).

Quindi, mi chiedevo, qual è il metodo che gli sviluppatori Mac Python usano per gestire i loro moduli?

Domande bonus:

Usi il pitone di Apple o qualche altra versione? Compili tutto dalla fonte o c'è un gestore di pacchetti che funziona bene (Fink?).


Qualche tempo fa c'era un bell'articolo sul packaging delle applicazioni PyQt per Mac OS X ad Ars Technica: arstechnica.com/open-source/guides/2009/03/…
Todd Gamblin

7
MacPorts è perfetto per Python su Mac. NOTA: è necessario installare i pacchetti Python tramite MacPorts affinché possano essere installati nell'installazione di MacPorts Python. Puoi anche installare pacchetti senza usare MacPorts; tuttavia, è necessario impostare quella versione di python come predefinita tramite python_select PRIMA di installare il pacchetto. Se installi il pacchetto e poi usi python_select, non farà differenza, poiché sarà installato in qualsiasi versione di Python era quella predefinita al momento dell'installazione.
Michael Aaron Safyan il

Risposte:


144

Il modo più popolare per gestire i pacchetti python (se non si utilizza il gestore dei pacchetti di sistema) è utilizzare setuptools e easy_install. Probabilmente è già installato sul tuo sistema. Usalo in questo modo:

easy_install django

easy_install utilizza Python Package Index, una risorsa straordinaria per gli sviluppatori di Python. Dai un'occhiata in giro per vedere quali pacchetti sono disponibili.

Un'opzione migliore è pip , che sta guadagnando trazione, poiché tenta di risolvere molti dei problemi associati a easy_install. Pip utilizza lo stesso repository di pacchetti di easy_install, funziona solo meglio. In realtà l'unica volta che è necessario utilizzare easy_install è per questo comando:

easy_install pip

Successivamente, utilizzare:

pip install django

Ad un certo punto probabilmente vorrai imparare qualcosa su virtualenv . Se fai molto sviluppo di Python su progetti con requisiti di pacchetto contrastanti, virtualenv è una manna dal cielo. Ti permetterà di avere versioni completamente diverse di vari pacchetti e di passare facilmente da uno all'altro in base alle tue esigenze.

Per quanto riguarda quale python usare, attenersi al python di Apple ti darà il minimo mal di testa, ma se hai bisogno di una versione più recente (credo che Leopard sia la 2.5.1), andrei con il macports python 2.6.


5
Recentemente ho ricostruito la mia macchina e sono passato a utilizzare solo Homebrew e PIP, improvvisamente tutti i problemi di costruzione che stavo andando via.
GloryFish,

42

La tua domanda ha già tre anni e ci sono alcuni dettagli non trattati in altre risposte:

La maggior parte delle persone che conosco usano HomeBrew o MacPorts , preferisco MacPorts per il suo taglio netto di quello che è un ambiente Mac OS X predefinito e la mia configurazione di sviluppo. Basta spostare la cartella / opt e testare i pacchetti con un normale ambiente Python utente

MacPorts è portatile solo su Mac, ma con easy_install o pip imparerai come configurare il tuo ambiente su qualsiasi piattaforma (Win / Mac / Linux / Bsd ...). Inoltre sarà sempre più aggiornato e con più pacchetti

Personalmente lascio che i MacPorts gestiscano i miei moduli Python per mantenere tutto aggiornato. Come qualsiasi altro gestore di pacchetti di alto livello (es. Apt-get) è molto meglio per il sollevamento di moduli pesanti con molte dipendenze binarie. Non è possibile costruire i miei collegamenti Qt (PySide) con easy_install o pip. Qt è enorme e richiede molto tempo per essere compilato. Non appena si desidera un pacchetto Python che necessita di una libreria utilizzata da programmi non Python, provare ad evitare easy_install o pip

Ad un certo punto scoprirai che mancano alcuni pacchetti all'interno di MacPorts. Non credo che i MacPorts ti daranno mai l'intero CheeseShop . Ad esempio, recentemente ho avuto bisogno del modulo Elixir , ma MacPorts offre solo py25-elixir e py26-elixir, nessuna versione di py27. In casi come questi hai:

pip-2.7 install - elisir utente

(assicurati di digitare sempre pip- (versione))

Ciò creerà una libreria Python aggiuntiva nella tua home directory. Sì, Python funzionerà con più di una posizione di libreria: una controllata da MacPorts e una locale dell'utente per tutto ciò che manca in MacPorts.

Ora nota che preferisco pip su easy_install. C'è una buona ragione per cui dovresti evitare setuptools e easy_install. Ecco una buona spiegazione e cerco di tenermi lontano da loro. Una caratteristica molto utile di pip ti dà un elenco di tutti i moduli (insieme alle loro versioni) che hai installato con MacPorts, easy_install e pip stesso:

congelamento pip-2.7

Se hai già iniziato a utilizzare easy_install, non ti preoccupare, pip può riconoscere tutto ciò che è già stato fatto da easy_install e persino aggiornare i pacchetti installati con esso.

Se sei uno sviluppatore, tieni d'occhio virtualenv per controllare diverse configurazioni e combinazioni di versioni dei moduli. Altre risposte lo menzionano già, ciò che non è stato menzionato finora è il modulo Tox , uno strumento per testare che il pacchetto si installa correttamente con diverse versioni di Python.

Anche se di solito non ho conflitti di versione, mi piace avere virtualenv per configurare un ambiente pulito e avere una visione chiara delle dipendenze dei miei pacchetti. In questo modo non dimentico mai le dipendenze nel mio setup.py

Se scegli MacPorts, tieni presente che più versioni dello stesso pacchetto non sono più selezionate come il vecchio stile Debian con un pacchetto python_select aggiuntivo (è ancora lì per compatibilità). Ora hai il comando select per scegliere quale versione di Python verrà utilizzata (puoi anche selezionare quelle installate da Apple):

$  port select python
Available versions for python:
    none
    python25-apple
    python26-apple
    python27 (active)
    python27-apple
    python32

$ port select python python32

Aggiungi tox sopra di esso e i tuoi programmi dovrebbero essere davvero portatili


30

Si prega di vedere l'ambiente di sviluppo di Python OS X . Il modo migliore è usare MacPorts . Scarica e installa MacPorts, quindi installa Python tramite MacPorts digitando i seguenti comandi nel Terminale:

sudo port install python26 python_select
sudo port select --set python python26

O

sudo port install python30 python_select
sudo port select --set python python30

Utilizzare il primo set di comandi per installare Python 2.6 e il secondo set per installare Python 3.0. Quindi utilizzare:

sudo port installa py26-nomepacchetto

O

sudo port installa py30-nomepacchetto

Nei comandi precedenti, sostituisci nomepacchetto con il nome del pacchetto, ad esempio:

sudo port installa py26-setuptools

Questi comandi installeranno automaticamente il pacchetto (e le sue dipendenze) per la data versione di Python.

Per un elenco completo dei pacchetti disponibili per Python, digitare:

elenco delle porte | grep py26-

O

elenco delle porte | grep py30-

Quale comando usi dipende dalla versione di Python che hai scelto di installare.


1
Per la cronaca, nelle ultime versioni di MacPorts sudo python_select python30è stato sostituito con sudo port select --set python python30.
Benjamin Hodgson

7

Uso MacPorts per installare Python e qualsiasi modulo di terze parti monitorato da MacPorts /opt/locale installo qualsiasi modulo installato manualmente (quelli che non si trovano nel repository MacPorts) /usr/locale questo non ha mai causato problemi. Penso che potresti essere confuso sull'uso di alcuni script MacPorts e variabili di ambiente.

MacPorts python_selectviene utilizzato per selezionare la versione "corrente" di Python, ma non ha nulla a che fare con i moduli. Ciò consente, ad esempio, di installare sia Python 2.5 che Python 2.6 utilizzando MacPorts e passare da un'installazione all'altra.

Le $PATHvariabili di ambiente non influiscono sui moduli Python caricati. $PYTHONPATHè quello che stai cercando. $PYTHONPATHdovrebbe puntare alle directory contenenti i moduli Python che si desidera caricare. Nel mio caso, la mia $PYTHONPATHvariabile contiene /usr/local/lib/python26/site-packages. Se usi Python di MacPorts, imposta le altre directory appropriate per te, quindi devi solo aggiungere ulteriori percorsi a $PYTHONPATH. Ma ancora una volta, $PATHnon viene usato affatto quando Python cerca i moduli che hai installato.

$PATH viene utilizzato per trovare eseguibili, quindi se installi Python di MacPorts, assicurati che /opt/local/binsia nel tuo $PATH.


6

Non c'è niente di sbagliato nell'usare un'installazione di MacPorts Python. Se stai installando moduli Python da MacPorts ma non li vedi, ciò probabilmente significa che non stai invocando il Python MacPorts che hai installato. In una shell terminale, è possibile utilizzare percorsi assoluti per richiamare i vari Python che possono essere installati. Per esempio:

$ /usr/bin/python2.5         # Apple-supplied 2.5 (Leopard)
$ /opt/local/bin/python2.5   # MacPorts 2.5
$ /opt/local/bin/python2.6   # MacPorts 2.6
$ /usr/local/bin/python2.6   # python.org (MacPython) 2.6
$ /usr/local/bin/python3.1   # python.org (MacPython) 3.1

Per ottenere il pitone giusto per impostazione predefinita, è necessario assicurarsi che la shell $ PATH sia impostata correttamente per garantire che venga trovato prima l'eseguibile giusto. Un'altra soluzione è quella di definire gli alias di shell per i vari pitoni.

Anche un'installazione di python.org (MacPython) va bene, come altri hanno suggerito. easy_install può aiutare ma, ancora una volta, poiché ogni istanza di Python può avere il suo easy_installcomando, assicurati di invocare il diritto easy_install.


2
Se utilizza MacPorts, il modo corretto di rendere quella versione di Python predefinita non è quello di confondere con il PERCORSO, ma di installare "python_select" e lasciare che cambi automaticamente i collegamenti simbolici necessari per rendere quella versione di Python predefinita.
Michael Aaron Safyan il

3
python_select gestisce solo i symlink di Python in / opt / local / bin e non esiste alcuna garanzia che / opt / local / bin preceda / usr / local / bin o / usr / bin nel tuo $ PATH (sebbene l'installazione iniziale di MacPorts tenti di fare così). Il punto è che, con le versioni multiple disponibili, usare solo "python" o anche "python2.5" è un po 'un crapshoot in generale: non sai quale Python finirai a meno che tu non sia a conoscenza di $ PERCORSI insidie ​​e / o utilizzare percorsi assoluti.
Ned Deily,

6

Se usi Python da MacPorts, il suo easy_install si trova in: /opt/local/bin/easy_install-2.6 (cioè per py26). Non è lo stesso che chiamare semplicemente easy_install direttamente, anche se hai usato python_select per modificare il comando python predefinito.


1
Lo stesso vale per pip. Con la mia configurazione di MacPorts, eseguo pip-2.6 (che è in / opt / local / bin /) per installare moduli Python che funzionano bene con il MacPorts Python. Puoi sudo port install py2.6-pipottenere pip.
zlovelady,

4

Hai mai visto easy_install ? Non sincronizzerà i tuoi macport o cose del genere, ma scaricherà automaticamente l'ultimo pacchetto e tutte le dipendenze necessarie, ad es

easy_install nose

per il pacchetto di test dell'unità naso, o

easy_install trac

per il tracbug tracker.

Ci sono anche un po 'più di informazioni sulla loro pagina EasyInstall .


1
easy_install va bene. Basta essere consapevoli del fatto che, proprio come è possibile che siano installate più versioni di Python, è facile avere più versioni di easy_install installate, ognuna associata a una diversa installazione / versione di Python. Devi solo assicurarti di capire quale stai invocando (quale (1) può essere di aiuto).
Ned Deily,


2

Quando installi moduli con MacPorts, non va nella versione Apple di Python. Invece quei moduli sono installati sulla versione MacPorts di Python selezionata.

Puoi cambiare quale versione di Python è usata di default usando una porta mac chiamata python_select . istruzioni qui .

Inoltre, c'è easy_install . Che utilizzerà Python per installare i moduli Python.


python_selectè ora obsoleto, vedi le risposte più recenti.
askewchan,




-1

Installa direttamente uno dei pacchetti fink (Django 1.6 a partire da 2013-Nov)

fink install django-py27
fink install django-py33

O crea te stesso un virtualenv:

fink install virtualenv-py27
virtualenv django-env
source django-env/bin/activate
pip install django
deactivate # when you are done

Oppure usa fink django e altri pacchetti pip installati in virtualenv

fink install django-py27
fink install virtualenv-py27
virtualenv django-env --system-site-packages
source django-env/bin/activate
# django already installed
pip install django-analytical # or anything else you might want
deactivate # back to your normally scheduled programming
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.