2009-12-14 7 views
6

Abbiamo un'installazione python comune per tutti i nostri sistemi al fine di garantire che ogni sistema abbia la stessa installazione python e per facilitare i problemi di configurazione. Questa installazione si trova su un'unità condivisa. Disponiamo inoltre di più piattaforme che condividono questa installazione. Andiamo in conflitto con i file specifici della piattaforma impostando l'opzione di configurazione --exec-prefix durante la compilazione di python.Come posso gestire le uova Python per più piattaforme in un'unica posizione?

Il mio problema è che ora voglio installare un uovo usando easy_install (o altrimenti) che dipende dalla piattaforma. easy_install mette l'uovo nella directory dei pacchetti del sito della parte indipendente dalla piattaforma dell'installazione. Il nome dell'uovo ha la piattaforma in esso, quindi non ci dovrebbero essere conflitti. Ma python caricherà solo il primo che trova. (Quindi, su Solaris potrebbe provare a caricare l'uovo di Linux). La modifica del file easy-install.pth può cambiare quello che trova, ma è abbastanza inutile.

Posso spostare i file .egg in una directory di pacchetti dipendenti dalla piattaforma e quindi utilizzare pkg_resources.require() per caricarli (o regolare manualmente il percorso). Ma sembra che non dovrei farlo da quando la piattaforma è nel nome dell'uovo.

Esiste un modo più generico per garantire che python carichi l'uovo per la piattaforma corretta?

+0

L'uovo contiene estensioni C, o è puro pitone? – codeape

+0

Sì, c'è un'estensione C. Altrimenti non avrebbe importanza perché il codice non sarebbe dipendente dalla piattaforma. In particolare, è il modulo PyPerforce, nel caso tu sia curioso. – Philbert

risposta

2

Quello che ho finito con il procedere è stato spostare manualmente l'uovo dipendente dalla piattaforma nella directory di pacchetti di siti specifici della piattaforma (come specificato allo http://docs.python.org/install/index.html). Poi ho fatto un altro easy-install.pth nella stessa directory, elencando le uova da installare.

Questo sarebbe molto più comodo se easy_install onorasse il file exec_prefix e mettesse le uova dipendenti dalla piattaforma nella corretta posizione "non-module module distribution". Forse lo chiederò ai ragazzi di easy_install.

1

Python dispone di un numero sufficiente di hook per rendere ciò possibile, ma probabilmente non è saggio. Se vuoi veramente implementarlo, guarda su PEP 302 e inizia a fare hacking sul codice sorgente easy_install o distribute. Come sai, non c'è davvero alcuna logica in easy-install.pth.

Probabilmente stareste molto meglio semplicemente tenendo traccia dei pacchetti Python che volete installare. Ad esempio potresti scrivere il tuo pacchetto Python che dipende solo dal set desiderato.

+0

E/O usare il pacchetto python virtualenv per gestire i pacchetti solo per quel progetto – RyanWilcox

2

Provare virtualenv ... http://pypi.python.org/pypi/virtualenv ... consente di creare un ambiente isolato con la propria interprete python + cartella site_packages. Quindi non hai mai conflitti con i pacchetti installati nel percorso locale.

0

Utilizzare "easy_install -m" per installare tutti i pacchetti specifici della piattaforma, in modo che non ci sia alcuna versione predefinita su sys.path. In questo modo, la risoluzione della versione viene eseguita in fase di esecuzione e verranno prese in considerazione le informazioni sulla piattaforma.

Problemi correlati