本文原始链接: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只是一个小工具,暂时没有必要对它研究太深,能解决问题就行了,要求不高:)
分享到:
相关推荐
- **跨平台兼容**:由于`hdmf_docutils-0.4.4-py2.py3-none-any.whl`轮子文件同时支持Python 2和3,这意味着无论用户是在哪种Python环境下工作,都可以无缝使用该库。 - **简化安装**:通过`pip`工具可以直接安装`...
docutils-0.11.win-amd64-py2.7
例如,你可以使用`rst2html.py`脚本将reST文档转换为HTML,便于在网络上传播;或者使用`rst2pdf.py`生成PDF,适合打印或离线阅读。此外,还有转换为LaTeX、man pages、XML等多种格式的工具。 **3. Sphinx集成** ...
离线安装包,测试可用。使用 pip install [完整包名] 进行安装
离线安装包,测试可用。使用 pip install [完整包名] 进行安装
Docutils能够将RST源文件转换为多种格式,包括HTML、PDF、LaTeX等。 在Python的自动化测试领域,docutils库可能与其他工具如Selenium和Robot Framework一起使用。Selenium是一款强大的Web应用程序自动化测试工具,...
1. **Parser(解析器)**:docutils的解析器可以将reST格式的文本转换为内部数据结构,这一过程称为解析。这个数据结构是独立于输出格式的,可以被后续的处理器使用。 2. **Writer(写入器)**:docutils支持多种...
docutils-solarized rst2html5.py的样式表关于明暗docutilsCSS样式表,由默认的启发由君特Milde和由马蒂亚斯艾森。演示版 (基于此存储库中的demo.rst )。用法安装最新的docutils快照克隆此存储库在终端运行中: ...
2. **生成HTML**:Docutils可以将RST转换为HTML,这是Web上最常用的格式。这使得开发者可以轻松地将文档发布到网页上,或者在Odoo应用中嵌入帮助文档。 3. **生成其他格式**:除了HTML,Docutils还支持生成PDF、...
这个资源的全名揭示了它的主要功能,即一个用于将Docutils文档转换为HTML5格式的写入器。 Docutils是一个开源项目,提供了一套工具,用于处理纯文本格式的结构化文档,如ReStructuredText(reST)。ReST是一种易于...
此外,docutils还提供了`commands`模块,包含了命令行工具,如`rst2html`、`rst2pdf`等,方便用户直接在终端中转换文档。这些命令行工具对于快速预览或生成文档非常实用。 在实际开发中,docutils常与Sphinx一起...
接下来,我们将详细介绍如何使用 Docutils 将 reStructuredText 文件转换为 HTML 格式: 1. **下载源代码**:从 Docutils 的官方 SVN 仓库下载源代码: - 地址:[https://docutils.sourceforge.io/]...
资源分类:Python库 所属语言:Python 资源全名:nwb_docutils-0.3.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Python库“rstobj-0.0.1-py2.py3-none-any.whl”是一个用于处理 RestructuredText(简称reST)格式的文本的工具。reStructuredText是一种轻量级、易于阅读和写作的文本格式,常用于编写文档,如Python项目的README...
综合来看,"DocUtils.zip"中的内容很可能是实现了一个Java SpringBoot应用,该应用能够处理Word模板,生成新的Word文档,并能将Word文档转换为PDF格式,同时支持在PDF中插入图片。这对于需要批量生成或格式化文档的...
使用freemarker 生成doc文件
python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm欢迎下载
docutils 的 reStructuredText 编写器该项目旨在实现一个编写器,该编写器根据 docutils 节点树表示重新... 这应该可以从 Python 源代码中提取 reStructuredText 文档字符串并将它们导出为 rst 文件以供 Sphinx 处理。
此程序包旨在在JavaScript环境中启用reStructuredText(RST)处理(读取,转换,写入)。 它旨在在浏览器和NodeJS中工作。 设置和配置 使用git克隆存储库: $ git clone ...