Python Tkinter 与 Flask API 和子进程

Python Tkinter with Flask API and Subprocess

我可以 运行 来自 subprocess 中另一个 python 文件的函数吗?

我使用 pyinstallertkinter 转换为 executable 文件。我想尽可能地 deploy/run .exe 文件到另一台计算机而不安装 python.

#gui.py
from tkinter import *
import os
import subprocess

root = Tk()
root.geometry("300x150")

def backendStart():
  subprocess.Popen(["test.py"], shell=True)

label = Label(root, text="Connection String", fg="grey", font=("Helvetica", 15, "bold"))
label.pack(pady=(0,3))


root.after_idle(backendStart)
root.mainloop()

这是我的样本app.py

from flask import Flask, jsonify
from flask_restful import Api, Resource
from flask_socketio import SocketIO, emit
from flask_cors import CORS
import random
from connection import cursor

app = Flask(__name__)
app.config["DEBUG"] = True
api = Api(app)
CORS(app)
socketio = SocketIO(app, cors_allowed_origins="*")

@socketio.on("connect")
def ClientConnection():
  print("Client is Connected")

@socketio.on("realtime", namespace="/sample-socket")
def RealTimeData():
  while True:
    num = random.randint(1, 100)
    emit("data", {"random": num})
    socketio.sleep(1)

@socketio.on("disconnect")
def ClientDisconnected():
  print("client has disconnected")

class HomePage(Resource):
  def get(self):
    return jsonify(msg="hello world")

api.add_resource(HomePage, "/")

if __name__ == '__main__':
  socketio.run(app, host="192.168.0.109", port=5000)

目前,我制作了一个 .spec 文件,用于配置名称、徽标和包含的 files/libs。只要我将 app.py 与数据库的 connection.py 一起粘贴到构建文件夹中,.exe 文件就可以工作。

但是有了这个设置,我确实需要安装 python 以及我用于 app.pyconnection.py

的库
Could I run a function from another 
python file inside subprocess?

你可以使用 multiprocessing.Process()

编辑:
专家解答见here
替代解决方案:
假设你想要 运行 app.exe(即 app.py),你可以将它们全部打包到一个文件夹中(--onedir)并将这些 exe 和 pyd 的子文件夹....在一起,就像

gui
----flask (and other folders)
----*.pyd
----app.exe
----gui.exe
----python39.dll

您将需要一个自定义规范文件来执行此操作。
https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles