0

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

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

如何从我冻结的 Python 环境中运行 QProcess?这样用户就不必安装任何东西来运行我的应用程序以外的脚本。

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

4

2 回答 2

2

你不能因为你总是需要:

  • 解释器(即 Python)和

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

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

于 2021-07-06T18:33:10.830 回答
0

您可以使用在您的应用程序中导入用户脚本importlib.machinery.SourceFileLoader

用户脚本.py

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

应用程序.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()
于 2021-07-06T18:07:51.177 回答