首页 > 解决方案 > 导入使用 PyInstaller 引用的本地模块

问题描述

我有一个正在处理的 python 脚本,我正在使用 pyinstaller 将其打包成一个可执行文件。

在脚本中,当它未编译时,我引用了一组工具,这些工具位于主脚本旁边的文件夹中,如下所示:

\parent
    ----->\tools\
       ------>db.py
       ------>file_utils.py
main.py

我省略了初始化,但它也在那里。在我的脚本中,我正在导入这些文件,例如

import tools.db
import tools.file_utils

所有这一切都很好。当我使用 PyInstaller 将其打包为可执行文件时,我收到了一个找不到工具的模块错误。我尝试将绝对路径添加到工具,将工具和相关文件添加到隐藏的导入,以及所有这些,但我觉得这是我在脚本中调用它们的方式。

我想所有这些帮助脚本可能只是在脚本旁边的父目录中,或者我可以将工具添加到 sys.path 并直接导入 db 和 fileutils ,但这似乎有点笨拙和/或混乱。有什么明显的我失踪了吗?

标签: pythonpython-3.xpyinstaller

解决方案


因此,在将我的整个目录结构展平在 tmp 文件夹中以编写可执行文件,并将我的规范文件更改为不编译到不同的目录(以及将父目录添加到 -p 开关)并记住删除一个在另一个 py 文件中引用另一个不再存在的模块,我得到了这一切。

我想我会把这些部分拼凑起来,这样我以后可以让这项工作变得更容易,并尝试确定过程的哪一部分给我的打包 ImportErrors,但这是一个有用的练习,可以稍微分解 PyInstaller 的各个部分并了解有关钩子和导入以及模块/包级别导入的更多信息。


推荐阅读