Python pyinstaller:添加动态加载的模块
我正在尝试使用Pyinstaller绑定一个用Python3编写的服务器。部分服务器代码的编写方式是动态加载某些模块,如下所示:Python pyinstaller:添加动态加载的模块,python,pyinstaller,Python,Pyinstaller,我正在尝试使用Pyinstaller绑定一个用Python3编写的服务器。部分服务器代码的编写方式是动态加载某些模块,如下所示: mod_files = [f for f in os.listdir(path)]: for f in mod_files: mod = importlib.import_module(mod_name) 如何使用Pyinstaller处理这些文件?Pyinstaller(当前版本为3.4)无法检测导入,如importlib.import\u module()
mod_files = [f for f in os.listdir(path)]:
for f in mod_files:
mod = importlib.import_module(mod_name)
如何使用Pyinstaller处理这些文件?Pyinstaller(当前版本为3.4)无法检测导入,如importlib.import\u module()
。Pyinstaller中详细介绍了问题和解决方案,我将其粘贴在下面作为入口点
一些Python脚本以PyInstaller无法检测到的方式导入模块:例如,通过对变量数据使用\uuu import\uuu()
函数,使用imp.find\u module()
,或在运行时操纵sys.path
值。如果您的脚本需要PyInstaller不知道的文件,您必须帮助它:
- 您可以在
命令行上提供其他文件pyinstaller
- 您可以在命令行上提供其他导入路径
- 您可以编辑PyInstaller第一次为脚本运行时编写的
文件。在spec文件中,您可以告诉PyInstaller脚本特有的代码模块。 您可以编写“hook”文件,通知PyInstaller隐藏的导入。如果您为其他用户也可能使用的包创建“钩子”,则可以将钩子文件提交给PyInstallermyscript.spec
我不确定
mod_name
的值,但事实证明,在PyInstaller冻结后,可以导入私有模块not。i、 e
mod=importlib.import\u模块(“模块名”)
在打包后将导致ModuleNotFoundError
,尽管它可能与打包后的脚本配合使用
非私有包应与导入_模块一起导入,例如
mod=importlib.import\u模块(“module.somename”)
当然,先决条件是确保为每个文档的任何动态导入模块正确设置了--hidden import