zoukankan      html  css  js  c++  java
  • 利用pyinstaller生成exe之后,运行不能正常产生结果文件问题记录

    https://segmentfault.com/q/1010000011284617/a-1020000011493026

    在此链接已解决问题,现在在这里在详细记录一次

    问题描述:

    利用pycharm或是直接点击运行py文件,可正常生成log文件,利用pyinstaller打包成exe之后,运行不能生成log文件。

    问题原因:

    问题出在path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'log', self.loggerName)中的os.path.dirname(__file__),在pycharm中运行和生成exe之后os.path.dirname(__file__)返回的位置不一样。

    使用pycharm和直接点击运行py文件,这个路径均为脚本的所在路径,而生成exe之后点击运行,这个路径变为exe释放路径(C:Users...AppDataLocalTemp\_MEI***)

    问题解决:

    在代码里增加一个判断

    1 if getattr(sys, 'frozen', False):
    2     pathname = sys._MEIPASS
    3 else:
    4     pathname = os.path.split(os.path.realpath(__file__))[0]

      

    相关知识点整理

    1、如果是运行pyinstaller生成的exe文件,会在sys中添加一个_MEIPASS(即exe释放路径C:Users...AppDataLocalTemp\_MEI***)和一个frozen [It also adds the attributes frozen and _MEIPASS to the sys built-in module]

    2、getattr(object, name[, default])

        如果object对象存在有name属性,则返回name属性值或name为方法则返回name的内存地址;

        如果object对象不存在有name属性,则返回default,如果default没给,就会触发 AttributeError。

      

        if getattr(sys, 'frozen', False):

        判断sys是否存在有‘frozen’,如果没有,就返回False,有的话,返回frozen的属性值,并执行if语句。

    3、os.path.realpath()

         获得的是该方法所在的脚本的路径

  • 相关阅读:
    Schedular
    CronTrigger
    SimpleTrigger
    Quartz代码示例
    quartz
    gson and json
    json数据结构和gson的比较
    stackApp符号匹配
    Git命令
    org.apache.maven.archiver.mavenarchiver.getmanifest怎么解决
  • 原文地址:https://www.cnblogs.com/congyinew/p/8117293.html
Copyright © 2011-2022 走看看