【问题标题】:Dynamically importing .py files after compiling编译后动态导入.py文件
【发布时间】:2021-03-13 06:03:21
【问题描述】:

我已经尝试在网上查找,但老实说,我现在迷路了。

我正在尝试查找是否有办法导入 python 脚本并在我的 Python 程序编译后运行它们。

例如,假设我有一个main.py,这样:

import modules.NewModule

a = NewModuleClass()
a.showYouWork()

然后我用pyinstaller 编译main.py,这样我的目录看起来像:

main.exe
modules/NewModule.py

我的最终目标是制作一个程序,可以动态读取文件夹中的新 Python 文件(这将被编码)并使用它们(我正在努力的部分)。我知道这是可能的,因为这就是 Blender 3D 中附加组件的工作方式,但我已经努力了好几个小时才弄清楚这一点。我认为我只是不擅长在 Google 中选择正确的术语。

也许我只需要将模块目录中的所有 Python 文件转换为 .pyc 文件?那么,我将如何使用它们呢?

另外,如果这里是重复的(可能是),请告诉我。我在这个网站上也找不到这个问题。

【问题讨论】:

标签: python python-module compiled


【解决方案1】:

你可能仅仅因为没有问题就找不到详细的答案。 PyInstaller 并没有真正将 Python 脚本编译成机器代码可执行文件。它只是组装然后与嵌入式 Python 解释器一起放入一个文件夹中,或者创建一个压缩的单个文件可执行文件,该可执行文件将在运行时自动将自身解压缩到包含该文件的临时文件夹中。

从那时起,您就拥有了一个几乎标准的 Python 环境,带有普通的 .pyc 文件,其中可以包含普通的 Python 指令,例如调用 importlib 以动态加载其他 Python 模块。您只需在导入模块之前将包含模块的目录附加到sys.path。另一个可能的警告是,pyinstaller 只获取必需的模块而不是完整的 Python 安装,因此您必须确保动态模块不依赖于缺少的标准模块,或者准备好面对ImportError

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多