强制 PyInstaller 包含所有内置模块

Force PyInstaller to include all built-in modules

我们正在构建一个动态导入其他 Python 并运行它的应用程序。我们无法提前知道其他 Python 文件可能需要哪些模块,但这些其他 Python 文件应该能够依赖所有可用的内置模块。

由于 PyInstaller 的分析方式,如果我们的主应用程序不使用它们,我们将丢失大量内置模块。

有没有办法强制 PyInstaller 将所有内容都包含在 Lib 中(不是站点包)?

注意:我们已经考虑建立一个隐藏的导入列表,但是:

  1. 这需要以编程方式完成,这样如果我们更改 Python 版本(从而更改内置模块列表),我们就不需要手动重建它
  2. 这“感觉”就像在解决分析步骤而不是删除它,我有点担心可能产生的副作用。

有第三方模块stdlib_list,拥有库中的所有模块。它还包括内置模块。从 PyInstaller 的 hook for main/any 模块中使用它:

import stdlib_list
hiddenimports = list(stdlib_list.stdlib_list())

我的研究表明,没有内置的方法可以列出受污染环境中的标准模块。我想这就是 PyInstaller 没有包含标准库的简单选项的原因。