原创

Python文件转exe的两种方式——py2exe和pyinstaller

py2exe的

  1. 先用pip安装py2exe库

pip install py2exe

2.写个简单的py,输入名字回显hello+名字,如下helloworld.py

def say_hello(name):  
    print("Hello, " + name)

if __name__ == "__main__":  
    name = input("What's your name:")
    say_hello(name)
  1. 使用py2exe转exe,需要另外使用一个发布程序的脚本如下mysetup.py,需要用到distutils相关库

from distutils.core import setup
import py2exe
setup(console=["helloworld.py"])

  1. 执行mysetup

python mysetup.py py2exe

执行后会在当前目录生成一个dist文件夹,里面存放着 helloworld.exe、python24.dll、library.zip等文件。如果只想得到一个单独的exe文件,可将其放在任何位置,则需要将其他依赖库也打包进去。

from distutils.core import setup
import py2exe

INCLUDES = []

options = {
    "py2exe" :
        {
            "compressed" : 1, # 压缩   
            "optimize" : 2,
            "bundle_files" : 1, # 所有文件打包成一个 exe 文件  
            "includes" : INCLUDES,
            "dll_excludes" : ["MSVCR100.dll"]
        }
}


setup(
    options=options,    
    description = "this is a py2exe test",   
    zipfile=None,
    console = [{"script":'helloworld.py'}])

但就算这样,这个程序也只能打包一个单独的py文件,如果涉及到图标、字体、图片等其他素材,需要在setup中使用data_files指定来这些文件,格式如下:

data_files=[(“目的文件夹”,[“文件名”,]), (“目的文件夹”,[“文件名”,]), (“目的文件夹”,[“文件名”,]),]

网上都说py2exe只支持到python3.3还是3.4,但我在虚拟的环境3.7下也可以正常使用。所以也不太清楚具体什么问题。另外需要注意的是

  • 这类打包出来的exe跨平台使用可能会出错,因为有些dll在不同环境下也不一定存在,缺少库文件同样在setup中使用"dll_excludes" : ["MSVCR100.dll"]格式添加
  • 64位python打包后的exe只能在64位系统下运行,解决办法是在32位Python下打包
  • py2exe捆绑了Python字节码而不将其转换为机器代码。由于存在启动开销,它的运行速度甚至可能比直接使用Python解释器还要慢

由此,pyinstaller的优势就出来了。pyinstaller支持新的python版本(最新至3.9),他可以执行较小的可执行文件,支持多平台,并且兼容性较高

正文到此结束
该篇文章的评论功能已被站长关闭