使用pyinstaller打包Mediapipe项目时遇到FileNotFoundError: The path does not exist的解决方法

今天在帮朋友打包py文件时,遇到了下面问题:

Traceback (most recent call last):
  File "demo_windows.py", line 384, in <module>
  File "demo_windows.py", line 245, in recognize
  File "demo_windows.py", line 55, in __init__
  File "mediapipe\python\solutions\hands.py", line 114, in __init__
  File "mediapipe\python\solution_base.py", line 247, in __init__
FileNotFoundError: The path does not exist.
[13548] Failed to execute script 'xxxxx' due to unhandled exception!

查阅了很多资料都无法解决,网上大部分的解释是,路径中有中文,可是我的项目路径及python解释器的路径均不包含中文。
之后,为观察了mediapipe\python\solution_base.py脚本中的第247行,

validated_graph.initialize(
          binary_graph_path=os.path.join(root_path, binary_graph_path))

发现这里用到了root_path,向上查找,

root_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-3])

发现报错原因,os.path.abspath(__file__)是获取当前脚本的路径,只有当在脚本中执行的时候,os.path.abspath(__file__)才会起作用,因为该命令是获取的当前执行脚本的完整路径,如果在交互模式或者terminate 终端中运行会报没有__file__这个错误。
找到原因后,就可以顺利解决问题了,python中获取exe所在目录的代码为:

os.path.dirname(sys.executable)

所以,解决该问题的方法是,将mediapipe\python\solution_base.py脚本中的第233行,改为

if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-3])
root_path = application_path

代码修改后,使用pyinstaller进行打包,得到dist,build两个文件夹,运行dist文件夹下的exe文件,发现问题依然没有解决,这时,需要将python安装目录下的\Lib\site-packages目录中的mediapipe复制到dist文件夹下。
至此,该问题得以解决。

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值