在Virtualenv中导入PyQT4
问题描述
最近进行一个小项目,目的是实现在类似谷歌的界面中,在搜索框中输入 URL,将对应网站的截图即时返回给用户。
在后台实现过程中,采用了用 PyQT4 的 QtWebKit 来模拟浏览器对网页进行渲染,之后截图。但在部署过程中出现了问题,即在 virtualenv 中运行程序时无法 import PyQT4,同时也无法使用命令直接将 PyQT4 安装在虚拟环境中。
产生原因
由于 PyQT4 安装在主环境中,在虚拟环境中没有 PyQT4 的包,因此无法导入,命令安装 PyQT4 需要 sudo 权限,而用 sudo 安装时是采用 root 权限安装的,所以安装环境是在系统的主环境,因此无法简单的用命令在 virtualenv 中安装 PyQT4.
解决办法
因此,我们需要手动将 PyQT4 的包以及 sip.so 导入到 virtualenv 中来。
在已安装 PyQT4 的系统中搜索,我们可得到 PyQT4 包的位置,以及sip.so文件的位置
如果你是使用 python2.7 安装 PyQT4 的,则两者会在对应的如下位置:
/usr/lib/python2.7/dist-packages/PyQT4
/usr/lib/python2.7/dist-packages/sip.so
如果你是使用python3的,则将 python2.7 换为你对应的版本。
接下来,我们将这两个文件放在你的项目创建的 Virtualenv 目录下的 ./lib/python2.7/site-packages/
目录下,即可解决问题。
解决的原理是 dist-packages
是 Debian 类 Linux 系统的包安装默认位置,如果你用 sudo apt-get install
命令安装包,一般会安装到这个目录,而 site-packages
目录是 python 包的手动安装目录,将包放入这个目录下即可正常 import 和运行。