Python pyinstaller:添加动态加载的模块

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()

我正在尝试使用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()
。Pyinstaller中详细介绍了问题和解决方案,我将其粘贴在下面作为入口点

一些Python脚本以PyInstaller无法检测到的方式导入模块:例如,通过对变量数据使用
\uuu import\uuu()
函数,使用
imp.find\u module()
,或在运行时操纵
sys.path
值。如果您的脚本需要PyInstaller不知道的文件,您必须帮助它:

  • 您可以在
    pyinstaller
    命令行上提供其他文件
  • 您可以在命令行上提供其他导入路径
  • 您可以编辑PyInstaller第一次为脚本运行时编写的
    myscript.spec
    文件。在spec文件中,您可以告诉PyInstaller脚本特有的代码模块。 您可以编写“hook”文件,通知PyInstaller隐藏的导入。如果您为其他用户也可能使用的包创建“钩子”,则可以将钩子文件提交给PyInstaller
如果您的程序依赖于对某些数据文件的访问,那么您可以告诉PyInstaller将它们也包括在包中。您可以通过修改等级库文件来实现这一点,这是一个高级主题,将在中介绍

为了在运行时定位包含的文件,您的程序需要能够在运行时以一种有效的方式了解其路径,而不管它是否从捆绑包运行。这项工作已列入本条例


我不确定
mod_name
的值,但事实证明,在PyInstaller冻结后,可以导入私有模块not。i、 e

mod=importlib.import\u模块(“模块名”)
在打包后将导致
ModuleNotFoundError
,尽管它可能与打包后的脚本配合使用

非私有包应与导入_模块一起导入,例如

mod=importlib.import\u模块(“module.somename”)
当然,先决条件是确保为每个文档的任何动态导入模块正确设置了
--hidden import