pyinstaller打包报错ModuleNotFoundError: No module named

最近一直用pyinstaller打包python程序,打包后直接运行无需重新导入许多依赖因此很方便,但今天忽然遇到一个问题,打包后程序运行时候一直报错:

Traceback (most recent call last):
  File "xxx.py", line 14, in <module>
  File "PyInstaller/loader/pyimod02_importers.py", line 378, in exec_module
  File xx.py", line 12, in <module>
ModuleNotFoundError: No module named 'xxxx'
[PYI-298958:ERROR] Failed to execute script 'xxx' due to unhandled exception! 

网上查了很多解决方法例如:

  • --collect-all
  • --clean
  • --hidden-import
  • 修改spec文件: hiddenimports=['xxx']
  • 修改spec文件:datas.append(('/home/path/xxx.py', '.'))

尝试许久找不到真正的原因,只有最后一个真正帮助我打包后运行,报错了对应模块的文件中的引号问题。

真正的原因是,在 Python 中,字符串可以用单引号 (')、双引号 ("),以及三重引号 (''' 或 """) 来定义。如果引号不匹配,或者在字符串内部没有正确地转义引号,就会导致语法错误。字符串引号的不匹配会导致语法错误,从而在打包或运行时引发各种问题。

大概类似以下的单双引号使用情形,但我匹配错误了

# 使用双引号定义字符串,内部包含单引号
my_string = "It's a beautiful day!"

# 使用单引号定义字符串,内部包含双引号
another_string = 'He said, "Hello!"'

其实如果能在pyinstaller打包前直接用python解释器运行一遍就能检查出这个问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值