No Debian, como adiciono um pacote Python em dist-packages a um virtualenv?

No Debian, como adiciono um pacote Python em dist-packages a um virtualenv?

Dado algum pacote python em /usr/share/pyshared/ou /usr/lib/pythonX.Y/dist-packages/( python-numpypor python-scipyexemplo), como adiciono esse pacote a um virtualenv?

Ao adicionar o pacote ao virtualenv, é necessário que ele use o método de instalação "normal" do python ( setpy.pyetc.) para instalar ou tenha o seu próprio?

Basicamente, quero poder adicionar facilmente pacotes python, que possuem extensões C complexas ( ,,, numpyetc. ) , a um virtualenv.scipypyQt/pysidepygtk

Responder1

Como você indicou, geralmente é melhor fazer uma roda, especialmente se você reinstalar regularmente.

Para ligações gtk do python, isso não funcionou para mim, e eu precisava de alguma maneira de testar o código usando tox(que cria o virtualenvs para você com --no-site-packages). Para fins de teste, seria bom o suficiente (para mim) vincular as versões relevantes instaladas do sistema, mas não tudo de site-packages/ dist-packages.

Para isso criei um pacote instalável (ruamel.venvgtk), que configura os links apropriados para Python2.7 e Python3.4 em sistemas baseados em Debian (Ubuntu, Linux Mint). Isso é feito durante a configuração do programa, portanto não há necessidade de alterá-lo. A seção tox.inido arquivo depsse parece com:

deps =
    pytest
    ruamel.venvgtk

e para qualquer virtualenv criado pipirá instalar ruamel.venvgtke criar os links relevantes.

Responder2

Sim, quando seu virtualenv está ativo, você precisa instalar o pacote necessário usando distutils o método de instalação "normal" do Python ( python setup.py install), ou com uma ferramenta ciente de virtualenv (por exemplo, pip install package).

A versão do pacote que você instalar será a versão do pacote ativo para o virtualenv. Não importa se você cria o virtualenv usando virtualenv MY_ENVou virtualenv --no-site-packages MY_ENV. No primeiro caso todos os pacotes instalados em seu sistema Python estarão disponíveis no virtualenv, mas qualquer pacote que você instalar no virtualenv irá mascarar a versão em seu sistema Python enquanto o virtualenv estiver ativo. No segundo caso, você terá um ambiente Python isolado no virtualenv, com apenas os pacotes da biblioteca padrão e tudo o que você instalar lá disponíveis.

Esteja ciente de que pacotes como Numpy e Scipy não fornecem binários pré-construídos no Linux, então você precisará se sentir confortável em construí-los se não quiser usar as versões disponíveis através do seu gerenciador de pacotes.

Responder3

Acho que, como essa pergunta não tem atividade há mais de um ano (em março de 2014), ninguém tem uma resposta, então escreverei como resolvi o problema.

Para pacotes cujo método de instalação de origem respeita virtualenvs (numpy/scipy, pyside), use rodas para evitar ter que reconstruir em cada ambiente.

Para pacotes que não o fazem (GTK), depende de como eles se conectam ao python.

informação relacionada