本文原始链接:http://blog.csdn.net/liigo/archive/2006/11/11/1379374.aspx
转载请注明出处:http://blog.csdn.net/liigo/
py2exe,顾名思义,其作用就是将python源代码程序转换为可(脱离python环境)直接执行的EXE文件。
py2exe官方说明的很明白,它只是收集python程序中依赖的库/文件(*.pyc/py, python??.dll, ...)并将其打包,它生成的EXE其实还是需要python环境的,只不过自带了python环境而不需要用户自己安装罢了;这显然并非我先前想象的“类似GCJ那样将Java源代码直接编译为EXE,并脱离JVM独立运行”。
py2exe的处理方法跟易语言有相似之处。易语言编译生成的EXE也需要相应的支持库文件(至少包括核心支持库krnln.fnr/fne)才能运行,易语言的“独立编译”功能——即编译生成一个可不依赖外部支持库而独立运行的EXE——也是将支持库文件打包到EXE内部,运行时再将支持库文件从EXE中释放出来——也恰恰是这个“释放”功能,导致某些杀毒软件错误的认为该EXE是病毒。py2exe和易语言的不同之处在于,前者是一个程序,后者是一门编程语言。
py2exe可在这里下载:http://www.py2exe.org/。
下面说一下python的基本用法。
首先写一个最简单的python程序,hello.py,我们的目标就是将它转换成hello.exe:
#hello.py
print"hellofromliigo"
另外还需要再写一个setup.py文件:
#setup.py
fromdistutils.coreimportsetup
importpy2exe
setup(console=["hello.py"])
注意上面最后一行中的“hello.py”就是要将其转换为EXE的python源代码文件。(官方要求该文件命名为setup.py,我试了一下,改成其它文件名,也可以正确的生成EXE啊。)
最后需要在命令行下执行以下命令(假设hello.py, setup.py都在C:\目录下):
c:\python setup.py py2exe |
好了,已经搞定了。到hello.py所在目录下看看,多出来两个目录 dist 和 build,这就是py2exe为我们生成的,其中dist目录有我们需要的hello.exe文件,build目录是py2exe使用的临时目录,没有用了,可以随时删除。注意,这里生成的hello.exe并不能独立运行,必须将dist目录下的所有文件都一起复制到另一台没有安装python的机器上才能保证可以正确执行。
我们的hello.py只有一行代码,可是生成的dist目录有3M多,压缩后也有1M多,好大呀。来看一下其中都有什么东东吧:
我今天用py2exe当然不是为了仅仅写个hello world出来,我的目标是用它将docutils转换为EXE。
要讲docutils先说reStructuredText,跟tex,apt,docbook相似的纯文本文档格式。docutils是一个python开源软件,可将reStructuredText文件转换html,xml,tex等多种格式。要了解docutils和reStructuredText的更多信息请参考:http://docutils.sourceforge.net/。(出自maven的apt (Almost Plain Text)非常不错,希望能出独立的解析工具,要是还能生成pdf,doc就更好了。)
本来以为这是很容易就可以完成的工作。
先写个setup.py,放在 docutils\tools 目录下(跟rst2html.py等放在同一目录):
#setup.py
fromdistutils.coreimportsetup
importpy2exe
setup(console=["rst2html.py","rst2xml.py","rst2s5.py","rstpep2html.py","rst2latex.py","rst2newlatex.py"])
执行“python setup.py py2exe”后,在dist目录下确实生成了rst2html.exe, rst2xml.exe, ... 等文件,但却不能运行,提示“Import Error”,找不到module “standalone”!去它的官方网站找了半天才没发现对解决此问题有用的信息,它的文档太少太简单了。
那就研究一下吧,dist目录下的library.zip基本上不都是*.pyc文件吗,将该压缩包内的docutils子目录跟docutils解压后的目录对比一下,发现目录结构是一致的,文件名称也大致一致(*.pyc vs *.py),前者确实没有standalone.pyc文件。我于是根据提示将standalone.py文件放到library.zip相应的子目录下,再运行rst2html.exe,咦,管用,不再提示找不到模块standalone了,又提示找不到其它的模块了。我如法炮制,又加了几个*.py进去。后来不耐烦了,直接将library.zip中的docutils目录删除,将docutils解压后的同名目录放进去;另外又将extras目录也放进去(py2exe生成的library.zip中没有extras目录,因而导致运行时找不到roman模块)。很好,“找不到module”的错误终于完全解决了。
但是事情并没有结束。又报错:
IOError: [Errno 2] No such file or directory: 'library.zip/docutils/writers/html4css1/html4css1.css' |
搜索一下源代码,发现只有一处代码(docutils\writers\html4css1\__init__.py)使用了该文件:
classWriter(writers.Writer):
......
default_stylesheet='html4css1.css'
default_stylesheet_path=utils.relative_path(
os.path.join(os.getcwd(),'dummy'),
os.path.join(os.path.dirname(__file__),default_stylesheet))
......
它是按 "html4css1.css" 的绝对路径来访问的,可能是因为该文件在压缩文件library.zip中,因而访问不到。大概py2exe并没有将library.zip解压到磁盘,而是从内存中加载*.pyc/py的吧。
我的解决方案是,将library.zip解压出来,将library.zip删除,然后将庄解压后的目录名称修改为“library.zip”。
(事后想想,在setup.py文件中将“html4css1.css”指定为数据文件也应该可以解决此问题吧?)
问题终于解决了。目标达到了。哈哈。
py2exe只是一个小工具,暂时没有必要对它研究太深,能解决问题就行了,要求不高:)
分享到:
相关推荐
docutils-0.11.win-amd64-py2.7
python库,解压后可用。 资源全名:hdmf_docutils-0.4.4-py2.py3-none-any.whl
离线安装包,测试可用。使用 pip install [完整包名] 进行安装
离线安装包,测试可用。使用 pip install [完整包名] 进行安装
docutils-solarized rst2html5.py的样式表关于明暗docutilsCSS样式表,由默认的启发由君特Milde和由马蒂亚斯艾森。演示版 (基于此存储库中的demo.rst )。用法安装最新的docutils快照克隆此存储库在终端运行中: ...
docutils-0.11.tar.gz
docutils-0.12,Python+selenium+robotframework
python doc tools docutils
资源分类:Python库 所属语言:Python 资源全名:nwb_docutils-0.3.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm欢迎下载
使用freemarker 生成doc文件
docutils-0.15.2.tar.gz
docutils 的 reStructuredText 编写器该项目旨在实现一个编写器,该编写器根据 docutils 节点树表示重新... 这应该可以从 Python 源代码中提取 reStructuredText 文档字符串并将它们导出为 rst 文件以供 Sphinx 处理。
此程序包旨在在JavaScript环境中启用reStructuredText(RST)处理(读取,转换,写入)。 它旨在在浏览器和NodeJS中工作。 设置和配置 使用git克隆存储库: $ git clone ...
python3-docutils 的rpm安装包,(python3-docutils-0.16-6.el9.noarch.rpm)在CentOS Stream 9 下亲测安装有效
docutils 的官方工具地址为:https://docutils.sourceforge.io/ 目前的更新主要是在版本和使用手册的更新上,因为 Python 使用 reStructuredText 文档格式,那么必不可少会用到 docutils 进行文档生成。 例如,我们...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用