Python项目打包发布方法

  目前python打包工具有多个,目前比较好用的为pyinstaller,该工具可以支持在window和linux下使用。

      在windows下,大小为几十K的源文件打包成exe文件,可能为几十兆,原因是把程序所引用的库文件也一起打包在一起。

      如下以windows系统为例,分2个步骤,演示如何使用pyinstaller打包。

      第1步:安装pyinstaller

      安装pyinstaller之前首先必须有pip,如果还没有安装,请用度娘搜索“python安装pip”,资源丰富,在此不再介绍,使用pip安装pyinstaller的命令如下:

pip install pyinstaller

 第2步:打包exe文件

      如果是打包一个py文件,可以使用“pyinstaller -F 待打包文件名”进行打包,在命令执行完毕后,会在dist目录下生成一个“待打包文件名.exe”的文件。如果不使用“-F”参数,则会在dist目录下生成一个“待打包文件名”的文件夹,该文件夹下包含“待打包文件.exe”,但是要整个文件夹在一起才能正常工作,因为这个文件夹的功能相当于使用“-F”时的一个“待打包文件.exe”。

      使用加F参数打包成一个exe文件的操作截图如下:

 使用“F”强制打包参数,有时会导致软件功能运行不正常,仅限于小的范例使用,如果项目有多个py文件,则建议别再使用“F”参数。

      如果项目有多个文件,打包时可以把多个文件列出来,中间用空格隔开即可。

      如果需要修改认图标为指定图标,则使用“-i  图标文件名”来实现。

      如下为使用多个py文件和图标的打包截图。

 pyinstaller的参数见下表,大家可以在需要时参考

参数参数全称参数说明

-F

–onefile

打包成单个可执行文件,如果你的代码都写在一个.py文件,则可以使用,如果是多个.py文件,建议不要使用。

-D

–onedir

打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,该方式代码较易于维护。

-K–tk在部署时包含 TCL/TK。
-a–ascii不包含编码.在支持Unicode的python版本上认包含所有的编码。
-d–debug

产生debug版本的可执行文件

-w–windowed,–noconsole使用Windows子系统执行.当程序启动的时候不会打开命令行(仅对Windows有效)
-cNowindowed,–console

使用控制台子系统执行(认)(只对Windows有效)

pyinstaller -c  xxxx.py

pyinstaller xxxx.py --console

-s–strip

可执行文件和共享库将run through strip。

注意Cygwin的strip可能使普通的win32 Dll无法使用

-X–upx如果有UPX安装(执行Configure.py时检测),则会压缩执行文件(Windows系统中的DLL也会)
-o DIR–out=DIR指定spec文件生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下。
-p DIR–path=DIR

设置导入路径(和使用PYTHONPATH效果相似)。

可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源

-i <FILE.ICO>–icon=<FILE.ICO>将file.ico添加为可执行文件的资源(只对Windows系统有效),改变程序的图标  pyinstaller -i  ico路径 xxxxx.py
–i <FILE.EXE, N>–icon=<FILE.EXE, N>

将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)

-v FILE–version=FILE将verfile作为可执行文件的版本资源(只对Windows系统有效)
-n NAME–name=NAME

可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...