Virtualenv no Ubuntu sem site-packages
-
05-07-2019 - |
Pergunta
Estou usando o virtualenv recentemente durante o desenvolvimento em Python. Eu gosto da idéia de um ambiente de desenvolvimento segregada utilizando a opção --no-site-packages, mas fazendo isso durante o desenvolvimento de um aplicativo de PyGTK pode ser um pouco complicado. Os módulos PyGTK estão instalados no Ubuntu, por padrão, e eu gostaria de fazer um virtualenv (com --no-site-packages) ciente de módulos específicos que estão localizados em outra parte do sistema.
Qual é a melhor maneira de fazer isso? Ou devo apenas chupa-lo e soltar a opção --no-site-packages?
Solução
$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv
$ cd myvirtualenv
$ source bin/activate
$ cd lib/python2.6/
$ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/
$ ln -s /usr/lib/pymodules/python2.6/pygtk.pth
$ ln -s /usr/lib/pymodules/python2.6/pygtk.py
$ ln -s /usr/lib/pymodules/python2.6/cairo/
$ python
>>> import pygtk
>>> import gtk
Outras dicas
Uma maneira é adicionar os caminhos para o seu código usando sys.path.
import sys
sys.path.append(somepath)
Outra maneira é usar o site, que processa .pth arquivos Além de adicionar a sys.path.
import site
site.addsitedir(sitedir, known_paths=None)
https://docs.python.org/library/site.html
Mas você provavelmente não quer adicionar este a todo o seu código relacionado.
Eu vi menção de estar sitecustomize.py usado para executar algo parecido com isso, mas depois de alguns testes que eu não poderia fazê-lo funcionar como seria de esperar.
Aqui menciona que auto-importação de sitecustomize.py terminou em 2.5, se a sua não no 2.5 experimentá-lo. (Basta adicionar um dos métodos Path Adicionar acima para o arquivo e solte-o no diretório de seu programa é executado) Um trabalho em torno método é mencionado no post para usuários de 2,5 e para cima.
I encontrar nesta situação, links simbólicos, ou mesmo copiar arquivos específicos (pacotes, módulos, extensões) funciona muito bem.
Ele permite que o programa para emular a ser executado no ambiente de destino, em vez de alterar a aplicação para se adequar ao ambiente de desenvolvimento.
Mesma coisa para algo como AppEngine.
Confira o roteiro postmkvirtualenv gancho aqui:
https://stackoverflow.com/a/9716100/60247
Nesse caso, ele está usando-o para importar PyQt e SIP após uma nova Virtualenv é criada, mas você pode adicionar os pacotes que você precisa LIBS.
e votar esse script, porque é fantástico:)
Se você quiser incluir os links para o sistema relevante python gtk-2.0 na virtualenv, você pode apenas usar pip para instalar ruamel.venvgtk :
pip instalar ruamel.venvgtk Você não tem de importação nada, as ligações são configurados durante a instalação.
Isto é especialmente útil se você estiver usando tox
, nesse caso, você só precisa incluir a dependência (para tox):
deps:
pytest
ruamel.venvgtk
e um ambiente recém configuração python2.7 terá os links relevantes incluídos antes de os testes são executados.
Informações mais detalhadas sobre como os links são a instalação pode ser encontrado em esta resposta