导入用PyInstaller点引用的本地模块

时间:2019-03-15 00:28:39

标签: python python-3.x pyinstaller

我正在使用一个python脚本,正在使用pyinstaller将其打包为一个文件可执行文件。

在脚本中,当它未编译时,我引用的是位于主脚本旁边的文件夹中的一组工具,所以类似这样:

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

我省略了init,但它也在那里。在我的脚本中,我正在导入

这样的文件
import tools.db
import tools.file_utils

,所有这些工作正常。当我使用PyInstaller将其打包为可执行文件时,出现工具未找到模块错误。我尝试过为工具添加绝对路径,为隐藏的导入添加工具和相关文件,以及所有这些,但是我感觉这就是我在脚本中调用它们的方式。

我想所有这些帮助程序脚本都可能位于该脚本旁边的父目录中,或者我可以将工具添加到sys.path并直接导入db和fileutils,但这看起来有些混乱和/或混乱。有什么明显的我想念的吗?

2 个答案:

答案 0 :(得分:0)

尝试:

from tools import db
from tools import file_utils

答案 1 :(得分:0)

因此,在将我的目录结构的全部内容压平到tmp文件夹中以写入可执行文件之后,将我的spec文件更改为不编译到其他目录(以及将父目录添加到-p开关),并记住删除另一个py文件中对不再存在的另一个模块的引用,我得到了所有这些。

我想我会把零件拆开,以便将来使这项工作变得更加容易,并尝试确定该过程的哪一部分正在给我的包装ImportErrors,但这是一个有用的练习,可以用来分拆零件PyInstaller稍微了解了钩子和导入以及模块/包级别的导入。