我正在使用 PyQt5 并使用 fbs 冻结应用程序。 该应用程序允许用户运行 Python 脚本。然后我将脚本保存在 Python 文件中并运行 QProcess 来运行该文件。
将运行的脚本由用户编写。 我希望能够运行导入特定库(如 NumPy)的脚本,而无需用户自行安装库。
如何从冻结的 Python 环境中运行 QProcess?这样除了我的应用程序之外,用户无需安装任何东西来运行他们的脚本。
现在,在冻结之后,QProcess 使用安装在机器上的默认 Python 环境。
答案 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()