是否可以在Virtualenv沙箱上添加PyQt4 / PySide包?

时间:2009-12-25 21:28:34

标签: python pyqt4 virtualenv pyside

我在web.pysimplejson和其他面向网络的软件包的开发环境中使用Virtualenv获利。
我将使用Qt开发一个简单的python客户端来重用一些用web.py开发的Api。

这里有人用Virtualenv成功安装了PyQt4吗? 有可能吗?

我已经下载了所有二进制文件,并在我的python2.6目录中全局安装了PyQt4 如果我不使用--no-site--packages选项,Virtualenv在我的新沙箱中正确包含PyQt4,但显然包含了我不需要的所有全局包。

是否有一种干净的方法来准备一个包含--no-site--packages选项的新沙箱,然后使用PyQt4PySide或其他一些魔法添加pipeasy_install欺骗?

13 个答案:

答案 0 :(得分:52)

创建一个空的virtualenv就足够了,然后将.../site-packages/PyQt4目录的内容复制到其中。

我建议全局安装一次PyQt4,制作目录的副本,卸载它,然后使用这个技巧创建VE。

答案 1 :(得分:46)

我有同样的问题。我使用virtualenvwrapper,所以我编写了这个脚本来在每个新的虚拟环境中创建一个指向PyQt的链接。也许对其他人有用:

#!/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 to gist

答案 2 :(得分:28)

Linux debian,python 2.7:

  • 安装python-qt4 globaly:sudo apt-get install python-qt4
  • 创建PyQt4与虚拟环境ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
  • 的符号链接
  • 创建sip.so的符号链接到您的虚拟环境ln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/

答案 3 :(得分:8)

对于那些想在Python 3 virtualenv(在OSX上)使用PyQt4的人,首先安装PyQt4和SIP(我将使用自制软件)

$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3

然后创建您的虚拟环境

$ virtualenv ...

最后符号链接(更改机器上安装的SIP,PyQt4和Python的版本)

$ 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

答案 4 :(得分:7)

我问是否可以在irc.freenode.net #pyside频道的virtualenv中安装PySide,并从 hugopl 得到肯定答案。所以我按照PySide Binaries for Microsoft Windows的说明进行操作。输出如下。

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.

答案 5 :(得分:6)

让我们假设您的virtualenv名为myProject,并且您正在使用virtualenvwrapper。还假设了一个Unix平台。

$ 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.

答案 6 :(得分:5)

最简单的方法是安装:vext.pyqt4

这会将单个系统PyQt4包添加到您的virtualenv。

Ubuntu 16.04用法:

sudo apt install python3-pyqt4
mkvirtualenv --python=python3.5 venv
pip install --no-use-wheel vext.pyqt4

答案 7 :(得分:4)

对于PySide 1.2.1和Ubuntu 12.4

安装编译器,Qt相关,python源

sudo apt-get install cmake qt4-qmake qt-sdk python-dev

使用virtualenvwrapper

创建virt env

准备好编译Qt(~30分钟)

$ mkvirtualenv ve_name
(ve_name)$ pip install PySide

测试

$ python -c "from PyQt4 import QtCore; print QtCore.PYQT_VERSION_STR"
4.9.1

答案 8 :(得分:4)

如果您在Mac上通过brew安装了pyqt(特别是我在小牛队):

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 

当然,这些版本文件夹编号可能会随着时间的推移而改变。

答案 9 :(得分:3)

对我有用的是将/PyQt4/sip.x86_64-linux-gnu.so/usr/lib/python2.7/dist-packages复制到<VIRTUALENV>/lib/python2.7/site-packages并更改这些复制文件的所有权(因为副本归root所有)

答案 10 :(得分:2)

扩展Aaron Digulla的答案,使用git获取正确的文件列表非常方便。我通常做这样的事情(来自msysGit shell):

# Create temp git repo for the pristine Python installation
$ cd /c/Python27
$ git init -q
$ git add .
$ git commit -qm "Initial commit"

然后运行PyQt4(或其他)的安装程序。之后,对安装程序添加的文件进行tarball并删除temp git repo,如下所示:

# 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

然后你可以运行PyQt4的卸载程序(如果你不想弄乱你的系统Python),只需将pyqt4.tar.bz2解压缩到你的virtualenv文件夹中。如果您已经习惯使用git,这是确保所有安装PyQt4文件的好方法。

注意:使用打包的安装程序安装PyQt4也会安装SIP。如果你真的想使用这个SIP在你的virtualenv中为你自己的C / C ++代码创建绑定,你需要在复制之后修改sipconfig.py文件中的路径。否则,SIP的构建系统仍将指向系统Python文件夹(例如,C:\Python32或其他),如果从那里删除所有PyQt4安装的文件,这将无效。 (如果您没有打算自己使用SIP,可以跳过这个。)

答案 11 :(得分:2)

符号链接可能有用。

我使用Linux(Debian / sid),python 3.4,PySide,virtualenv和PyCharm(IDE),但这些相同的说明适用于任何包和开发环境。

/usr/lib/python3/dist-packages/PySide/ $VIRTUAL_ENV/lib/python3.4/site-packages/PySide/之间的符号链接为我工作。

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

有趣的是,如果我只对PySide目录进行符号链接,则它不起作用。我需要对目录中的每个文件进行符号链接。这可能是PyCharm(我的IDE)的限制 - 我不知道。

答案 12 :(得分:-1)

试试这个: pip install python-qt5