如何将 Flask 简单应用程序转换为 EXE 文件(Flask 应用程序位于 PyQt 应用程序中)?

问题描述 投票:0回答:1

假设我有一个

app.py
文件(基本上是一个包含路由和简单方法的 Flask 应用程序),该文件导入/需要一个 db_manager.py (一个处理数据库查询和..)的文件

最后,我使用 PyQt5 使应用程序在类似桌面应用程序的应用程序中运行。

当我运行 pyqt.py(这是我运行 Flask 应用程序的应用程序)时,它运行得很好!

这是 pyqt 应用程序的代码片段:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
from threading import Thread
from app import app as flask_app  # Import the Flask app

class WebAppWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Flask App in PyQt5')
        self.setCentralWidget(QWebEngineView())
        self.showMaximized()
        self.start_flask_app()

        url = QUrl('http://localhost:5000')

        self.centralWidget().load(url)

    def start_flask_app(self):
        flask_thread = Thread(target=flask_app.run, kwargs={'host': 'localhost', 'port': 5000})
        flask_thread.daemon = True
        flask_thread.start()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = WebAppWindow()
    sys.exit(app.exec_())

这种方法使我的 Flask 应用程序看起来像桌面应用程序,是的,但我希望它将我的完整应用程序/文件夹打包到 .exe 文件(一个文件)中,运行时不会出现任何问题!

感谢您的帮助。

python flask pyqt
1个回答
0
投票

您可以使用pyinstaller:

pip install pyinstaller

然后运行

pyinstaller -F pyqt.py

请将此名称更改为 main.py 或其他库名称。

这会将您的应用程序编译为一个文件,但运行此文件时需要一些时间才能打开,因为每次打开此应用程序时都必须提取 exe。其他选项是-D。参见

pyinstaller --help

现在,您可能会遇到隐藏导入的问题。我建议制作 .spec 文件,其中包含有关您的应用程序的所有信息,如下所示。第一次运行上述命令后,您可能会看到规范文件。编辑块,如图所示:

    a = Analysis(
        ['runner.pyw'], # Your app main start file name
...
        hiddenimports=['PyQt6', 'os', "json", "uuid"], # Write all imports that are not in the first .py file i.e. pyqt.py in your case.

...
    )
    pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
    
    exe = EXE(
        pyz,
        a.scripts,
        [],
        exclude_binaries=True,
        name='pyqt', # Your app name that you want to set.
 ...

        icon=['Program\\icon.ico'], # You can add an icon if you want to
    )
    coll = COLLECT(
        exe,
        a.binaries,
        a.zipfiles,
        a.datas,
        strip=False,
        upx=True,
        upx_exclude=[],
        name='pyqt', # again your file name.
    )

所以,这就是模板。只是为了澄清:

  • ...意味着我已经编辑了一些选项 答案的寿命。

  • 寻找#符号,这是你要查看和更改的。

不要害怕这些混乱的设置,一旦你理解了它就很容易了。

如果有任何困惑,请随时询问。

© www.soinside.com 2019 - 2024. All rights reserved.