如何在苹果系统上安装PyQt4

如何在苹果系统上安装PyQt4,第1张

安装PtQt4前你需准备: 

Xcode (10.6.1 自带Xcode)

Qt

SIP

PyQt4

创建了一个pyqt文件夹在硬盘根目录下,并将sip-4.12.1.tar.gz和PyQt-mac-gpl-snapshot-4.8.4.tar.gz放到其中并解压。

1、先安装qt,默认安装,这一步大部分人不会有问题,跳过。

2、接下来,打开终端(Terminal,在 Applications(应用程序)/Utilities(实用工具)/ 下),在终端输入:export VERSIONER_PYTHON_PREFER_32_BIT=yes。

3、使用"cd 路径"命令将当前目录设为sip-4.12.1,如:  cd /pyqt/sip-4.12.1/, 然后进行配置(configure)【Re-build SIP in 32bit 】在终端中执行

python configure.py --arch i386

配置(configure)完成后就开始编译,在终端中执行引用make clean(清除以前的安装信息)make

编译完成后就安装,在终端中执行引用sudo make install

在这个过程中没出现错误就是安装成功了 

编译安装PyQt4,过程和上面的一样。 【Build PyQt4 in 32bit 】

在终端中使用"cd 路径"命令将当前目录设为PyQt-mac-gpl-snapshot-4.8.4,如

引用cd /Users/schi/pyqt/PyQt-mac-gpl-snapshot-4.8.4

然后进行配置(configure),在终端中执行引用python configure.py --use-arch i386

配置时会遇到引用Determining the layout of your Qt installation... 

This is the GPL version of PyQt 4.6 (licensed under the GNU General Public 

License) for Python 2.6.2 on darwin. 

Type '2' to view the GPL v2 license. 

Type '3' to view the GPL v3 license. 

Type 'yes' to accept the terms of the license. 

Type 'no' to decline the terms of the license. 

Do you accept the terms of the license? 

输入yes,再按回车就行 

配置(configure)完成后就开始编译,在终端中执行

引用make cleanmake

编译比较花时间,请耐心等待。

编译完成后就安装,在终端中执行

引用sudo make install

在这个过程中没出现错误就是安装成功了  

也可以在IDLE中导入PyQt4的模块,能成功导入就说明安装成功

Python代码

from PyQt4 import QtCore, QtGui

下面分析一下安装过程中可能遇到的问题:

1.问题如下

##############

ld: warning: in /Library/Frameworks/Python.framework/Python, missing required architecture x86_64 in file

Undefined symbols:

  "_Py_Initialize", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyLong_AsVoidPtr", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyErr_Print", referenced from:

      PyCustomWidgets::getModuleAttr(char const*, char const*)in pluginloader.o

      PyCustomWidgets::getModuleAttr(char const*, char const*)in pluginloader.o

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyString_FromString", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyType_IsSubtype", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyModule_GetDict", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyObject_CallObject", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyObject_CallFunctionObjArgs", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyList_Append", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_Py_IsInitialized", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyDict_Next", referenced from:

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyImport_ImportModule", referenced from:

      PyCustomWidgets::getModuleAttr(char const*, char const*)in pluginloader.o

      PyCustomWidgets::PyCustomWidgets(QObject*)in pluginloader.o

  "_PyObject_GetAttrString", referenced from:

      PyCustomWidgets::getModuleAttr(char const*, char const*)in pluginloader.o

ld: symbol(s) not found

collect2: ld returned 1 exit status

make[1]: *** [libpythonplugin.dylib] Error 1

make: *** [all] Error 2

这个问题的原因就是:qt是在32位mac上编译的,但pyqt默认是在64位机子上编译的,所以我们在编译的时候要制定编译环境:是i386 还是x86_64.

请参考如下的信息:

The problem is that the Qt library is 32bit while, by default, python builds PyQt4 in 64bit. That caused problem when it tried to link 64bit object files with 32bit Qt library. To fix this issue, we need to force python to build PyQt4 in 32bit, and we also need to re-build SIP in 32bit mode. If you use the python version that comes with Mac OS (2.5 for Snow Leopard), make sure that it runs in 32bit mode by issuing the command

2.个问题如下:

>>>from PyQt4 import QtGui

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ImportError: dlopen(/Library/Python/2.6/site-packages/PyQt4/QtGui.so, 2): Symbol not found: __ZN13QPyTextObject16staticMetaObjectE

Referenced from: /Library/Python/2.6/site-packages/PyQt4/QtGui.so

Expected in: flat namespace

in /Library/Python/2.6/site-packages/PyQt4/QtGui.so

这个问题是所有的包安装都没有问题但是当导入QtGui或其他包时,总报这个问题,这个问题的原因是,当前pyqt release的包本身带的一个bug,PyQt-mac-gpl-snapshot-4.8.3, 所以你下载下个要release的包就可以了。如我下的是:PyQt-mac-gpl-snapshot-4.8.4。

下面给大家介绍一下我写的自动安装这些程序的python源码:

#!/usr/bin/env python

"""

Automated installer for Python 2.6 (final)

This installer is able to handle any previous

versions of Python.

NOTE: This file *must* be copied to

//nssgsvr/tools/pyInstall_OSX when modified!

"""

import os

import sys

import re

import shutil

import platform

import tarfile

# Constants

PYTHON_PKGS = {"dmgFile" : "python-2.6.1-macosx2008-12-06.dmg",

               "mpkgList": ["MacPython.mpkg"] }

#WXPYTHON_PKGS = {"dmgFile" : "wxPython2.8-osx-unicode-2.8.9.2-universal-py2.6.dmg",

#               "mpkgList":  ["wxPython2.8-osx-unicode-universal-py2.6.pkg"] }

#ANGELIA

XCODE_PKGS = {"dmgFile" : None,  "mpkgList":  ["Xcode.mpkg"]}

QT_PKGS = {"dmgFile" : "qt-mac-cocoa-opensource-4.6.2.dmg",

             "mpkgList":  ["Qt.mpkg"] }

THIRD_PARTY_INSTALL = ["sip-4.12.1", "PyQt-mac-gpl-snapshot-4.8.4","Pyro-3.9.1", "pyserial-2.4"]

# Environment constants

TCSH_ENV_FILE = '/etc/csh.login'

BASH_ENV_FILE = '/etc/profile'

SCRIPTS_ROOT_ENV = "TEST_SCRIPTS_ROOT"

TARGET_VER = "2.6"

IS_POSIX = (os.name == 'posix')

IS_MAC = (sys.version.find('Apple') != -1)

IS_OSX = (IS_MAC and IS_POSIX)

IS_OSX_LEOPARD = (IS_OSX and platform.mac_ver()[0].startswith('10.5'))

IS_OSX_SNOWLEOPARD = (IS_OSX and platform.mac_ver()[0].startswith('10.6'))

# NSSGSVR Constants

MOUNT_POINT = "/Volumes/Test"

HOSTSERVER = "NSSGSVR.global.avidww.com"     # Server that contains SQA scripts

SHARE = "TEST"             # NSSGSVR share that contains the Python scripts directory

USER = "qatest"

PASSWD = "Cmqat/$/$/$"     # slashes needed to escape special character '$'

##################################################################################

class InstallerError(Exception):

    """ Installer Exception class """

    def __init__(self, description):

        self.desc = description

def __str__(self):

        return self.desc

class PkgInstaller:

    """ Installer class for pkg files."""

    def __init__(self, packageName, mpkgList, dmgFile = None ):

        """

        packageName (str)  Name of "package" to be installed

        dmgFile     (str)  Path to dmg file to mount

        mpkgList    (list) List of mpkg files to launch when dmg file is mounted

        """

        self.dmgFile = dmgFile

        self.packageName = packageName

        self.mpkgList = mpkgList

self.mountpoint = os.path.join(os.getcwd(), self.packageName)

        self.removeMountPoint = False

if not type(self.mpkgList) == list:

            raise InstallerError("Expected list for parameter mpkgList received %s" % /

                                 type(self.mpkgList))

# Mountroot must exist for hdiutil to succeed.

        if not os.path.exists(self.mountpoint):

            print "Creating mountroot %s" % (self.mountpoint)

            os.makedirs(self.mountpoint)

            self.removeMountPoint = True

def _cleanup(self):

        """

        ## Performs cleanup

        """

        unmount_cmd = "hdiutil unmount %s" % (self.mountpoint)

if self.dmgFile:

            print "Unmounting %s" % (self.mountpoint)

            ret = os.system(unmount_cmd)

            if ret:

                raise InstallerError("hdiutil unmount of %s failed: errno %d" % /

                                 (self.mountpoint, ret))

            

            if self.removeMountPoint:

                print "Removing directory %s" % (self.mountpoint)

                os.rmdir(self.mountpoint)

def _mount_dmg(self):

        """ Mounts the dmg file. """

        hdiutil_mount = "hdiutil mount %s -mountpoint %s" % (self.dmgFile,

                                                         self.mountpoint)

        

        if os.path.exists(self.dmgFile):

            print "Mounting %s" % (self.dmgFile)

            ret = os.system(hdiutil_mount)

            if ret:

                raise InstallerError("hdiutil mount of %s failed: errno %d" % (self.dmgFile, ret))

        else:

            raise InstallerError("DMG file %s does not exist" % (self.dmgFile))

            

    def _launch_pkgs(self):

        """ Launches the pkg installers. """

        for install_file in self.mpkgList:

            if install_file.endswith('pkg'):

                install_path = os.path.join(self.mountpoint, install_file)

                if not os.path.exists(install_path):

                    raise InstallerError("File %s does not exist" % (install_path))

                # 'installer' is Apple's package installer tool.

                # -pkg specifies the package to be installed

                # -target specifies the destination install volume

                # -allow allows the installer to automatically upgrade any previous packages

                # see 'man installer' for more details.

                cmd = 'installer -pkg "%s" -target / -verbose -allow' % (install_path)

                ret = os.system(cmd)

                if ret:

                    msg = "Package %s failed to install: err %d" % (install_file, ret)

                    raise InstallerError(msg)

            else:

                raise InstallerError("File %s is not a valid package file" % install_file)

                

    def install(self):

        """ Main installer method. """

print "Installing package %s" % (self.packageName)

        if self.dmgFile:  

            self._mount_dmg()

        self._launch_pkgs()

        self._cleanup()

        print "Finished installing package %s" % (self.packageName)

def set_all_test_scripts_root(path):

    """

    ## Sets TEST_SCRIPTS_ROOT to <path>for

    ## both Bash and Tcsh shells if needed.

    """

    bash_line = 'export TEST_SCRIPTS_ROOT="%s"' % (path)

    tcsh_line = 'setenv TEST_SCRIPTS_ROOT "%s"' % (path)

1、首先安装PyDev插件或者使用eclipse的在线安装插件功能。2、去下载pyqt4的windows安装程序,.exe文件装好以后会在lib下出现pyqt4的库安装完毕后,在空敏余Eclipse的Window->Preference->PyDev->Interpreter-Python下的Libraries添加PyQt安装后在Python文件夹下的路径,如图然后在ForcedBuiltins选项卡中添加PyQt4中的模块,可以在IDLE中使用importPyQt4help(PyQt4)查看有哪些模块,分别添加进去,如图复制这些字符,粘贴的时候有换行符,使用word的替换功能,把换行符^p替换成,,即可然斗滚后加入到PyQt4.QAxContainer,PyQt4.Qsci,PyQt4.Qt,PyQt4.QtCore,PyQt4.QtDeclarative,PyQt4.QtDesigner,PyQt4.QtGui,PyQt4.QtHelp,PyQt4.QtMultimedia,PyQt4.QtNetwork,PyQt4.QtOpenGL,PyQt4.QtScript,PyQt4.QtScriptTools,PyQt4.QtSql,PyQt4.QtSvg,PyQt4.QtTest,PyQt4.QtWebKit,PyQt4.QtXml,PyQt4.QtXmlPatterns,PyQt4.phonon,PyQt4.pyqtconfig,PyQt4.uic好了之后是这个样子第拿肆一个事例程序'''Createdon2013-6-20@author:Administrator'''importsysfromPyQt4importQtGui,QtCoreclassMyWidget(QtGui.QWidget):def__init__(self,parent=None):QtGui.QWidget.__init__(self,parent)self.setFixedSize(200,120)self.quit=QtGui.QPushButton("Quit",self)self.quit.setGeometry(62,40,75,30)self.quit.setFont(QtGui.QFont("Times",18,QtGui.QFont.Bold))self.connect(self.quit,QtCore.SIGNAL("clicked()"),QtGui.qApp,QtCore.SLOT("quit()"))app=QtGui.QApplication(sys.argv)widget=MyWidget()widget.show()sys.exit(app.exec_())

1、下载PyQt

*** 作系统是64位的,安装的是Python2.7.5,所以选择下载:PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x64.exe

单击安装即可。

2、配置PyCharm

File -->Settings -->External Tools -->单击“ADD”(加号图标) -->d出对话框,做如下设置

1).设置“Qt Designer”-- 这个主要用来设计 Qt界面

在Qt Designer的设置中,Program选择PyQt安装目录中 designer.exe 的路径

Work directory 使用变量$ProjectFileDir$(点击后面的 Insert macro 按钮或兄可以不用输入双击上屏)

2).设置“PyUIC”-- 这个主要是用来将 Qt界面 转换成 py代码

在PyUIC的设置中,其他的都差不多敏扒,Program 写入Python的地址,Parameters写入

复制代码

代码如下:

D:\Python\Python27\Lib\site-packages\PyQT4\uic\pyuic.py $FileName$ -o $FileNameWithoutExtension$.py

把上面的Python路径修改成自己的即可!

Work directory 使用变量$ProjectFileDir$

运行调衫拿袭试程序,带着QtGui的程序,之前按照,调试的时候,打个断点,点击那个爬虫,下面观察变量。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12358277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存