强制 PyInstaller 包含所有内置模块
Force PyInstaller to include all built-in modules
我们正在构建一个动态导入其他 Python 并运行它的应用程序。我们无法提前知道其他 Python 文件可能需要哪些模块,但这些其他 Python 文件应该能够依赖所有可用的内置模块。
由于 PyInstaller 的分析方式,如果我们的主应用程序不使用它们,我们将丢失大量内置模块。
有没有办法强制 PyInstaller 将所有内容都包含在 Lib 中(不是站点包)?
注意:我们已经考虑建立一个隐藏的导入列表,但是:
- 这需要以编程方式完成,这样如果我们更改 Python 版本(从而更改内置模块列表),我们就不需要手动重建它
- 这“感觉”就像在解决分析步骤而不是删除它,我有点担心可能产生的副作用。
有第三方模块stdlib_list
,拥有库中的所有模块。它还包括内置模块。从 PyInstaller 的 hook for main/any 模块中使用它:
import stdlib_list
hiddenimports = list(stdlib_list.stdlib_list())
我的研究表明,没有内置的方法可以列出受污染环境中的标准模块。我想这就是 PyInstaller 没有包含标准库的简单选项的原因。
我们正在构建一个动态导入其他 Python 并运行它的应用程序。我们无法提前知道其他 Python 文件可能需要哪些模块,但这些其他 Python 文件应该能够依赖所有可用的内置模块。
由于 PyInstaller 的分析方式,如果我们的主应用程序不使用它们,我们将丢失大量内置模块。
有没有办法强制 PyInstaller 将所有内容都包含在 Lib 中(不是站点包)?
注意:我们已经考虑建立一个隐藏的导入列表,但是:
- 这需要以编程方式完成,这样如果我们更改 Python 版本(从而更改内置模块列表),我们就不需要手动重建它
- 这“感觉”就像在解决分析步骤而不是删除它,我有点担心可能产生的副作用。
有第三方模块stdlib_list
,拥有库中的所有模块。它还包括内置模块。从 PyInstaller 的 hook for main/any 模块中使用它:
import stdlib_list
hiddenimports = list(stdlib_list.stdlib_list())
我的研究表明,没有内置的方法可以列出受污染环境中的标准模块。我想这就是 PyInstaller 没有包含标准库的简单选项的原因。