【问题标题】:How to install PyQt5 on a new virtualenv and work on an IDLE如何在新的 virtualenv 上安装 PyQt5 并在 IDLE 上工作
【发布时间】:2013-08-05 06:14:55
【问题描述】:

我使用官方河岸网站提供的安装程序在我的 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 而不是全局 IDLE。 (希望我没有做错任何事情......也许请更正。)

【问题讨论】:

  • are returning errors 你不觉得告诉我们哪些错误可以帮助解决你的问题吗?
  • 我不是 OP,但在运行 pip install sip 时遇到错误 FileNotFoundError: [Errno 2] No such file or directory: '/home/naught101/.virtualenvs/virtualenv-3/build/sip/setup.py'。没有其他投诉。

标签: python pyqt virtualenv pip pyqt5


【解决方案1】:

Anon 添加 Qt libraryPath 的解决方案对我有用。我在 Windows 上使用 Anaconda3。但我找到了替代方案。

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

conf文件好像是…\Anaconda3\Scripts\.qt-post-link.bat创建的。

【讨论】:

    【解决方案2】:

    假设你已经全局安装了 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'.

    【讨论】:

    • 这是最干净的方法。在 Mac 上,您可以将库符号链接到 virtualenv。
    【解决方案3】:

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

    首先,确保您已匹配所有内容的 64 位或 32 位版本。我正在 64 位平台上开发并使用 64 位版本。我没有用 32 位完全测试这个。请仔细阅读。

    • 使用 Windows 安装程序二进制文件安装了 Python33 x64。
    • 使用 MSI 安装程序从 Riverbank 将 PyQt5 x64 安装到 default 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 中导入 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: p>

    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")])
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        虚拟环境中的“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。我希望我能提供详细信息,但我目前正在自己​​解决这个问题。

        【讨论】:

        • 应该可以使用pip 安装可从PyQt5 下载页面下载的wheel 文件。
        猜你喜欢
        • 1970-01-01
        • 2017-01-27
        • 2013-05-26
        • 2021-09-19
        • 2016-04-07
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多