`
天梯梦
  • 浏览: 13731723 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

py2exe使用方法 (含一些调试技巧,如压缩email 类)

阅读更多

一、简介

 

py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。

 

py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。

 

 

二、安装py2exe

 

http://prdownloads.sourceforge.net/py2exe 下载并运行与你所安装的Python对应的py2exe版本的installer,这将安装py2exe和相应的例子;这些例子被安装在lib\site-packages\py2exe\samples目录下。

 

三、py2exe的用法

 

如果你有一个名为helloworld.py的python脚本,你想把它转换为运行在windows上的可执行程 序,并运行在没有安装python的 windows系统上,那么首先你应写一个用于发布程序的设置脚本例如mysetup.py,在其中的setup函数前插入语句 import py2exe 。


mysetup.py示例如下:

 

 

from distutils.core import setup
import py2exe

setup(console=["helloworld.py"]) 

 

 

如果显示错误提示的话 “ msvcp90.dll: no such file or directory”

 

请尝试下面的方法:

 

from distutils.core import setup
import py2exe

setup(
    console=["helloworld.py"],
    options = { "py2exe": { "dll_excludes": ["MSVCP90.dll"] } }
)
 

然后按下面的方法运行mysetup.py: (dos:  cmd => cd desktop => mysetup.py py2exe)
python mysetup.py py2exe


上面的命令执行后将产生一个名为dist的子目录,其中包含了helloworld.exe,python24.dll,library.zip这些文件。
如果你的helloworld.py脚本中用了已编译的C扩展模块,那么这些模块也会被拷贝在个子目录中,同样,所有的dll文件在运行时都是需要的,除了系统的dll文件。


dist子目录中的文件包含了你的程序所必须的东西,你应将这个子目录中的所有内容一起发布。

默认情况下,py2exe在目录dist下创建以下这些必须的文件:
1、一个或多个exe文件。
2、python##.dll。
3、几个.pyd文件,它们是已编译的扩展名,它们是exe文件所需要的;加上其它的.dll文件,这些.dll是.pyd所需要的。
4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo


上面的mysetup.py创建了一个控制台的helloword.exe程序,如果你要创建一个图形用户界的程序,那么你只需要将mysetup.py中的console=["helloworld.py"]替换为windows=["myscript.py"]既可。

 

py2exe一次能够创建多个exe文件,你需要将这些脚本文件的列表传递给console或windows的关键字参数。如果你有几个相关联的脚本,那么这是很有用的。


运行下面个命令,将显示py2exe命令的所有命令行标记。
python mysetup.py py2exe --help

 

Global options:
  --verbose (-v)  run verbosely (default)
  --quiet (-q)    run quietly (turns verbosity off)
  --dry-run (-n)  don't actually do anything
  --help (-h)     show detailed help message

Options for 'py2exe' command:
  --optimize (-O)       optimization level: -O1 for "python -O", -O2 for
                        "python -OO", and -O0 to disable [default: -O0]
  --dist-dir (-d)       directory to put final built distributions in (default
                        is dist)
  --excludes (-e)       comma-separated list of modules to exclude
  --dll-excludes        comma-separated list of DLLs to exclude
  --ignores             comma-separated list of modules to ignore if they are
                        not found
  --includes (-i)       comma-separated list of modules to include
  --packages (-p)       comma-separated list of packages to include
  --compressed (-c)     create a compressed zipfile
  --xref (-x)           create and show a module cross reference
  --bundle-files (-b)   bundle dlls in the zipfile or the exe. Valid levels
                        are 1, 2, or 3 (default)
  --skip-archive        do not place Python bytecode files in an archive, put
                        them directly in the file system
  --ascii (-a)          do not automatically include encodings and codecs
  --custom-boot-script  Python file that will be run when setting up the
                        runtime environment

usage: setup_py2exe.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup_py2exe.py --help [cmd1 cmd2 ...]
   or: setup_py2exe.py --help-commands
   or: setup_py2exe.py cmd --help
 


四、指定额外的文件

 

一些应用程序在运行时需要额外的文件,诸如配置文件、字体、位图。
如果在安装脚本中用data_files可选项指定了那些额外的文件,那么py2exe能将这些文件拷贝到dist子目录中。data_files应包含一个元组(target-dir, files)列表,其中的files是这些额外的文件的列表。


示例如下:

 

PythonCode:  # mysetup.py

 

from distutils.core import setup
import glob
import py2exe

setup(console=["helloworld.py"],
      data_files=[("bitmaps",
                   ["bm/large.gif", "bm/small.gif"]),
                  ("fonts",
                   glob.glob("fonts\\*.fnt"))],
) 
 

说明:data_files选项将创建一个子目录dist\bitmaps,其中包含两个.gif文件;一个子目录dist\fonts,其中包含了所有的.fnt文件。

 

 

五、Windows NT services

 

你可以通过传递一个service关键字参数给setup函数来建造Windows NT services
,这个service参数的值必须是一个Python模块名(包含一service类)的列表。


示例如下:

PythonCode:  # mysetup.py

 

from distutils.core import setup
import py2exe

setup(service=["MyService"]) 
 

所建造的可执行的service是可以通过在其后跟一定的命令行参数标记来自行安装和卸载的。你可以通过在这个可执行的service(exe)后跟一-help参数来得到更多的帮助。

 


六、COM servers

 

你可以通过传递一个com_server 关键字参数给setup函数来建造Windows NT services
,这个service参数的值必须是一个Python模块名(包含一个或多个COM server 类)的列表。


示例如下:

PythonCode:  # mysetup.py

 

from distutils.core import setup
import py2exe

setup(com_server=["win32com.server.interp"]) 
 

 

默认情况下,DLL和EXE servers被建造,你不需要它们的话你可以简单的删除它们。

一个标准的py2exe setup文件编写

 

 

 -*- coding: cp936 -*-
from distutils.core import setup

import py2exe


includes = ["encodings", "encodings.*"]   
#要包含的其它库文件

options = {"py2exe":

    {"compressed": 1, #压缩
     "optimize": 2,
     "ascii": 1,
     "includes":includes,
     "bundle_files": 1 #所有文件打包成一个exe文件 }
    }
setup(    
    options = options,     
    zipfile=None,   #不生成library.zip文件
    console=[{"script": "hello.py", "icon_resources": [(1, "hello.ico")] }]#源文件,程序图标
    ) 
 

 

新 版本已经可以打包为一个文件了,以前都是一堆dll,pyd的。具体的变化其实只有一个地方。就是options里增加bundle_files项,值为 1表示pyd和dll文件会被打包到exe文件中,且不能从文件系统中加载python模块;值为2表示pyd和dll文件会被打包到exe文件中,但是 可以从文件系统中加载python模块。另外setup中使用zipfile=None可以不生成library.zip。

 

例如原来 的:

 

from distutils.core import setup 
import py2exe 
includes = ["encodings", "encodings.*"] 
options = {"py2exe": 
            {   "compressed": 1, 
                "optimize": 2, 
                "includes": includes,                 
            } 
          } 
setup(    
    version = "0.1.0", 
    description = "search panda", 
    name = "search panda",     
    options = options,     
    windows=[{"script": "search.py", "icon_resources": [(1, "search.ico")] }],       
    )
 

 

只需要改为: 

 

from distutils.core import setup 
import py2exe 
includes = ["encodings", "encodings.*"] 
options = {"py2exe": 
            {   "compressed": 1, 
                "optimize": 2, 
                "includes": includes, 
                "bundle_files": 1 
            } 
          } 
setup(    
    version = "0.1.0", 
    description = "search panda", 
    name = "search panda", 
    options = options, 
    zipfile=None, 
    windows=[{"script": "search.py", "icon_resources": [(1, "search.ico")] }],   
     
    ) 
 

 

 

比如,这里我打包以前的DelphiCode2HTML的

 

# -*- coding: gbk -*-

from distutils.core import setup
import py2exe

includes = ["encodings", "encodings.*"]
options = {"py2exe":
                    {"compressed": 1,
                     "optimize": 2,
                     "ascii": 1,
                     "includes":includes,
                     "bundle_files": 1}
           }
setup(
    options = options,
    zipfile=None,
    name = "HelloGuys.",
    description = "this is a py2exe test",   
    windows=[{"script": "F:\我的程序\Python\CSDN Code Edit\Code2Html.py",
              "icon_resources": [(1, "F:\书籍\我的图标\图标xp\Convert.ico")]
              }]
    )
 

 

下面列出他的一些 options

 

keyword

  description

data_files

  list of "data" files that you are going to need to run your executable such as .pngs, .jpgs

 

 

Py2exe extends Distutils setup keywords

 

In addition to the standard distutils setup keywords, the following py2exe keywords specify what and how to build.

keyword

description

console

list of scripts to convert into console exes

windows

list of scripts to convert into GUI exes

service

list of module names containing win32 service classes

com_server

list of module names containing com server classes

ctypes_com_server

list of module names containing com server classes

zipfile

name of shared zipfile to generate; may specify a subdirectory; defaults to 'library.zip'. If zipfile is set to None , the files will be bundled within the executable instead of 'library.zip'.

options

dictionary { "py2exe": { "opt1": val1, "opt2": val2, ... } }

 

 

The options dictionary of py2exe

 

The option keyword takes the following set of dictionary key: value pairs. The dictionary "key" names and the "value" types are listed in the table below.

 

key

value

unbuffered

if true, use unbuffered binary stdout and stderr

optimize

string or int of optimization level (0, 1, or 2) 0 = don’t optimize (generate .pyc) 1 = normal optimization (like python -O) 2 = extra optimization (like python -OO) See http://docs.python.org/distutils/apiref.html#module-distutils.util for more info.

includes

list of module names to include

packages

list of packages to include with subpackages

ignores

list of modules to ignore if they are not found

excludes

list of module names to exclude

dll_excludes

list of dlls to exclude

dist_dir

directory in which to build the final files

typelibs

list of gen_py generated typelibs to include

compressed

(boolean) create a compressed zipfile

xref

(boolean) create and show a module cross reference

bundle_files

bundle dlls in the zipfile or the exe. Valid values for bundle_files are: 3 = don't bundle (default) 2 = bundle everything but the Python interpreter 1 = bundle everything, including the Python interpreter

skip_archive

(boolean) do not place Python bytecode files in an archive, put them directly in the file system

ascii

(boolean) do not automatically include encodings and codecs

custom-boot-script

Python file that will be run when setting up the runtime environment

 

 

 

Example:

 

setup(
        windows=['trypyglet.py'],
        options={
                "py2exe":{
                        "unbuffered": True,
                        "optimize": 2,
                        "excludes": ["email"]
                }
        }
) 

 

 

 

For more information enter the following at the python command line:

 

 

>>> from distutils.core import setup
>>> help(setup)
 

注意 windows 的用法,他可以代替 console, 如果你要集成 wxpython 的时候,一定会用的 !

 

 

更多请查看 http://www.py2exe.org/index.cgi/ListOfOptions

 

 

如果程序中含有email类,并且压缩时出现类似 “ImportError: No module named multipart ” 的错误,你需要如下的设置:

 

 

1. 尝试将Lib下的email包,复制到当前文件夹中

2. 把['emai'] 放入includes中

3. 把['email']放入packages中

4. 继续运行py2exe

 

如:

 

from distutils.core import setup 
import py2exe

includes = ["encodings", "encodings.*",'email']

options = {"py2exe": 
            {   "compressed": 1, 
                "optimize": 2, 
                "includes": includes, 
                "bundle_files": 1,
                "packages": ['email'],
                "dll_excludes": ["MSVCP90.dll"]
            } 
          } 
setup(    
    version = "0.1.0", 
    description = "3th", 
    name = "For My Lover", 
    options = options, 
    zipfile=None, 
    windows=[{"script": "love.py", "icon_resources": [(1, "roses.ico")] }],   
    ) 
 

 

 

 

 

 

 

分享到:
评论
3 楼 飞象过河 2015-06-02  
问一下,生成的exe,每次执行后再关闭exe时,总提示
Errors occurred:
see the logfile 'XXX.log' for details

怎样让程序在关闭exe时不弹出这个提示?
2 楼 天梯梦 2011-10-17  
rawlm 写道
很实用,谢谢,辛苦了

不客气,共同进步~
1 楼 rawlm 2011-10-17  
很实用,谢谢,辛苦了

相关推荐

    py2exe使用方法详解

    不过,我可以根据标题“py2exe使用方法详解”和描述“py2exe使用方法详解”为您提供关于py2exe的详细知识点,希望能够满足您的需求。 py2exe是一个将Python程序转换成可以在没有安装Python的机器上运行的独立可执行...

    py2exe使用方法

    py2exe使用方法

    py2exe打包教程

    Py2exe 的使用方式可以分为两步:首先,创建一个 setup.py 文件,用于指定要转换的 Python 文件名;其次,在命令行中输入 setup.py py2exe,生成可执行文件。生成的可执行文件将包含所需的运行时函数库,可以独立...

    py2exe使用方法(windows环境)

    ### py2exe使用方法详解(Windows环境) #### 一、简介 `py2exe`是一款用于将Python脚本转换成Windows可执行文件的工具。它适用于Python 2.x版本(尤其是Python 2.7),可以帮助开发者在没有安装Python运行环境的...

    py2exe使用教程

    文档中提到的问题和解决方法,提醒用户在使用py2exe进行打包时,要特别注意一些关键点,例如确保所有依赖项都被正确处理,以及解决可能出现的运行时库缺失问题。此外,由于py2exe库有些时日没有更新,开发者在使用...

    py2exe使用说明

    ### py2exe使用详解 #### 一、简介与作用 py2exe是一个强大的工具,用于将Python脚本转换成可以在Windows系统上独立运行的可执行程序(*.exe)。这一转换过程使得开发人员能够将他们的Python应用程序分发给没有...

    py2exe-0.6.9.win32-py2.6.rar

    py2exe的使用并非没有限制,对于一些复杂的Python应用,可能需要处理更多的依赖问题,例如第三方库的动态链接库(DLLs)。此外,py2exe只能用于Windows系统,如果你需要在其他操作系统上打包Python程序,如macOS或...

    unpy2exe.py - 反编译py2exe生成可执行文件的工具

    unpy2exe.py可以从py2exe生成的exe中还原pyc文件, 适用于反编译py2exe程序。 程序使用pefile模块解析exe文件; 使用marshal模块生成pyc文件数据, 得到提取后的pyc文件。 其中还附带了py2exe_con.py和py2exe_w.py, ...

    py2exe使用方法超详细解析

    最近有很多朋友对网上的py2exe使用教程看不懂,我在这里发布图文详解。 平台:python2.51 py2exe:0.69 for python2.5 这里以打包e://hello.py为例 第一步: 在e盘新建hello.py: helo.py代码如下: ----------------...

    py2exe(python2.7/python3.3/python3.4)

    - **不适用于所有平台**:`py2exe`仅支持Windows系统,如果你需要在其他操作系统上创建可执行文件,如Mac或Linux,需要寻找其他工具,如`py2app`或`cx_Freeze`。 - **可能的兼容性问题**:某些Python库可能无法正确...

    python py2exe

    ### Python py2exe知识点详解 #### 一、py2exe简介与作用 在Python开发过程中,我们经常会遇到这样的需求:将自己编写的Python脚本打包成一个独立的、不依赖Python运行环境的可执行文件(.exe)。这对于分享或者...

    py2exe各个版本

    1. **安装**:首先,你需要在你的Python环境中安装py2exe,通常通过pip命令完成,如`pip install py2exe`。但要注意,由于py2exe主要针对Windows,所以它不适用于其他操作系统,如Linux或macOS。 2. **配置**:py2...

    利用PY2EXE作成exe文件

    为了实现这一目标,我们可以使用工具如`py2exe`。`py2exe`是一个用于Windows操作系统的Python第三方库,它能够将Python源代码及其依赖打包成Windows可执行文件。下面我们将详细介绍如何利用`py2exe`将包含`wxPython`...

    py2exe安装文件

    py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,就可以不用装python而在windows系统上运行这个可执行程序。这里提供python 2.7, python3.3, python3.4 32位和64位的下载。

    py2exe-0.6.9.win32-py2.7.zip

    python转exe工具 -- python2.7版本的py2exe软件,可以将python转化为exe可执行文件。 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows...

    py2exe.rar

    3. 运行setup.py:使用命令行工具执行`python setup.py py2exe`,py2exe会分析程序并生成可执行文件。 4. 分发与运行:将生成的exe文件及其所需资源一起分发给用户,用户只需双击即可运行。 总的来说,py2exe是一个...

    py2exe_32位与64位安装包

    值得注意的是,py2exe并不支持Python 3.8及更高版本,因此如果你正在使用较新的Python版本,可能需要寻找其他类似工具,如PyInstaller或cx_Freeze。此外,尽管py2exe可以处理大多数Python程序,但对于依赖外部库或者...

    Python3 py转exe.py

    py转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转exe.py py转exe.pypy转exe.py py转exe.py py转...

    f2py.zip f2py.exe 文件 64 32位下载

    2. **编写接口定义**:在Python脚本中,使用f2py提供的语法定义你想要暴露给Python的Fortran函数或子程序。 3. **生成接口文件**:通过运行f2py命令,它可以生成一个Fortran接口模块,这个模块包含了Python调用...

Global site tag (gtag.js) - Google Analytics