我们正在构建一个动态导入其他Python并运行它的应用程序。 我们事先不知道其他 Python 文件可能需要哪些模块,但这些其他 Python 文件应该能够依赖于所有内置模块都可用。
由于 PyInstaller 的分析工作方式,如果我们的主应用程序不使用它们,我们将丢失许多内置模块。
有没有办法强制 PyInstaller 将所有内容包含在 Lib(而不是站点包(中?
注意:我们已考虑建立隐藏导入列表,但是:
- 这需要以编程方式完成,这样如果我们更改 Python 版本(从而更改内置模块列表(,我们就不需要手动重建它。
- 这只是"感觉"像是围绕分析步骤而不是删除它,我有点担心可能会产生什么副作用。
有第三方模块stdlib_list
包含 lib 中的所有模块。它还包括内置模块。从 PyInstaller 的钩子中使用它来获取应用程序的主/任何模块:
import stdlib_list
hiddenimports = list(stdlib_list.stdlib_list())
我的研究表明,没有内置的方法可以列出污染环境中的标准模块。我想这就是 PyInstaller 没有一个简单的选项来包含标准库的原因。