Пакет установки в использование virtualenv склонного - добирается

Согласно этому ответу, apt-get пакеты установок в масштабе всей системы (от канонического), и только pip может установить пакеты в virtualenv (от Pypi).

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

Как я делаю это?

16
задан 13 April 2017 в 05:24

2 ответа

Все, что необходимо для virtualenv, является присутствием файлов пакета в поддереве Вашего virtualenv. Таким образом, пока можно определить, какие файлы были установлены в систему, которую получает Python через Кв. - можно скопировать файлы в 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 в примере выше).

, Если у кого-либо есть больше опыта с этим, прокомментируйте.

0
ответ дан 23 November 2019 в 02:37

Другая альтернатива должна загрузить файл 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 каталог, у Вас теперь есть все файлы, которые были бы установлены на / (корню) использовали Вас 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.

8
ответ дан 23 November 2019 в 02:37

Другие вопросы по тегам:

Похожие вопросы: