
Dado algum pacote python em /usr/share/pyshared/
ou /usr/lib/pythonX.Y/dist-packages/
( python-numpy
por python-scipy
exemplo), 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.py
etc.) para instalar ou tenha o seu próprio?
Basicamente, quero poder adicionar facilmente pacotes python, que possuem extensões C complexas ( ,,, numpy
etc. ) , a um virtualenv.scipy
pyQt/pyside
pygtk
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.ini
do arquivo deps
se parece com:
deps =
pytest
ruamel.venvgtk
e para qualquer virtualenv criado pip
irá instalar ruamel.venvgtk
e 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_ENV
ou 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.