É possível adicionar pacotes Pyqt4/Pyside em uma caixa de areia VirtualEnv?
-
21-09-2019 - |
Pergunta
estou a usar Virtualenv com lucro no meu ambiente de desenvolvimento com web.py
, simplejson
e outros pacotes orientados para a Web.
Vou desenvolver um cliente Python simples usando o QT para reutilizar alguma API desenvolvida com web.py.
Alguém aqui instalou pyqt4 com sucesso com o VirtualEnv?
É possível?
Eu baixei todos os binários e tenho PyQt4
Instalado globalmente no meu diretório Python2.6.
Se eu não usar --no-site--packages
opção, o virtualenv inclui corretamente PyQt4
Na minha nova caixa de areia, mas, obviamente, com todos os pacotes globais que eu não preciso.
Existe uma maneira limpa de preparar uma nova caixa de areia com --no-site--packages
opção e depois adicione PyQt4
ou PySide
usando pip
, easy_install
Ou algum outro truque de mágica?
Solução
Deve ser suficiente para criar um virtualenv vazio e depois copiar o conteúdo do .../site-packages/PyQt4
diretórios nele.
Sugiro instalar o PYQT4 uma vez globalmente, faça uma cópia do diretório, desinstale -o e use esse truque para criar VES.
Outras dicas
Eu tenho o mesmo problema. Eu uso o VirtualEnvWrapper, então escrevi este script para criar um link para o PYQT em todos os novos ambiente virtual. Talvez seja útil para outra pessoa:
#!/bin/bash
# This hook is run after a new virtualenv is activated.
# ~/.virtualenvs/postmkvirtualenv
LIBS=( PyQt4 sip.so )
PYTHON_VERSION=python$(python -c "import sys; print (str(sys.version_info[0])+'.'+str(sys.version_info[1]))")
VAR=( $(which -a $PYTHON_VERSION) )
GET_PYTHON_LIB_CMD="from distutils.sysconfig import get_python_lib; print (get_python_lib())"
LIB_VIRTUALENV_PATH=$(python -c "$GET_PYTHON_LIB_CMD")
LIB_SYSTEM_PATH=$(${VAR[-1]} -c "$GET_PYTHON_LIB_CMD")
for LIB in ${LIBS[@]}
do
ln -s $LIB_SYSTEM_PATH/$LIB $LIB_VIRTUALENV_PATH/$LIB
done
Linux Debian, Python 2.7:
- Instale o Python-qt4 Globaly:
sudo apt-get install python-qt4
- Crie um link simbólico de pyqt4 para o seu Env virtual
ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
- Crie um link simbólico do SIP.so para o seu Env virtual
ln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
Para aqueles que desejam usar o PYQT4 em um Python 3 VirtualEnv (no OSX), você primeiro instala PYQT4 e SIP (usarei o Homebrew)
$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3
Em seguida, crie seu ambiente virtual
$ virtualenv ...
Finalmente, Symlink (altere as versões do SIP, PYQT4 e Python para aqueles instalados em sua máquina)
$ ln -s /usr/local/Cellar/sip/4.15.5/lib/python3.4/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.4/site-packages/
$ ln -s /usr/local/Cellar/pyqt/4.10.4/lib/python3.4/site-packages/PyQt4/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.4/site-packages/PyQt4
Perguntei se é possível instalar o Pyside de dentro do Virtualenv no canal irc.freenode.net #pyside e obteve uma resposta positiva da HugoPl. Então eu segui instruções de Binários Pyside para Microsoft Windows E funcionou. A saída está abaixo.
Z:\virtualenv\pyside>Scripts\activate.bat
(pyside) Z:\virtualenv\pyside>where python
Z:\virtualenv\pyside\Scripts\python.exe
(pyside) Z:\virtualenv\pyside>easy_install PySide
install_dir Z:\virtualenv\pyside\Lib\site-packages\
Searching for PySide
Reading http://pypi.python.org/simple/PySide/
Reading http://www.pyside.org
Reading http://www.pyside.org/files/pkg/
Best match: PySide 1.0.0beta1qt471
Downloading http://www.pyside.org/files/pkg/PySide-1.0.0beta1qt471.win32-py2.6.exe
Processing PySide-1.0.0beta1qt471.win32-py2.6.exe
Deleting c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp\EGG-INFO\scripts\py
ide-uic-script.py
Deleting c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp\EGG-INFO\scripts\py
ide-uic.exe
creating 'c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg' and adding 'c:\users\
iotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp' to it
creating z:\virtualenv\pyside\lib\site-packages\PySide-1.0.0beta1qt471-py2.6-win32.egg
Extracting PySide-1.0.0beta1qt471-py2.6-win32.egg to z:\virtualenv\pyside\lib\site-packages
Adding PySide 1.0.0beta1qt471 to easy-install.pth file
Installing pyside-uic-script.pyc script to Z:\virtualenv\pyside\Scripts
Installing pyside_postinstall.py script to Z:\virtualenv\pyside\Scripts
Installing pyside_postinstall.pyc script to Z:\virtualenv\pyside\Scripts
Installing pyside-uic-script.py script to Z:\virtualenv\pyside\Scripts
Installing pyside-uic.exe script to Z:\virtualenv\pyside\Scripts
Installed z:\virtualenv\pyside\lib\site-packages\pyside-1.0.0beta1qt471-py2.6-win32.egg
Processing dependencies for PySide
Finished processing dependencies for PySide
(pyside) Z:\virtualenv\pyside>python Scripts\pyside_postinstall.py -install
Generating file Z:\virtualenv\pyside\Scripts\qt.conf...
The PySide extensions were successfully installed.
Vamos supor que seu virtualenv seja chamado MyProject e você está usando o VirtualEnvWrapper. Uma plataforma UNIX também é assumida.
$ workon myProject
$ pip install --no-install SIP
$ pip install --no-install PyQt
$ cd ~/.virtualenvs/myProject/build/SIP
$ python configure.py
$ make
$ make install
$ cd ~/.virtualenvs/myProject/build/PyQt
$ python configure.py
$ make
$ make install
$ cd && rm -rf ~/.virtualenvs/myProject/build # Optional.
A maneira mais fácil é instalar isso: vext.pyqt4
Isso adicionará o sistema único PyQt4
Pacote para o seu virtualenv.
Ubuntu 16.04 Uso:
sudo apt install python3-pyqt4
mkvirtualenv --python=python3.5 venv
pip install --no-use-wheel vext.pyqt4
Para Pyside 1.2.1 e Ubuntu 12.4
Instalar compiladores, qt relacionados, fontes python
sudo apt-get install cmake qt4-qmake qt-sdk python-dev
Crie Virt Env comvirtualenvwrapper
Esteja pronto para compilar QT (~ 30 min)
$ mkvirtualenv ve_name
(ve_name)$ pip install PySide
Teste
$ python -c "from PyQt4 import QtCore; print QtCore.PYQT_VERSION_STR"
4.9.1
Se você instalou o PYQT via Brew em um Mac (especificamente estou no Mavericks):
ln -s /usr/local/Cellar/sip/4.15.2/lib/python2.7/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python2.7/site-packages
ln -s /usr/local/Cellar/pyqt/4.10.3/lib/python2.7/site-packages/PyQt4/ ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python2.7/site-packages/PyQt4
pip install pygments pyzmq
É claro que esses números de pastas de versão podem mudar com o tempo.
O que funcionou para mim foi copiar /PyQt4/
e sip.x86_64-linux-gnu.so
a partir de /usr/lib/python2.7/dist-packages
para <VIRTUALENV>/lib/python2.7/site-packages
e alterar as permissões de propriedade nesses arquivos copiados (já que as cópias eram de propriedade da raiz).
Expandir a resposta de Aaron Digulla, usando o GIT para acertar a lista de arquivos corretamente. Eu costumo fazer algo assim (de um shell do msysgit):
# Create temp git repo for the pristine Python installation
$ cd /c/Python27
$ git init -q
$ git add .
$ git commit -qm "Initial commit"
Em seguida, execute o instalador para PYQT4 (ou qualquer outra coisa). Depois disso, faça um tarball dos arquivos que o instalador adicionou e exclua o repo temp git, como segue:
# Stage the PyQt4-installed files and feed a list of their names to tar
# (note that there's no need to actually commit them)
$ git add --all
$ git diff --cached --name-only | tar -jcf pyqt4.tar.bz2 --files-from=-
$ rm -rf .git
Então você pode executar o desinstalador do PYQT4 (se você não quiser desordenar seu sistema Python), e simplesmente Umar pyqt4.tar.bz2
na sua pasta VirtualEnv. Se você já está confortável usando o Git, essa é uma ótima maneira de garantir que você obtenha tudo Os arquivos instalados por Pyqt4.
NOTA: Instalando o PYQT4 usando o instalador embalado também instala o SIP. Se você realmente quer usar Este SIP para criar ligações para seu próprio código C/C ++ dentro do seu virtualEnv, você deseja modificar os caminhos no sipconfig.py
Arquive depois de copiá -lo. Caso contrário, o sistema de construção do SIP ainda estará apontando para a pasta Python do sistema (por exemplo, C:\Python32
ou o que quer que seja), que não funcionará se você excluir todos os arquivos instalados pelo PYQT4 a partir daí. (Se você não tem nenhuma intenção de usar o SIP, provavelmente pode pular isso.)
Links simbólicos podem funcionar.
Eu uso Linux (Debian/Sid), Python 3.4, Pyside, VirtualEnv e Pycharm (IDE), mas essas mesmas instruções funcionarão para qualquer pacote e ambiente de desenvolvimento.
Links simbólicos entre /usr/lib/python3/dist-packages/PySide/
$VIRTUAL_ENV/lib/python3.4/site-packages/PySide/
trabalhe para mim.
cd $VIRTUAL_ENV/lib/python3.4/site-packages/
mkdir PySide
cd PySide`
for x in /usr/lib/python3/dist-packages/PySide/* ; do ln -s $x ; done
Curiosamente, se eu link simbólico, apenas o PySide
Diretório, ele não funciona. Preciso simplificar cada arquivo dentro do diretório. Isso pode ser uma limitação de Pyharm (meu IDE) - eu não sei.
Experimente este: pip install python-qt5