Instale o pacote no virtualenv usando o apt-get

11

De acordo com esta resposta , apt-get instala pacotes em todo o sistema (do canonical), e somente pip pode instalar pacotes em um virtualenv (do Pypi).

No entanto, eu preciso instalar um pacote em um virtualenv que só é acessível via apt-get , ou seja, não é hospedado pelo Pypi.

Como faço isso?

    
por Roman 04.02.2015 / 17:04

2 respostas

6

Outra alternativa é baixar o arquivo com apt-get download , extraí-lo com dpkg -x e mover os arquivos extraídos para o seu virtualenv:

Exemplo:

apt-get download python-xyz

assuma que isso resulta em:

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

Em seguida, use o dpkg para extrair a parte de dados do arquivo .deb:

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

No diretório ./xyz-tmp recém-criado, você agora tem todos os arquivos que seriam instalados em / (root) se você tivesse usado apt-get install .

Suponha que eles sejam:

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

Ainda é necessário mapear os subdiretórios (por exemplo, dist-packages vs. site-packages ) e, em seguida, mover os arquivos para o virtualenv (supondo um virtualenv /home/user/.virtualenvs/py27 ):

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

Em comparação com a minha resposta anterior, essa abordagem tem a vantagem de não precisar pesquisar quais arquivos foram instalados, porque você pode vê-los no diretório de extração. Ainda requer um mapeamento de diretórios entre o arquivo extraído e o virtualenv.

    
por Andreas Maier 27.10.2015 / 13:17
0

Tudo o que é necessário para um virtualenv é a presença dos arquivos do pacote na subárvore do seu virtualenv. Assim, contanto que você possa determinar quais arquivos foram instalados no sistema Python via apt-get, você pode copiá-los para o seu virtualenv. Isso inclui arquivos no diretório de pacotes do site, bem como em outros lugares dentro da subárvore do Python (por exemplo, scripts).

Exemplo hipotético:

sudo apt-get python-xyz

Suponha que ele instale um pacote chamado "xyz" em seu sistema Python 2.7, você pode obter isto:

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

Copie os arquivos relacionados ao pacote "xyz" para o seu virtualenv (assumindo um 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

A dificuldade é (1) determinar quais arquivos pertencem a um pacote específico e (2) mapear os subdiretórios correspondentes entre o sistema Python e o virtualenv (por exemplo, dist-packages vs. site-packages no exemplo acima).

Se alguém tiver mais experiência com isso, por favor, comente.

    
por Andreas Maier 27.10.2015 / 12:56