冻结后使用 QProcess 运行 Python 脚本

时间:2021-07-06 17:12:11

标签: python pyqt5 pyinstaller qprocess fbs

我正在使用 PyQt5 并使用 fbs 冻结应用程序。 该应用程序允许用户运行 Python 脚本。然后我将脚本保存在 Python 文件中并运行 QProcess 来运行该文件。

将运行的脚本由用户编写。 我希望能够运行导入特定库(如 NumPy)的脚本,而无需用户自行安装库。

如何从冻结的 Python 环境中运行 QProcess?这样除了我的应用程序之外,用户无需安装任何东西来运行他们的脚本。

现在,在冻结之后,QProcess 使用安装在机器上的默认 Python 环境。

2 个答案:

答案 0 :(得分:1)

你不能,因为你总是需要:

  • 解释器(即 Python)和

  • 库的依赖关系(例如,numpy 需要一些 dll)。

他们在另一个答案中提出的建议只有在您安装了解释脚本的 python 时才可行。

答案 1 :(得分:0)

您可以使用 importlib.machinery.SourceFileLoader

在您的应用中导入用户脚本

user_script.py

import numpy as np
print("hello from user_script.py")
print(np.zeros(1))

app.py

from importlib.machinery import SourceFileLoader
def load_user_script(path):
    SourceFileLoader("user_module", path).load_module()

要在单独的线程中运行,请使用 QThread

from importlib.machinery import SourceFileLoader
from PyQt5 import QtCore

class Worker(QtCore.QThread):
    def __init__(self, path, parent = None):
        super().__init__(parent)
        self._path = path
    def run(self):
        SourceFileLoader("user_module", self._path).load_module()

worker = Worker(path)
worker.start()