可以从setuptools setup.py中要求PyQt吗?

时间:2011-01-07 17:44:25

标签: python pyqt setuptools distutils

我正在构建一个使用PyQt的小应用程序,并且很高兴在setup.py中声明该依赖项。

然而,根据this blog(谷歌首次点击pyqt setuptools)说它无法完成,最后一段here也不会尝试这样做。

想法?也许我应该切换到PySide上的PyPi

更新

install_requires = [ 'pyqt >= 0.7' ]中显而易见的setup.py给了我:

D:\3rd\BuildBotIcon\my-buildboticon\python>setup.py test
running test
install_dir .
Checking .pth file support in .
C:\Python26-32\pythonw.exe -E -c pass
Searching for pyqt>=4.7
Reading http://pypi.python.org/simple/pyqt/
Reading http://www.riverbankcomputing.com/software/pyqt/
Reading http://www.riverbankcomputing.com/software/pyqt/download
No local packages or download links found for pyqt>=4.7
error: Could not find suitable distribution for Requirement.parse('pyqt>=4.7')

4 个答案:

答案 0 :(得分:5)

是的,PyQT软件包没有使用distutils / setup.py进行安装,因此无法使用easy_install或pip进行安装。您需要手动下载并安装它。

这也意味着你将它放在你的requires元数据中,因为easy_install和pip会尝试安装它并失败。

我不知道PySide是否有用,但也没有setup.py,也拒绝使用easy_install / pip进行安装,所以不是一个好的选择。 :)

另一个选择是使用distutils重新打包PyQt,但这可能需要做很多工作。

答案 1 :(得分:2)

虽然接受的答案最初是正确的Python Wheels现在提供了一种安装C扩展包(如PyQt5)的方法,而无需从源代码编译。

PyPi目前在Python3上为多个平台提供PyQt5的.whl个文件,包括MacOS X, Linux (any), Win32 and Win64。例如,这是在Mac上在Python3上安装PyQt5时的输出:

mfitzp@MacBook-Air ~ $ pip3 install pyqt5
Collecting pyqt5
  Downloading PyQt5-5.6-cp35-cp35m-macosx_10_6_intel.whl (73.2MB)
    100% |████████████████████████████████| 73.2MB 2.5kB/s 
Collecting sip (from pyqt5)
  Downloading sip-4.18-cp35-cp35m-macosx_10_6_intel.whl (46kB)
    100% |████████████████████████████████| 49kB 1.8MB/s 
Installing collected packages: sip, pyqt5
Successfully installed pyqt5-5.6 sip-4.18

如果您的目标是Python3 + PyQt5,那么在setup.py中将PyQt5指定为普通依赖项应该没有问题。

答案 2 :(得分:1)

虽然你可以pip install pyqt5感谢现在可用的轮子(由@mfitzp建议),但setup.py通过install_requires不能要求它。原因是setuptools不知道如何安装pip知道如何操作的轮子,而PyQT5仅作为PyPI上的轮子可用(没有源分布,即没有tar.gz文件)。有关详细信息,请参阅此emailbug report

答案 3 :(得分:0)

Setuptools >= 38.2.0现在知道如何安装轮子。因此,简单的答案是安装最新版本的setuptools,并要求您的开明的用户群也这样做。要在安装时强制使用setup => 38.2.0的setuptools,请参阅this relevant answer elsewhere

自从一年前发布setuptools 38.2.0以来,该问题的所有先前答案都已过时,过分错误且没有用。从好的方面来说,这恰恰说明了为什么StackOverflow上仅存在可接受答案的原因是UX anti-pattern