Согласно этому ответу, apt-get
пакеты установок в масштабе всей системы (от канонического), и только pip
может установить пакеты в virtualenv (от Pypi).
Однако я должен установить пакет в virtualenv, который только доступен через apt-get
, т.е. не размещается Pypi.
Как я делаю это?
Все, что необходимо для 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
в примере выше).
, Если у кого-либо есть больше опыта с этим, прокомментируйте.
Другая альтернатива должна загрузить файл 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.