python应用:python工程编译成EXE

    作者:码行更新于: 2020-03-26 21:13:02

    大神带你学编程,欢迎选课

     Python是一种解释型脚本语言,可以应用于以下领域: [2] 

    • web 和 Internet开发
    • 科学计算和统计
    • 人工智能
    • 桌面界面开发
    • 软件开发
    • 后端开发
    • 网络爬虫

    前言

      python编译成EXE文件后,可以独立使用。亲测,一个复杂的python工程包含多个包多个模块,可以生成exe文件。

      目的

      Windows下将整个python工程编译成单个EXE或者单个目录带EXE文件

      工具

      PyInstaller(windows,源代码python3.6)

      步骤

      项目根目录下新建frozen_dir.py

      冻结路径(防止编译成exe后相对路径找不到)

      复制代码

      #-*-coding:utf-8-*-

      importsys

      importos

      #冻结路径,所有路径以此为基准,打包后才能使用

      defapp_path():

      """Returnsthebaseapplicationpath."""

      ifhasattr(sys,'frozen'):

      #HandlesPyInstaller

      returnos.path.dirname(sys.executable).replace("\\\\","/")

      returnos.path.dirname(__file__).replace("\\\\","/")

      复制代码

      路径引用

      importfrozen_dir

      root_path=frozen_dir.app_path()

      path=os.path.join(root_path,default_path)

      根目录下新建入口文件main.py

      fromtestimportmain

      if__name__=='__main__':

      main()

      根目录下新建编译文件build.py

      复制代码

      #-*-coding:utf-8-*-

      importPyInstaller.__main__

      importfrozen_dir

      SETUP_PATH=frozen_dir.app_path()

      defbuild():

      PyInstaller.__main__.run([

      '--name=%s'%"main",#生成的exe文件名

      ['--onedir','--onefile'][0],#单个目录or单个文件

      '--noconfirm',#Replaceoutputdirectorywithoutaskingforconfimation

      ['--windowed','--console'][1],

      '--add-binary=./python3.dll;.',#外部的包引入

      '--add-binary=%s'%SETUP_PATH+'/config/logging.yaml;config',#配置项

      '--add-data=%s'%SETUP_PATH+'/config/config.ini;config',#分号隔开,前面是添加路径,后面是添加到哪个目录

      '--hidden-import=%s'%'sqlalchemy.ext.baked',

      '--hidden-import=%s'%'frozen_dir',#手动添加包,用于处理modulenotfound

      'main.py',#入口文件

      ])

      if__name__=='__main__':

      build()

      复制代码

      运行build文件,根目录下dist/main/main.exe为可执行文件,双击可运行。运行闪退的话,可以cmd进入到相关路径运行main.exe,缺失的包在build.py文件中添加hidden-imports项。

    Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

课课家教育

未登录