Installa il pacchetto in virtualenv usando apt-get


16

Secondo questa risposta , apt-getinstalla i pacchetti a livello di sistema (da canonico) e pippuò installare pacchetti solo in virtualenv (da Pypi).

Tuttavia, devo installare un pacchetto in un virtualenv accessibile solo tramite apt-get, cioè non ospitato da Pypi.

Come lo faccio?


Bella domanda Pal.
r 4dʒɑ

Risposte:


8

Un'altra alternativa è scaricare il file con apt-get download, estrarlo con dpkg -xe spostare i file estratti su virtualenv:

Esempio:

apt-get download python-xyz

supponiamo che ciò si traduca in:

./python-xyz_1.2.3-3ubuntu5_amd64.deb

Quindi, utilizzare dpkg per estrarre la parte di dati del file .deb:

dpkg -x python-xyz_1.2.3-3ubuntu5_amd64.deb ./xyz-tmp

Nella ./xyz-tmpdirectory appena creata , ora hai tutti i file che sarebbero stati installati su /(root) se avessi usato apt-get install.

Supponiamo che siano:

./xyz-tmp/usr/lib/python2.7/dist-packages/xyz/
./xyz-tmp/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info

È ancora necessario mappare le sottodirectory (ad es. dist-packagesVs. site-packages), quindi è possibile spostare i file nella virtualenv (assumendo virtualenv /home/user/.virtualenvs/py27):

mv ./xyz-tmp/usr/lib/python2.7/dist-packages/* /home/user/.virtualenvs/py27/lib/python2.7/site-packages/

Rispetto alla mia precedente risposta, questo approccio ha il vantaggio di non dover ricercare quali file sono stati installati, poiché è possibile visualizzarli nella directory di estrazione. Richiede ancora una mappatura delle directory tra l'archivio estratto e virtualenv.


+1, ecco un altro esempio di questo approccio, che funziona abbastanza bene per installare pacchetti accessibili solo tramite APT in un virtual virtual - recentemente ha fatto qualcosa di simile usando Python 3.7.
RichVel,

0

Tutto ciò che serve per un virtualenv è la presenza dei file del pacchetto nella sottostruttura del tuo virtualenv. Quindi finché puoi determinare quali file sono stati installati nel sistema Python tramite apt-get, puoi copiarli nel tuo virtualenv. Ciò include i file nella directory dei pacchetti del sito e in altri punti della sottostruttura di Python (ad es. Script).

Esempio ipotetico:

sudo apt-get python-xyz

Supponiamo che installi un pacchetto chiamato "xyz" nel tuo sistema Python 2.7, potresti ottenere questo:

/usr/lib/python2.7/dist-packages/xyz/
/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info

Copia i file relativi al pacchetto "xyz" sul tuo virtualenv (assumendo un virtualenv /home/user/.virtualenvs/py27):

/home/user/.virtualenvs/py27/lib/python2.7/site-packages/xzy/
/home/user/.virtualenvs/py27/lib/python2.7/site-packages/xzy-1.2.3.egg-info

La difficoltà è (1) nel determinare quali file appartengono a un determinato pacchetto e (2) nel mappare le corrispondenti sottodirectory tra il sistema Python e virtualenv (es. dist-packagesVs. site-packagesnell'esempio sopra).

Se qualcuno ha più esperienza con questo, si prega di commentare.

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.