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?

Foi útil?

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

Link para GIST

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 virtualln -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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top