Встановіть пакет у virtualenv за допомогою apt-get


16

Відповідно до цієї відповіді , apt-getвстановлює пакети загальносистемні (з канонічних), і лише вони pipможуть встановлювати пакети у virtualenv (від Pypi).

Однак мені потрібно встановити пакет у virtualenv, який доступний лише через apt-get, тобто не розміщений Pypi.

Як це зробити?


Приємне питання, Палю.
rɑːdʒɑ

Відповіді:


8

Іншою альтернативою є завантаження файлу за допомогою apt-get download, вилучення його dpkg -xта переміщення вилучених файлів у ваш virtualenv:

Приклад:

apt-get download python-xyz

припустимо, що це призводить до:

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

Потім використовуйте dpkg для витягування частини даних у файлі .deb:

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

У щойно створеному ./xyz-tmpкаталозі у вас є всі файли, які були б встановлені /(root), якби ви використовували apt-get install.

Припустимо, що вони:

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

Вам все ще потрібно зіставити підкаталоги (наприклад, dist-packagesпорівняно site-packages), а потім перенести файли у ваш virtualenv (припускаючи virtualenv /home/user/.virtualenvs/py27):

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

Порівняно з моєю попередньою відповіддю, такий підхід має перевагу в тому, що вам не доведеться досліджувати, які файли встановлені, оскільки ви можете бачити їх у каталозі вилучення. Це все ще вимагає відображення каталогів між витягнутим архівом та virtualenv.


+1, ось ще один приклад такого підходу, який досить добре встановлює пакети, доступні лише через APT, у virtualenv - щось подібне нещодавно зробив за допомогою Python 3.7.
RichVel

0

Все, що потрібно для virtualenv, - це наявність пакетних файлів у піддереві вашої virtualenv. Отже, поки ви можете визначити, які файли встановлені в систему Python через apt-get, ви можете скопіювати ці файли у свій virtualenv. Сюди входять файли в каталозі пакунків сайтів, а також в інших місцях вашого піддерева Python (наприклад, скрипти).

Гіпотетичний приклад:

sudo apt-get python-xyz

Припустимо, він встановлює пакет з назвою "xyz" у вашу систему Python 2.7, ви можете отримати таке:

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

Скопіюйте файли, пов’язані з пакетом "xyz", у ваш virtualenv (припускаючи 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

Складність полягає у (1) визначенні, які файли належать до певного пакету, і (2) у відображенні відповідних підкаталогів між системою Python та virtualenv (наприклад, dist-packagesпорівняно site-packagesз прикладом вище).

Якщо хтось має більше досвіду з цим, будь ласка, прокоментуйте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.