Instale o pacote no virtualenv usando o apt-get

16

De acordo com esta resposta , apt-getinstala pacotes em todo o sistema (do canonical) e só pippode instalar pacotes em um virtualenv (do Pypi).

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

Como faço isso?

romano
fonte
Boa pergunta Pal.
2141515

Respostas:

8

Outra alternativa é baixar o arquivo com apt-get download, extraí-lo com dpkg -xe 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 dos dados do arquivo .deb:

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

No ./xyz-tmpdiretório recém-criado , agora você tem todos os arquivos que teriam sido instalados no /(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

Você ainda precisa mapear os subdiretórios (por exemplo, dist-packagesvs. site-packages) e pode mover os arquivos para o seu virtualenv (assumindo um virtualenv /home/user/.virtualenvs/py27):

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

Comparado à minha resposta anterior, essa abordagem tem a vantagem de não ser necessário pesquisar quais arquivos foram instalados, porque você pode vê-los no diretório de extração. Ele ainda requer um mapeamento de diretórios entre o archive extraído e o virtualenv.

Andreas Maier
fonte
+1, aqui está outro exemplo dessa abordagem, que funciona muito bem para instalar pacotes acessíveis apenas via APT em um virtualenv - fez algo semelhante recentemente usando o Python 3.7.
RichVel 20/09/19
0

Tudo o que é necessário para um virtualenv é a presença dos arquivos do pacote na subárvore do seu virtualenv. Desde que você possa determinar quais arquivos foram instalados no sistema Python via apt-get, você pode copiá-los em seu virtualenv. Isso inclui arquivos no diretório de pacotes do site, bem como em outros lugares dentro da subárvore 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 o seguinte:

/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-packagesvs. site-packagesno exemplo acima).

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

Andreas Maier
fonte