我是靠谱客的博主 眯眯眼铅笔,最近开发中收集的这篇文章主要介绍python2.7 打包程序 Application 运行闪退 Macbook,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题: 在Macbook上打包,在终端运行:  pyinstaller -F -w gui_main.spec 

生成的macbook application,双击后运行闪退了。奇怪的是运行上面的gui_main.exe正常。

此处已经配置相关目录:

base_dir ='/Users/xxx/Documents/xxx/xxx/source/'

a = Analysis(['gui_main.py'],
             pathex=[base_dir],
             binaries=[],
             datas=[(base_dir+'datalib','datalib'),(base_dir+'comm','comm'),
             (base_dir+'listener','listener') ,(base_dir+'test_middle_file','test_middle_file'),
             (base_dir,'ip_start_file.json'),(base_dir+'log','log')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

分析 : 将新加的log自定义创建实例这句话注释之后,可以正常运行,估计还是路径的问题导致闪退 ,获取绝对路径 :"/".join((os.path.abspath('.'), "log")) 里是想在根目录下,comm上一层创建一个log文件夹。 运行.app之后显示目录是在一个临时文件目录 ,当程序退出时会被删,并且修改记录不会保存。嚓···除:/var/folders/q7/hrwn7c9x4rbdfql6hj2qy1s00000gr/T/_MEIfGkAI7/comm/mylog.pyc

# 当前目录下的包:source|
#                      comm
#                           | mylog.py 
#
mLogger = Logger(level="debug", log_dir="/".join((os.path.abspath('.'), "log"))) 

解决:为了方便查看log,把生成的log目录放在app运行目录下,

所以,将获取绝对路径改,首先在根目录下(source目录),创建一个frozen.py,获取当前py的绝对路径,然后其他子模块包引用这个py,找到根目录,所有操作使用文件、目录的地方都以他为基准,转成绝对路径。(针对一些资源文件,如.json.csv之类文件操作)
 

#frozen.py
def app_path():
    """Returns the base application path."""
    if hasattr(sys, 'frozen'):
        # Handles PyInstaller
        return os.path.dirname(sys.executable)
    return os.path.dirname(__file__)
然后需要用exe运行根目录包下,可以以此方式引用,然后操作根目录:
CURRENT_DIR = os.path.split(os.path.abspath(__file__))[0]  # 当前目录
config_path = CURRENT_DIR.rsplit('/', 1)[0]  # 上1级目录
sys.path.append(config_path)

import frozen_dir
ROOT_PATH = frozen_dir.app_path()
最终打印log封闭对象写法如下,目前运行正常:
mLogger = Logger(level="debug", log_dir=os.path.join(ROOT_PATH, "log"))  # 全局实例

可以看操作的资源文件 test_middle_file,log都可以在当前运行.app资源里面方便找到。 

 

最后

以上就是眯眯眼铅笔为你收集整理的python2.7 打包程序 Application 运行闪退 Macbook的全部内容,希望文章能够帮你解决python2.7 打包程序 Application 运行闪退 Macbook所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部