如何在新的virtualenv上安装PyQt5并处理IDLE

时间:2013-08-04 12:26:34

标签: python pyqt virtualenv pip pyqt5

我使用官方河岸网站提供的安装程序在我的win7系统(python 3.3)上全局安装了PyQt5。

然后我创建了一个新的–no-site-packages virtualenv,其中我在键入pip list后看到的唯一内容是pip(1.4)和setuptools(0.9.7)。

现在的问题是,我需要在那里安装完整的PyQt5,这似乎不可能使用pip工具。

虚拟环境中的pip install sippip install PyQt5都会返回错误。

有人可以提供“我该怎么做”的指导,我该怎么做?

我也希望能够从IDLE中使用PyQt5(新的virtualenv),所以 我将tcl文件夹从我的Python 的全局安装复制到我的虚拟环境的位置,并创建了一个快捷方式定位:{location of my virtual enviroment}\Scripts\pythonw.exe C:\Python33\Lib\idlelib\idle.pyw所以我可以打开virtualenv IDLE而不是全局。 (希望我没有做错任何事情......请纠正。)

5 个答案:

答案 0 :(得分:11)

  

虚拟环境中的“pip install sip”和“pip install PyQt5”都返回错误。

如果你所指的错误是:

Could not find any downloads that satisfy the requirement [pyqt5|sip]

No distributions at all found for [pyqt5|sip]

然后这个answer应该阐明这一点。基本上,PyPI只提供主页和/或来源的链接 - 而不是可下载的包或蛋。以下是PyQt5SIP PyPI页面的链接。我知道包管理器不提供包这似乎很奇怪,但就是这样。

你必须在virtualenv中从源代码下载,编译和安装sip和pyqt5。我希望我能提供详细信息,但我正在解决这个问题。

答案 1 :(得分:3)

我如何在virtualenv工作中使用PyQt5,Python33 Windows7x64:

首先,确保您匹配64或32位版本的所有内容。我正在使用64位平台进行开发,并使用64位版本。我没有用32位对它进行全面测试。请仔细阅读。

  • 使用Windows安装程序二进制文件安装Python33 x64。
  • 使用MSI安装程序从河岸安装PyQt5 x64到默认 Python33。 PIP不起作用。
  • 使用Python33作为基础创建virtualenv,无站点包
  • 将PyQt5文件夹从Python33 / Lib / site-packages /复制到virtualenv / Lib / site-packages。
  • 不要删除PyQT5文件夹!

确保PyQt5正在进行基础Python33安装:

from PyQt5 import QtCore, QtGui, QtWidgets

创建一个主窗口并启动它。 如果使用PyQt4代码进行测试,则会交换一些类。 (例如在QtGui和QtWidgets中)

从PyQt5导入QtGui,QtWidgets,QtCore

class Main(QtWidgets.QMainWindow):

def __init__(self):
    print("Main __init__ fired")
    QtWidgets.QMainWindow.__init__(self)

    #Setup the UI
    print("Setting up UI")
    self.ui = Ui_MainWindow()
    self.ui.setupUi(self)

def main():
    print("fired main()")

    #Setup the main application object
    app = QtWidgets.QApplication(sys.argv)

    window = Main()
    window.show()

    sys.exit(app.exec_())

#Run GUI
if __name__ == "__main__":
    main()

如果您收到此错误“..无法启动,无法找到或加载Qt平台插件”窗口。“(或类似),您必须更新DirectX。通过Microsoft执行此操作

一旦你完全确定PyQt5在Windows中运行,那么继续。

  • 在您将PyQt5文件夹复制到
  • 的位置激活您的virtualenv
  • 确保可以从virtualenv中导入PyQt5。您可能需要根据所使用的IDE来操作路径。在virtualenv中运行导入

    来自PyQt5导入QtCore,QtGui,QtWidgets

  • 尝试从此virtualenv

  • 中再次运行相同的应用程序

OH NO! dlls的另一个错误!是什么给出的?在virtualenv中,QT dll库的路径是错误的。即使你告诉PyQt5直接安装到你的virtualenv也会发生这种情况。在创建QApplication对象之前,必须添加到libraryPaths的路径。这是一个解决方案(将 venv 替换为您的virtualenv路径):

def main():
    print("fired main()")

    #ADD THE FOLLOWING BEFORE CREATING A QApplication()
    QtCore.QCoreApplication.setLibraryPaths(['C:/venv/Lib/site-packages/PyQt5/plugins'])

    #Ensure path was added and correct
    print(QtCore.QCoreApplication.libraryPaths())

    #Setup the main application object
    app = QtWidgets.QApplication(sys.argv)

    #See what the paths were
    print(app.libraryPaths())

    window = Main()
    window.show()

    sys.exit(app.exec_())

现在代码应该从你的virtualenv内部运行。您可以从基本安装中删除PyQt5目录,或者将来将其移动到其他位置。

最有可能以相对的方式对路径进行样板处理,但这可能会导致cx-freeze出现问题。说到这个。

现在你已经完成了所有内容,然后你将你的PyQt5应用程序cx冻结成一个很好的exe。你去运行它和 OH NO!更多dll麻烦。

您可以手动将 libEGL.dll 从site-packages / PyQt5复制到应用程序的根目录构建文件夹,或将以下行添加到您的setup.py文件中以获取cx-freeze:

import sys

from cx_Freeze import setup, Executable

#ADD THIS MUST INCLUDE FOR Windows 7.
include_files = [('c:/venv/Lib/site-packages/PyQt5/libEGL.dll', 'libEGL.dll')]

setup(
    name="My App",
    version="0.1",
    description="PyQt5 App.",

    #ADD THIS
    options={'build_exe': {'include_files': include_files}},

    executables=[Executable("c:/venv/src/myApp_main.py",
                            base="Win32GUI",
                            targetName="MyApp.exe")])

答案 2 :(得分:3)

假设你已经全局安装了PyQt5,你可以通过一种方式在不使用--system-site-packages的情况下让你的virtualenv访问它。名为vext的程序包使其成为可能。它也适用于其他软件包,但在这种情况下,我们只是设置PyQt5支持。

从你的virtualenv中运行以下命令,你应该好好去:

pip install vext.pyqt5

要检查状态,请运行vext -l。你应该看到如下内容:

Running in virtualenv [enabled]
pyqt5.vext

或者,运行vext -c pyqt5.vext。你应该看到如下内容:

import sip: [success]
import PyQt5: [success]

或者你可以尝试导入PyQt5,例如python -c 'import PyQt5'

答案 3 :(得分:0)

我遇到了安装PyQt5和SIP的相同问题。解决Is it possible to add PyQt4/PySide packages on a Virtualenv sandbox?上指定的PyQt4问题的解决方案对我有用。

我从virtualenv / site-packages目录中手动创建符号链接到PyQt5和sip.so。一个丑陋的解决方案,但让事情有效。

答案 4 :(得分:0)

Anon的添加Qt libraryPath的解决方案对我有用。我在Windows上使用Anaconda3。但我找到了另一种选择。

将文件…\Anaconda3\qt.conf复制到虚拟环境中的Scripts文件夹。现在我不需要更改任何Python代码。

conf文件似乎是由…\Anaconda3\Scripts\.qt-post-link.bat创建的。