假设我有一个
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 文件(一个文件)中,运行时不会出现任何问题!
感谢您的帮助。
您可以使用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.
)
所以,这就是模板。只是为了澄清:
...意味着我已经编辑了一些选项 答案的寿命。
寻找#符号,这是你要查看和更改的。
不要害怕这些混乱的设置,一旦你理解了它就很容易了。
如果有任何困惑,请随时询问。