python2.7 打包程序 Application 运行闪退 Macbook

导读:本篇文章讲解 python2.7 打包程序 Application 运行闪退 Macbook,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

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

python2.7 打包程序 Application 运行闪退 Macbook

此处已经配置相关目录:

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101658.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!