web-dev-qa-db-fra.com

Installer le paquet dans virtualenv en utilisant apt-get

Selon cette réponse , apt-get installe les packages dans l’ensemble du système (à partir de canonique), et seul pip peut installer les packages dans un virtualenv (à partir de Pypi).

Cependant, je dois installer un paquet dans un virtualenv uniquement accessible via apt-get, c’est-à-dire qui n’est pas hébergé par Pypi.

Comment je fais ça?

14
Roman

Une autre alternative est de télécharger le fichier avec apt-get download, de l'extraire avec dpkg -x et de déplacer les fichiers extraits vers votre virtualenv:

Exemple:

apt-get download python-xyz

supposons que cela entraîne:

./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 répertoire nouvellement créé ./xyz-tmp, vous avez maintenant tous les fichiers qui auraient été installés sur / (racine) si vous aviez utilisé apt-get install.

Supposons qu'ils sont:

./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-packages et site-packages), puis vous pouvez déplacer les fichiers dans votre virtualenv (en supposant que 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 présente l’avantage de ne pas avoir à rechercher quels fichiers ont été installés, car vous pouvez les voir dans le répertoire d’extraction. Cela nécessite toujours un mappage des répertoires entre l'archive extraite et virtualenv.

7
Andreas Maier

Tout ce qui est nécessaire pour un virtualenv est la présence des fichiers de package dans la sous-arborescence de votre virtualenv. Donc, tant 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 du répertoire des packages de site ainsi que d’autres emplacements de votre sous-arborescence Python (par exemple, des scripts).

Exemple hypothétique:

Sudo apt-get python-xyz

Supposons qu’il installe un paquet 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 que 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é consiste (1) à déterminer quels fichiers appartiennent à un paquet particulier et (2) à mapper les sous-répertoires correspondants entre le système Python et le virtualenv (par exemple, dist-packages contre site-packages dans l'exemple ci-dessus).

Si quelqu'un a plus d'expérience dans ce domaine, veuillez commenter.

0
Andreas Maier