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?
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.
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.