9

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

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

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

pip install sip虚拟环境和pip install PyQt5内部都返回错误。

有人可以提供我应该做什么的“如何做”指南吗?

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

4

5 回答 5

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]

那么这个答案应该可以说明这一点。基本上,PyPI 仅提供指向主页和/或源的链接——而不是可下载的包或鸡蛋。以下是PyQt5SIP PyPI 页面的链接。我知道包管理器不提供包似乎很奇怪,但事实就是如此。

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

于 2013-08-26T14:20:55.233 回答
9

假设您已经全局安装了 PyQt5,有一种方法可以让您的 virtualenv 访问它,而无需使用--system-site-packages. 一个名为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'.

于 2016-05-03T09:24:50.287 回答
3

我如何让我的 PyQt5、Python33 Windows7x64 在 vi​​rtualenv 中工作:

首先,确保您已匹配所有内容的 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()

如果您收到此错误“..failed to start, could not find or load the Qt platform plugin "windows."(或类似的),您必须更新您的 DirectX。通过 Microsoft 执行此操作。

一旦你完全确定 PyQt5 在 Windows 中工作,然后继续。

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

    从 PyQt5 导入 QtCore、QtGui、QtWidgets

  • 尝试从这个 virtualenv 中再次运行相同的应用程序

不好了!dll的另一个错误! 是什么赋予了?在 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-freeze 为一个不错的 exe。你去运行它,哦,不!更多的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")])
于 2014-03-05T13:55:30.180 回答
0

我在安装 PyQt5 和 SIP 时遇到了同样的问题。解决 PyQt4 的此问题的解决方案,如Is it possible to add PyQt4/PySide packages on a Virtualenv sandbox? 为我工作。

我从 virtualenv/site-packages 目录中手动创建了指向 PyQt5 和 sip.so 的符号链接。一个丑陋的解决方案,但让事情正常进行。

于 2014-01-18T16:16:32.057 回答
0

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

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

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

于 2018-03-29T10:16:28.740 回答