python3 打包后执行报错failed to execute script ***

1、问题描述

使用pyinstaller -F ***.spec命令打包,打包过程无报错信息,生成可执行文件(.exe),双击运行报错,如下图:

2、查找原因

(1)百度,查看打包文件(build/***/warn-***.txt)

百度后,基本都是两类,一类是打包时未能正确导入一些包,但是这类基本在打包过程就会报错,还有一类就是去找打包生成的一个warn文本。

我找到了该文件,打开研究,也没研究出个所以然,把里面一些感觉像的信息拿出来单独百度,可是也处理不了。

(2)单独排查

因为这个项目之前是可以正常打包的,因此我怀疑会不会是新增的文件存在问题。

我手动回退版本,回到之前可以打包的版本,重新打包,发现一切正常。

然后逐步添加增加的文件,一步步调试,最终定位到了一个文件conf.py

以下是文件源码:

# -*- coding: utf8 -*-
import os
import yaml


def _get_yaml():
    """
    解析yaml
    :return: s  字典
    """
    path = os.path.join(os.path.dirname(__file__) + '/config.yaml')
    f = open(path, mode='r', encoding='UTF-8')
    s = yaml.load(f)
    f.close()
    return s.decode() if isinstance(s, bytes) else s

这是一个读取yaml配置文件的方法,之前百度直接copy了别人的代码。

结合之前打包的经验,我留意到这里有一个读取文件的方法,我怀疑是文件路径的问题,在打包后,这个路径失效了。

我把路径直接改为相对路径和绝对路径下尝试了,发现在绝对路径下是可以运行的。

可是我打包的时候是要打包config.yaml这个文件的,我不想后面部署时,还要把这个文件单独放到一个指定路径。

我尝试使用打包读取资源的方法来读取这个文件,结果成功了!

3、解决方案

修改如下:

# -*- coding: utf8 -*-
from util import ResourcePath
import yaml


def _get_yaml():
    """
    解析yaml
    :return: s  字典
    """
    f = open(ResourcePath.resource_path('config/config.yaml'), mode='r', encoding='UTF-8')
    s = yaml.load(f)
    f.close()
    return s.decode() if isinstance(s, bytes) else s
关联的ResourcePath.py文件源码如下:
import os
import sys


def resource_path(relative_path):
    """
    定义一个读取相对路径的函数
      """
    if hasattr(sys, "_MEIPASS"):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

此外,打包的文件(.spec)也要修改:

Analysis里的datas参数添加('config','config')

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
" to execute script"错误通常是由于文件路径问题引起的。根据引用中的描述,Python程序中加载的文件使用相对路径,并且程序运行没有问题。但是,当打包生成的可执行文件在运行时出现此错误。解决此问题的方法是将程序中的文件与.exe文件放在同一目录下。 在C#中调用Python时出现"failed to execute script"错误,可以参考引用中的建议。如果是在Debug模式下,将调用的文件放在Debug文件夹下;如果是在Release模式下,将调用的文件放在Release文件夹下。将文件放在其他位置可能无效。 对于Linux系统中的Python程序,出现"Failed to execute script"错误可能有多种原因。根据引用中的描述,该错误可能是由于脚本的入口点无法执行导致的。在解决此问题之前,可以尝试验证以下几个方面: 1. 确保Python环境正确安装并且可以正常使用。可以使用命令`conda list`验证Anaconda是否安装成功,使用命令`python -V`验证Python版本。 2. 检查脚本文件的权限设置,确保具有执行权限。 3. 确保脚本的入口点正确设置,并且脚本文件没有语法错误或其他问题。 4. 检查脚本所依赖的库是否正确安装。可以使用命令`pip list`或`conda list`查看已安装的库。 如果上述步骤都没有解决问题,可以尝试重新下载一个版本的Anaconda,并按照引用中的建议重新安装。确保安装路径设置正确,并且在安装过程中选择初始化Anaconda和写入配置文件的选项。 总结:根据引用内容,"Failed to execute script"错误可能是由于文件路径问题、脚本入口点错误、权限问题或依赖库安装问题导致的。解决方法包括检查文件路径、设置正确的权限、验证脚本入口点和依赖库是否正确安装。如果问题仍然存在,可以尝试重新下载和安装Anaconda。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [failed to execute script 脚本名](https://blog.csdn.net/Scarlett2025/article/details/119612897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [linux安装anaconda失败——[24582] Failed to execute script entry_point](https://blog.csdn.net/jerry_liufeng/article/details/108944373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值