我正在使用一个python脚本,正在使用pyinstaller将其打包为一个文件可执行文件。
在脚本中,当它未编译时,我引用的是位于主脚本旁边的文件夹中的一组工具,所以类似这样:
\parent
----->\tools\
------>db.py
------>file_utils.py
main.py
我省略了init,但它也在那里。在我的脚本中,我正在导入
这样的文件import tools.db
import tools.file_utils
,所有这些工作正常。当我使用PyInstaller将其打包为可执行文件时,出现工具未找到模块错误。我尝试过为工具添加绝对路径,为隐藏的导入添加工具和相关文件,以及所有这些,但是我感觉这就是我在脚本中调用它们的方式。
我想所有这些帮助程序脚本都可能位于该脚本旁边的父目录中,或者我可以将工具添加到sys.path并直接导入db和fileutils,但这看起来有些混乱和/或混乱。有什么明显的我想念的吗?
答案 0 :(得分:0)
尝试:
from tools import db
from tools import file_utils
答案 1 :(得分:0)
因此,在将我的目录结构的全部内容压平到tmp文件夹中以写入可执行文件之后,将我的spec文件更改为不编译到其他目录(以及将父目录添加到-p开关),并记住删除另一个py文件中对不再存在的另一个模块的引用,我得到了所有这些。
我想我会把零件拆开,以便将来使这项工作变得更加容易,并尝试确定该过程的哪一部分正在给我的包装ImportErrors,但这是一个有用的练习,可以用来分拆零件PyInstaller稍微了解了钩子和导入以及模块/包级别的导入。