用pycharm写的hardware_info.py文件,依赖同一个tools目录下的login_info.py, 打包exe文件后,在tools下运行提示 No module named ‘tools’。
这个tools是自写的模块,不是python自带的,pyinstaller就识别不出来了,事实上运行py文件时可以运行,打包后就不行了
啥原因呢?网上查看了很多帖子也没有解决掉,再请教下各位码友。。
编译方式:

文件目录:

执行时的错误:

用pycharm写的hardware_info.py文件,依赖同一个tools目录下的login_info.py, 打包exe文件后,在tools下运行提示 No module named ‘tools’。
这个tools是自写的模块,不是python自带的,pyinstaller就识别不出来了,事实上运行py文件时可以运行,打包后就不行了
啥原因呢?网上查看了很多帖子也没有解决掉,再请教下各位码友。。
编译方式:

文件目录:

执行时的错误:

引自当下最先进的AI大模型:ChatGPT 4o,若有帮助,还望采纳最好能打赏点哦谢谢支持。
您在使用pyinstaller将Python脚本打包为exe时,出现了 No module named 'tools' 的错误。这种情况通常发生在你的项目结构中存在相对导入,并且在打包过程中没有正确处理这些导入。以下是一些可能的解决方法:
如果你的hardware_info.py中使用了相对导入(如from . import login_info),可以尝试将相对导入修改为绝对导入。假设tools是顶级目录,你可以这样修改:
from tools import login_info
在使用pyinstaller时,确保所有的模块都被正确打包。可以通过--hidden-import选项手动指定依赖模块:
pyinstaller --hidden-import=tools.login_info hardware_info.py
spec文件: 在hardware_info.spec文件中,手动添加tools模块的路径,使pyinstaller知道需要包含这个模块。修改spec文件的Analysis部分:
a = Analysis(['hardware_info.py'],
pathex=['D:\\path\\to\\tools'],
binaries=[],
datas=[],
hiddenimports=['tools.login_info'],
...
)
tools目录添加到系统路径: 在hardware_info.py的开头添加代码,将tools目录动态添加到sys.path,这样即使在打包后的环境中,也可以找到这个模块:
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'tools')))
--onefile选项: 尝试使用--onefile选项打包,这样会将所有的依赖打包到一个exe文件中:
pyinstaller --onefile hardware_info.py
确保在打包之前,项目的目录结构是正确的,所有依赖的模块和脚本都在同一个工作目录下。特别是要确保打包时使用的路径与开发环境中的路径一致。
通过以上方法,应该能够解决pyinstaller打包后无法找到自定义模块的问题。如果问题仍然存在,可以提供更多的详细信息,继续帮助排查问题。