我正在使用 PyQt5 并使用 fbs 冻结应用程序。该应用程序允许用户运行 Python 脚本。然后我将脚本保存在 Python 文件中并运行 QProcess 来运行该文件。
将运行的脚本由用户编写。我希望能够运行导入特定库(如 NumPy)的脚本,而无需用户自己安装库。
如何从我冻结的 Python 环境中运行 QProcess?这样用户就不必安装任何东西来运行我的应用程序以外的脚本。
现在,冻结后,QProcess 使用机器上安装的默认 Python 环境。
我正在使用 PyQt5 并使用 fbs 冻结应用程序。该应用程序允许用户运行 Python 脚本。然后我将脚本保存在 Python 文件中并运行 QProcess 来运行该文件。
将运行的脚本由用户编写。我希望能够运行导入特定库(如 NumPy)的脚本,而无需用户自己安装库。
如何从我冻结的 Python 环境中运行 QProcess?这样用户就不必安装任何东西来运行我的应用程序以外的脚本。
现在,冻结后,QProcess 使用机器上安装的默认 Python 环境。
你不能因为你总是需要:
解释器(即 Python)和
库的依赖关系(例如,numpy 需要一些 dll)。
他们在另一个答案中提出的建议只有在您安装了解释脚本的 python 时才可行。
您可以使用在您的应用程序中导入用户脚本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()