2010-07-01 14 views
14

Ho iniziato di recente a imparare Python e sono un po 'confuso su come i pacchetti siano distribuiti e installati.Installazione dei pacchetti Python in Windows

Capisco che il mezzo ufficiale di installazione dei pacchetti è distutils: si scarica il tarball sorgente, scompattarlo ed eseguire: python setup.py install, allora il modulo automagicamente installarsi

conosco anche setuptools che viene fornito con lo script di supporto easy_install. Esso utilizza uova per la distribuzione, e da quanto ho capito, è costruito in cima distutils e fa la stessa cosa come sopra, più si prende cura di tutte le dipendenze richieste, il tutto prelevato dalla Cheese Shop

Poi c'è anche pip, che non sono ancora sicuro di come sia diverso dagli altri.

Infine, come io sono su una macchina Windows, un sacco di pacchetti offre anche binario costruisce attraverso un programma di installazione finestre, soprattutto quelli che richiede la compilazione di codice C/Fortran, che altrimenti sarebbe un incubo per compilare manualmente su windows (si presuppone che tu abbia MSVC o MinGW/Cygwin dev environment con tutte le necessarie librerie di setup .. comunque prova a costruire numpy o scipy tu stesso e capirai!)

Quindi qualcuno può aiutarmi a dare un senso a tutto questo, e spiegare le differenze, i pro/contro di ciascun metodo. Mi piacerebbe sapere come ognuno tiene traccia dei pacchetti (registro di Windows, file di configurazione, ..). In particolare, come gestiresti tutte le tue librerie di terze parti (essere in grado di elencare i pacchetti installati, disabilitare/disinstallare, ecc.)

+0

Correlato: [Elenco installato python site-packages?] (Http://stackoverflow.com/questions/2300794/), [Posso installare i pacchetti di Python Windows in virtualenvs?] (Http://stackoverflow.com/questions/3271590 /). Quest'ultimo menziona * virtualenv * ma è valido anche al di fuori di * virtualenv *. –

+0

Questo dovrebbe interessare chiunque si trovi su questa pagina: http://stackoverflow.com/a/14753678/97160 – Amro

risposta

11

Io uso pip, e non su Windows, quindi non posso fornire il confronto con l'opzione di installazione di Windows, solo alcune informazioni su pip:

  • Pip è costruito su setuptools e richiede l'installazione.
  • Pip è un rimpiazzo (miglioramento) per easy_install di setuptools. Fa tutto ciò che easy_install fa, e molto altro (assicurati che tutte le distribuzioni desiderate possano essere scaricate prima di installarne una per evitare installazioni rotte, elencare distribuzioni e versioni installate, disinstallare, cercare PyPI, installare da un file di requisiti che elenca più distribuzioni e le versioni ...).
  • Attualmente Pip non supporta l'installazione di alcuna forma di distribuzione precompilata o binaria, quindi eventuali distribuzioni con estensioni che richiedono la compilazione possono essere installate solo se è disponibile il compilatore appropriato. Il supporto dell'installazione dai programmi di installazione binari di Windows è sulla tabella di marcia, ma non è chiaro quando accadrà.
  • Fino a poco tempo fa, il supporto di Windows per Pip era debole e non testato. Grazie a un sacco di lavoro di Dave Abrahams, pip trunk ora passa tutti i suoi test su Windows (e c'è un server di integrazione continuo che ci aiuta a garantire che rimanga così), ma non è stata ancora rilasciata una versione che includa quel lavoro. Quindi il supporto Windows più affidabile dovrebbe arrivare con la prossima versione.
  • Tutti i meccanismi di installazione del pacchetto standard di Python memorizzano tutti i metadati relativi alle distribuzioni installate in un file o file accanto ai pacchetti effettivamente installati. Distutils utilizza un file distribution_name-X.X-pyX.X.egg-info, pip usa una directory con nomi simili con più file di metadati al suo interno. Easy_install mette tutto il codice Python installato per una distribuzione all'interno del proprio zipfile o directory, e posiziona una directory EGG-INFO all'interno di quella directory con i metadati in essa contenuti. Se si importa un pacchetto Python dal prompt interattivo, controllare il valore del pacchetto.__file__; dovresti trovare i metadati per la distribuzione di quel pacchetto nelle vicinanze.
  • Le informazioni sulle distribuzioni installate vengono archiviate in qualsiasi tipo di registro globale solo da strumenti di packaging specifici del sistema operativo come installatori di Windows, Apt o RPM. Gli strumenti standard di packaging Python non modificano o prestano attenzione a questi elenchi.
  • Pip (o, a mio parere, qualsiasi strumento di pacchettizzazione Python) viene utilizzato al meglio con virtualenv, che consente di creare mini-ambienti Python isolati per progetto in cui è possibile installare i pacchetti senza influire sul sistema generale. Ogni nuova virtualenv viene automaticamente fornita con pip installato.

Un paio di altri progetti si consiglia di essere a conoscenza di così (sì, c'è di più!):

  • distribute è un fork di setuptools che ha alcune correzioni di bug e funzionalità aggiuntive.
  • distutils2 è destinato ad essere la "prossima generazione" del packaging Python. È (si spera) che si adottino le migliori caratteristiche di distutils/setuptools/distribute/pip. È stato sviluppato indipendentemente e non è ancora pronto per l'uso, ma alla fine dovrebbe sostituire le distutils nella libreria standard Python e diventare la soluzione di packaging Python de facto.

Spero che tutto ciò abbia contribuito a chiarire qualcosa! In bocca al lupo.

+0

grazie per la panoramica, che è stato utile. Un'osservazione, guardando la directory 'site-packages', oltre al previsto, ci sono anche un paio di file' .pth' che presumo siano metadati easy_install? – Amro

+1

@Amro: sì, perché easy_install inserisce il codice Python di ogni distribuzione in un file zip o directory separato, deve eseguire alcuni hackery di sys.path per renderli tutti importabili. setuptools.pth e easy-install.pth fanno questo hackery. –

+0

Vedo, immagino sia necessario avere una versione multipla dello stesso modulo senza conflitti .. Grazie ancora – Amro

0

Io uso Windows e Python. È un po 'frustrante, perché pip non sempre funziona per installare le cose. Python sta passando a pip, quindi lo uso ancora. Pip è bello, perché è possibile disinstallare gli elementi e utilizzare

pip freeze > requirements.txt 
pip install -r requirements.txt 

Un altro motivo che mi piace pip è per gli ambienti virtuali come venv con Python 3.4. Ho trovato molto più facile da usare su Windows rispetto a virtualenv.

Se non è possibile installare un pacchetto, è necessario trovare il file binario per esso. http://www.lfd.uci.edu/~gohlke/pythonlibs/

Ho trovato questi binari molto utili.

Pip sta cercando di creare qualcosa chiamato ruota per le installazioni binarie.

pip install wheel 
wheel convert path\to\binary.exe 
pip install converted_wheel.whl 

Si dovrà fare anche questo per tutte le librerie richieste che non si installano e sono richieste per quel pacchetto.

Problemi correlati