Installer le package dans virtualenv en utilisant apt-get

16

Selon cette réponse , apt-getinstalle les packages à l'échelle du système (à partir de canoniques), et ne pippeut installer des packages que dans un virtualenv (à partir de Pypi).

Cependant, j'ai besoin d'installer un package dans un virtualenv qui n'est accessible que via apt-get, c'est-à-dire qui n'est pas hébergé par Pypi.

Comment je fais ça?

romain
la source
Belle question Pal.
rɑːdʒɑ

Réponses:

8

Une autre alternative consiste à télécharger le fichier avec apt-get download, à l'extraire avec dpkg -xet à déplacer les fichiers extraits vers votre virtualenv:

Exemple:

apt-get download python-xyz

supposons que cela se traduit par:

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

Ensuite, utilisez dpkg pour extraire la partie données du fichier .deb:

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

Dans le ./xyz-tmprépertoire nouvellement créé , vous avez maintenant tous les fichiers qui auraient été installés sur /(root) si vous aviez utilisé apt-get install.

Supposons qu'ils soient:

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

Vous devez toujours mapper les sous-répertoires (par exemple, dist-packagesvs. site-packages) et pouvez ensuite déplacer les fichiers dans votre virtualenv (en supposant un virtualenv /home/user/.virtualenvs/py27):

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

Par rapport à ma réponse précédente, cette approche a l'avantage que vous n'avez pas à rechercher les fichiers installés, car vous pouvez les voir dans le répertoire d'extraction. Il nécessite toujours un mappage de répertoires entre l'archive extraite et virtualenv.

Andreas Maier
la source
+1, voici un autre exemple de cette approche, qui fonctionne très bien pour installer des packages qui ne sont accessibles que via APT dans un virtualenv - a fait quelque chose de similaire récemment en utilisant Python 3.7.
RichVel
0

Tout ce qui est nécessaire pour un virtualenv est la présence des fichiers de package dans la sous-arborescence de votre virtualenv. Aussi longtemps que vous pouvez déterminer quels fichiers ont été installés dans le système Python via apt-get, vous pouvez les copier dans votre virtualenv. Cela inclut les fichiers dans le répertoire des packages du site ainsi que dans d'autres endroits de votre sous-arborescence Python (par exemple des scripts).

Exemple hypothétique:

sudo apt-get python-xyz

Supposons qu'il installe un package nommé "xyz" dans votre système Python 2.7, vous pouvez obtenir ceci:

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

Copiez les fichiers liés au package "xyz" sur votre virtualenv (en supposant 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 difficulté est (1) de déterminer quels fichiers appartiennent à un package particulier, et (2) de mapper les sous-répertoires correspondants entre le système Python et virtualenv (par exemple dist-packagesvs site-packagesdans l'exemple ci-dessus).

Si quelqu'un a plus d'expérience avec cela, veuillez commenter.

Andreas Maier
la source