cxfreeze打包工程文件生成.exe,包含numpy,matplotlib, mutiprocess等工具包,运行exe出现闪退问题

   在python项目使用cxfreeze进行打包的时候,如果 脚本里包括numpy的引用时,在打包时会报

importError: cannot  import name '_methods' from 'numpy.core' 的错误,这时,在打包的setup.py文件中加入整个包numpy的引用即可

packages = ["numpy"]
options = {"build_exe": {"includes": includes, "include_files": include_files, "packages"

这时,发布完成的exe文件会发生闪退事件,进不去程序,这时因为用cxfreeze把numpy库编译成pyc文件时会少编译几个文件,导致闪退。这时可以通过创建一个python文件查看闪退的原因,缺少哪个文件:

import os

result=os.popen(r"C:\ProgramData\Anaconda3\Scripts\build\exe.win-amd64-3.7\etMain.exe")  #自己打包成功之后exe的绝对路径

print(result.read())  

这时就能看见自己缺少的文件,一般缺少的都是dll文件,这时在自己安装Python的路径下,进入\Library\bin中,或者进入\Dlls文件找到自己缺少的dll文件,加入到自己的生成exe的同级路径下,就可以运行了

 

如果想要在cxfreeze打包时直接自动加入到发布包中,可以将缺少的dll文件加入到setup.py中

#!/usr/bin/python

#coding=utf-8


import sys
import traceback
import os
from cx_Freeze import setup, Executable

import msilib

os.environ['TCL_LIBRARY'] = 'C:\\ProgramData\\Anaconda3\\tcl\\tcl8'
os.environ['TK_LIBRARY'] = 'C:\\ProgramData\\Anaconda3\\tcl\\tk8.6'

# Dependencies are automatically detected, but it might need fine tuning.

#中文需要显式用gbk方式编码

product_name = r'ExcleMain'

unproduct_name = 'UninstallExcleMain'

product_desc = "ExcleMain Ver1.0"


#uuid叫通用唯一识别码,后面再卸载快捷方式中要用到


#主程序手动命名

target_name= 'etMain.exe'


build_exe_options = {
    
    "include_files":['C:\\ProgramData\\Anaconda3\\DLLs\\tcl86t.dll', 'C:\\ProgramData\\Anaconda3\\DLLs\\tk86t.dll','C:\\ProgramData\\Anaconda3\\mkl_intel_thread.dll'],    
    #包含外围的ini、jpg文件,以及data目录下所有文件,以上所有的文件路径都是相对于cxsetup.py的路径。

    "packages": ['numpy'],                #包含用到的包

    "includes": [], 

    "excludes": [],               

};


setup(  name = "excelMap",
        author='auto Excel Map app',
        version = "1.0",
        description = product_desc,
        options = {"build_exe": build_exe_options},
        executables = [Executable("C:\\PyCharm\\pdf-docx\\ExcelTranslator\\ShowDIalog.py",
                                  targetName= target_name,icon = "C:\\ProgramData\\Anaconda3\\Scripts\\spyder.ico",                              
                                  base=base)
                       ])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值