Domanda

Qualcuno può spiegarmi cosa sta succedendo con Python in Ubuntu 9.04?

Sto cercando di far girare virtualenv , e il flag --no-site-pacchetti sembra non fare nulla con Ubuntu. Ho installato virtualenv 1.3.3 con easy_install (che ho aggiornato a setuptools 0.6c9 ) e tutto sembra essere installato su /usr/local/lib/python2.6/dist-packages

I presumo che durante l'installazione di un pacchetto usando apt-get, sia collocato in /usr/lib/python2.6/dist-packages/ ?

Il problema è che esiste un /usr/local/lib/python2.6/site-packages che rimane vuoto. Sembrerebbe (guardando il percorso in un virtualenv ) che questa è la cartella che virtualenv usa come backup. Quindi anche se ho omesso --no-site-pacchetti , non posso accedere ai miei pacchetti di sistemi locali da nessuno dei miei virtualenv.

Quindi le mie domande sono:

  1. Come posso ottenere virtualenv per puntare a uno dei dist-pacchetti ?
  2. A quali dist-pacchetti devo puntare? /usr/lib/python2.6/dist-packages o /usr/local/lib/python2.6/dist-packages/
  3. Qual è il punto di /usr/lib/python2.6/site-packages ? Non c'è niente lì dentro!
  4. È il primo arrivato, primo servito sul percorso? Se ho una versione più recente del pacchetto XYZ installata in /usr/local/lib/python2.6/dist-packages/ e una precedente (da Ubuntu Repos / apt-get) in /usr/lib/python2.6/dist-packages , quale viene importato quando importa xyz ? Suppongo che questo sia basato sull'elenco dei percorsi, sì?
  5. Perché diavolo è così confuso? C'è qualcosa che mi manca qui?
  6. Dove si definisce che easy_install dovrebbe essere installato su /usr/local/lib/python2.6/dist-packages ?
  7. Ciò influirà anche su pip ?

Grazie a tutti coloro che possono chiarire questo!

È stato utile?

Soluzione

Sarei tentato di hackerarlo rendendo i pacchetti del sito un collegamento a dist-pacchetti, ma immagino che ciò potrebbe influenzare altri casi in cui si desidera installare un'estensione diversa da quella di Ubuntu. Non riesco a pensare a un'altra risposta a 1 tranne che a modificare le fonti di virtualenv (con ubuntu e virtualenv così popolari non sarei sorpreso di trovare già esistenti versioni ottimizzate).

Ri 2, se stai usando / usr / local / bin / python dovresti usare la versione / usr / local della lib (compresi i pacchetti del sito) e viceversa se stai usando / usr / bin / python .

Per quanto riguarda 3, ci sarà qualcosa lì se si installa un'estensione per / usr / bin / python da fonti (non tramite easy_install o dalla distribuzione di Ubuntu).

Per quanto riguarda 4, sì, le voci precedenti sul percorso hanno la precedenza.

Per quanto riguarda 5, easy_install è facile solo nel suo nome: fa così tanta magia oscura che è stato accuratamente tenuto fuori dalla libreria standard di Python nonostante la sua convenienza perché il consenso tra noi committenti di Python è che la magia oscura profonda per comodità è " facile " solo in superficie.

Per quanto riguarda il 6, penso che sia una modifica di Ubuntu a easy_install - se è giusto, allora è definito ovunque i gestori di Ubuntu Canonical o altri prendano le loro decisioni collettive.

Ri 7, scusa, non ne ho idea - non ho Ubuntu abbastanza recente da controllare.

Altri suggerimenti

Credo che la risposta di Mike Orr da la mailing list di virtual-env sembra essere la migliore. Si noti che il PO ha pubblicato questa domanda in entrambi i luoghi.

Contenuto originale della posta:

Anni fa Debian ha creato / usr / local / lib / pythonVERSION / site-pacchetti, e compilato il binario Python per includerlo nella ricerca predefinita sentiero. Ubuntu ha seguito l'esempio di Debian come al solito. The Python agli sviluppatori non è piaciuto questo perché si otterrebbero interferenze con a installato localmente / usr / local / bin / python usando gli stessi pacchetti del sito directory. Ubuntu alla fine decise di abbandonare i pacchetti del sito e di usarli dist-pacchetti invece, un nome che hanno inventato per non farlo interferire con qualsiasi cosa. La storia imminente è là fuori da qualche parte se lo cerchi su Google, da qualche parte nel bug tracker di Python o distrai SIG o ad esempio.

Il sistema funziona, almeno se si utilizza il pacchetto Ubuntu virtualenv. Alcune persone hanno avuto problemi utilizzando un virtualenv installato localmente su Ubuntu perché le voci magic sys.path non venivano aggiunte o qualcosa. Non sono sicuro di --no-site-pacchetti perché non lo uso mai quell'opzione: eseguo PIL e mysqldb dai pacchetti Ubuntu perché a volte può essere difficile compilare le loro dipendenze C. (Ho bisogno del file di intestazione a destra, Python ignora i file di intestazione, ecc.)

Quindi vanno dentro i pacchetti Ubuntu Python / Usr / lib / pythonVERSION / dist-packages. O quel supporto per Python directory per qualche motivo. I pacchetti Python installati localmente entrano in / usr / local / lib / pythonVERSION / dist-pacchetti di default. Ogni volta che installare un sistema Ubuntu 9.04 che eseguo:

$ sudo apt-get install python-setuptools (6.0c9) $ sudo apt-get install python-virtualenv (1.3.3) $ sudo easy_install pip $ sudo pip installa virtualenvwrapper

I virtualenv funzionano bene in questo modo, anche se non ho provato --no-site-pacchetti.

  

Sto provando a girare virtualenv e il flag --no-site-pacchetti   sembra non fare nulla con Ubuntu. Ho installato virtualenv 1.3.3 con   easy_install (che ho aggiornato a setuptools 0.6c9)

Queste versioni sono entrambe in Ubuntu 9.04, quindi la stai rendendo più difficile installandoli localmente.

  

e tutto   sembra essere installato in /usr/local/lib/python2.6/dist-packages

Si

  

Suppongo che durante l'installazione di un pacchetto usando apt-get, sia inserito in /   usr / lib / python2.6 / dist-pacchetti /?

Si

  
      
  1. È il primo arrivato, primo servito sul percorso? Se ne avessi uno più recente   versione del pacchetto XYZ installato in /usr/local/lib/python2.6/dist-   pacchetti / e precedenti (da ubuntu repos / apt-get) in / usr / lib /   python2.6 / dist-pacchetti, quale viene importato quando si importa xyz?   Suppongo che questo sia basato sull'elenco dei percorsi, sì?
  2.   

sys.path viene scansionato in ordine. L'unica cosa divertente è che le uova .pth essere inserito prima o poi nel percorso di quanto alcune persone si aspettino. Ma se stai usando pip per tutto ciò che può fare (ad es. per installare pip stesso, uova precompilate e un'istantanea di una directory locale che è a copia piuttosto che un collegamento uovo), non avrai comunque molte uova .pth.

  
      
  1. Perché diavolo è così confuso? C'è qualcosa che io sono   manca qui?
  2.   

Non è ben documentato. L'ho capito scansionando il web.

  
      
  1. Interesserà anche pip?
  2.   

Sì, pip verrà installato automaticamente su / / / pythonVERSION / site-packages local / lib usr. Utilizza " pip install -E $ VIRTUAL_ENV nomepacchetto " da installare in un virtualenv.

Non dovresti davvero toccare l'installazione di Ubuntu Python a meno che tu non stia costruendo strumenti di amministrazione di sistema o costruendo qualcosa che potrebbe essere considerato un nuovo servizio di sistema.

Se si utilizza Ubuntu per sviluppare o distribuire applicazioni Python, creare sempre il proprio Python dal sorgente, caricarlo e utilizzarlo per la distribuzione. In questo modo avrai tutte le directory nel posto giusto e virtualenv funzionerà normalmente. Se distribuirai diverse app Python sul server, rendi Python live in un posto come / home / python o / opt / python o da qualche parte al di fuori della tua home directory . Assicurati di disporre delle autorizzazioni di scrittura per il gruppo di sviluppatori ( utenti ?) In modo che le persone possano aggiungere facilmente pacchetti.

Ciò consente anche di avere due livelli di pacchetti. Quelli che sono i tuoi strumenti standard interni possono essere installati nella tua distribuzione Python e far parte del tarball che dispieghi, e solo i pacchetti specifici dell'app sarebbero in virtualenv.

Non aggiornare o modificare il sistema Ubuntu installato Python.

Bene, ho un Ubuntu 9.04 e ho provato rapidamente a configurare un paio di sandbox con pacchetti di siti e uno senza. E le cose funzionano bene.

L'unica differenza nell'approccio che ho adottato è che ho usato il pacchetto python-virtualenv di Ubuntu (1.3.3). E supponiamo che sia ottimizzato dal team di Ubuntu per adattarsi alle configurazioni di Ubuntu.

Per riassumere disabilita virtualenv easy_installed per un po ', usa python-virtualenv in pacchetto e vedi se soddisfa le tue aspettative.

In effetti utilizziamo un'installazione simile per la produzione senza alcun problema. Il resto ha già risposto ad Alex.

Un altro modo per risolverlo:
https://stackoverflow.com/a/17265840/202168

Ricordati di farlo in ogni virtualenv dove ne hai bisogno, ma non fa affidamento su hack o una versione speciale di virtualenv

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top