使用PyInstaller的简单指南

这是一个简单的演练,可以使Pyinstaller启动并运行。
我决定尝试一下Pi,因为它声称默认情况下将其捆绑到其可执行文件中的内容更具选择性,并且如果您已安装了它,它还将UPX(终极包装器)集成到构建过程中。它还声称在Linux上的功能为奖励(我没有测试)。我强烈建议使用UPX选项,并将涵盖如何使其在Windows上工作。
在撰写本文时,最新的Pyinstaller版本为1.3,UPX为2.03。
这里的结果将是将一个简单的Python应用程序转换为可以在任何Windows XP机器上复制并运行的单个.exe文件。它可能在许多其他Windows平台(和Linux)上工作,但我尚未对其进行测试。
在继续之前,您将需要一个工作的Python安装。 Pyinstaller声称与版本1.5至2.4的兼容性。我正在运行2.5,而且工作正常。
您可以从SourceForge下载Pyinstaller
http://www.pyinstaller.org/

Pyinstaller不像大多数库那样在Python的站点包装目录下安装。相反,您可以将其目录的内容(当您解开下载文件时看到的内容)的内容,但请记住,您要么必须键入其位置或更改系统路径以使构建过程正常工作,因此尝试保持相对较短。我什至没有尝试过路径选项,因此,如果您尝试并起作用,请在此处放置便条。我的安装位置是
C:\ python25 \ pyinstaller13
,这意味着我将所有这些文件从存档文件夹中获取,然后将它们复制到安装文件夹。记下这条路,因为如果它不同,您必须替换。
需要配置Pyinstaller。由于它与所有这些Python版本兼容,因此需要知道它正在使用哪个版本。不过,这很简单 - 打开您刚刚复制这些文件的目录,然后双击
configure.py
。 PI将扫描您的Python安装DIR,并制作一个为您的安装定制的config.dat文件。
接下来,继续下载UPX
http://upx.sourceforge.net/#download
。 (我正在使用Win32控制台软件包)。出于Pyinstaller的目的,您只需要一个文件,
upx.exe
,放置在您的系统路径中。解开存档包装后,将upx.exe复制到您的c:\ pythonxx目录。这里的所有都是它的。
我从我先前演练中使用的基本Hello World应用程序开始:

选择 | 换行 | 行号
  1. #!/usr/bin/env python 
  2. for i in xrange(10000): 
  3.     print "Hello, World!"

使用您喜欢的编辑器创建此此版本,并将其保存为
helloworld.py
。接下来,创建一个批处理文件以运行构建过程。还记得您复制Pyinstall的那条路吗?您需要在下面的第一行上进行此处。返回您的编辑器以键入以下内容:

选择 | 换行 | 行号
  1. set PIP=c:\python25\pyInstaller13\
  2. python %PIP%Makespec.py --onefile --console --upx --tk HelloWorld.py
  3. python %PIP%Build.py HelloWorld.spec

您可以使用您想要的任何命名约定,但是由于每个项目可能会有所不同,所以我将其保存为
helloworld.bat
,就在我的helloworld.py文件旁边。查看基础知识结尾的笔记 关于那些命令行选项。
您现在应该有两个文件,
helloworld.py

helloworld.bat
,都在同一目录中。
双击
helloworld.bat
坐下来。根据您的硬件,可能需要几秒钟到一分钟才能完成。它似乎比我最近描述的可比PY2EXE构建的时间更长,并且UPX压缩通常会增加时间,但是此示例应该很快。
当CMD窗口完成时,请检查存储两个文件的目录。您现在应该查看一个新目录(
Buildhelloworld
)和一些新文件(
helloworld.spec
,,,,
warnhelloworld.txt
, 和
helloworld.exe
)。 Pyinstaller使用了构建目录和.spec文件,并且可以删除。 warnxxx.txt文件包含警告;看来这些总是在这里,但是到目前为止,它们根本不会影响该程序。并且.EXE文件已准备就绪。
如果您看到我的PY2EXE演练,您可能还记得我的110字节源文件中的Helloworld.exe以3.2mb的价格出现。这个重量为1.5MB,这是一个很大的改进。在大型项目中,外部.dll和其他资源被捆绑到您的项目中,差异应该更加重要。
继续,双击
helloworld.exe
, 我知道你想要...
复制
helloworld.exe
到另一台计算机(没有python),然后在那里运行它,只是为了看到它确实有效。
一些注释:
就像PY2EXE一样,Pyinstaller将Python解释器,任何必需的DLL和其输出文件中的任何引用的库捆绑在一起,将100个字节转换为1.5MB。但是,这比PY2EXE产生的3.2MB小得多。
当您创建时
helloworld.bat
,上面,您想根据"编译"的每个程序做出几个简单的选择。这是快速摘要:

选择 | 换行 | 行号
  1.  
  2.  
  3.  
  4.     --tk        This is required for inclusion of the tcl/Tk
  5.             libraries.  Unlike py2exe, PyInstaller doesn't 
  6.             recognized that this is used and include it
  7.             automatically.  However, you can leave it in
  8.             without doing any harm (as we did in this
  9.             example).  It adds some overhead, but the size
  10.             seems to vary.
  11.  
  12.     --upx        I mentioned that this is a great option, and 
  13.             it is, but it's really slow, especially as your
  14.             source file gets bigger.  It's a great option
  15.             for your final compile before distributing, but
  16.             you might save a lot of time if you turn it off
  17.             until then.
  18.  
  19.     --console    This is the DOS-like box, and carries the same
  20.     --noconsole    significance as the python vs. pythonw usage 
  21.             for your other programs.  If your program runs
  22.             in Windows and you've finished troubleshooting,
  23.             you probably want --noconsole.
  24.  

可以在www.pyinstaller.org上获得更多信息,其中包括一些不太长的文档页面。
干杯,
- 标记

# 回答1


我喜欢你的风格,马克。这是一个很棒的信息,我可以看到您遇到了一些麻烦,可以将其交给我们的会员。我还看到您现在正在链接线程。这是很棒的会员党派!太感谢了。
我做了一个粘性,所以
这里
是回到PY2EXE线程的链接。
# 回答2


如何打包更复杂的文件结构?任何项目都有多个目录 - 如何管理文件树?
谢谢 ..
# 回答3


出色的指南标记!
真的很容易遵循,并且实际上起作用。您在正在从事的项目中为我节省了很多时间。非常感谢!
由于您显然具有清楚地解释复杂主题的技能,因此我希望您会考虑发布一些指南。
# 回答4


嘿,我一直在试图让Pyinstaller上班,但我遇到了以下问题。

有人可以帮我吗?
(warnhelloworld.txt)
W:没有名为POSIX的模块(有条件导入OS)
W:没有名为PWD的模块(延迟,有条件的IMPO PosixPath的RT)
W:没有名为Win32API的模块(由IU延迟导入)
W:没有名为POSIX的模块(延迟,有条件导入IU)
W:没有名为org的模块(副本的顶级导入)
W:没有名为_emx_link的模块(有条件导入OS)
W:延迟__import__在第0行中检测到hack hack -编码(c:\ python25 \ lib \ cododings \ __ init __ init __. pyc)
W:在第0行中检测到的延迟评估hack(c:\ python25 \ lib \ os.pyc)
W:在第0行中检测到的延迟条件EXEC语句 - IU(C:\ Python25 \ pyinstaller1.3 \ iu.pyc)
W:在第0行中检测到的延迟条件EXEC语句 - IU(C:\ Python25 \ pyinstaller1.3 \ iu.pyc)

# 回答5


这些说明很棒,但它们对我不起作用。这是我运行helloworld.bat文件时看到的:
c:\ python25 \脚本> python c:\ python25 \ pyinstaller13 \ build.py helloworld.spec'python'''''''''''''''''''python'''''''''''不被识别为内部或外部命令,可操作的程序或批处理文件
当我在任何.py脚本之前输入'python'一词时,我会得到"'python'的认可..."。
有任何想法吗?
大学教师
# 回答6

@dbpeckham

1个原因,2个解决方案:
1. python.exe居住的目录,不是路径变量的一部分
1.将目录添加到python.exe居住的位置,并将路径环境变量添加
2.带有完整路径的批处理文件中的" python"
那应该解决您的问题。
最好的RGD,
- geert

# 回答7


几个月前,我放弃了Pyinstaller,但我再次尝试。
我将upx.exe文件复制到c:/python25/
我运行c:/python25/pyinstaller-1.3/configure.py,得到以下答复:
我:找到TCL/TK ...
I:找到TCL/TK版本8.4
I:Zlib的测试...
我:... Zlib可用
I:测试设置图标,版本资源的能力...
I:...资源更新可用
I:测试Unicode支持...
我:... Unicode可用
I:对UPX进行测试...
我:... UPX不可用
I:计算PYZ依赖性...
我运行了helloworld.bat并得到以下答复:
..."您必须在构建之前运行configure.py!"
语法:语法无效
有什么建议么?
# 回答8


PS:我正在使用Windows Vista。
dbpeckham
# 回答9


你好,
我也非常感兴趣地有更多有关如何使用不同目录进行编译的更多信息,并在高级脚本中导入的LIB和空的__init__.py文件。
你能帮忙吗 ?
# 回答10


你好,
我完成了您所说的一切,当我单击.bat文件时,什么也没发生。我想念什么吗?
感谢您的回答和最好的问候。

标签: python

评论已关闭