使用pyinstaller 2.1将python打包并添加版本信

系统 2031 0

  最近用 wxpython写了一个小的脚本,因为想要发布给没有装python和wxpython的人使用,遂决定使用pyinstaller 2.1进行打包。

其中遇到几个问题:

1,给打包的文件添加图标

  查看pyinstaller 的操作手册很容易发现:

-i  <FILE.ico> -i  <FILE.exe,ID> --icon= <FILE.ico> --icon= <FILE.exe,ID>
  Add an icon to the output executable. Specify an icon  FILE .ico to use that icon. Specify an existing  .exe  file giving the  ID  to extract the icon with that ID.

  可以在使用的时候,在命令行中执行,不过更推荐的是使用bat文件来执行

  python pyinstaller.py --icon=targetico_path.ico--onefile   --windowed target_py_file.py进行打包

2,给打包的程序添加版本信息

  查看pyinstaller 操作手册发现:

--version-file= version_text_file
  Add a Version resource to the .exe output using a  version_text_file  as produced by  pyi-grab_version

  也就是说要添加版本信息需要指定一个版本信息文件,版本信息文件操作手册中也给了制作方法

Capturing Version Data

pyi-grab_version  executable_with_version_resource

The  pyi-grab_version  command is invoked with the full path name of a Windows executable that has a Version resource. (A Version resource contains a group of data structures, some containing binary integers and some containing strings, that describe the properties of the executable. For details see the  Version Information Structures  page.)

The command writes text that represents a Version resource in readable form. The version text is written to standard output. You can copy it from the console window or redirect it to a file. Then you can edit the version information to adapt it to your program. This approach is used because version resources are complex. Some elements are optional, others required. When you view the version tab of a Properties dialog, there's no simple relationship between the data displayed and the structure of the resource. Using  pyi-grab_version  you can find an executable that displays the kind of information you want, copy its resource data, and modify it to suit your package.

The version text file is encoded UTF-8 and may contain non-ASCII characters. (Unicode characters are allowed in Version resource string fields.) Be sure to edit and save the text file in UTF-8 unless you are certain it contains only ASCII string values.

The edited version text file can be given with a  --version-file=  option to  pyinstaller  or  pyi-makespec . The text data is converted to a Version resource and installed in the executable output.

In a Version resource there are two 64-bit binary values,  FileVersion  and  ProductVersion . In the version text file these are given as four-element tuples, for example:

      filevers=(2, 0, 4, 0),

prodvers=(2, 0, 4, 0),


    

The elements of each tuple represent 16-bit values from most-significant to least-significant. For example the  FileVersion  value given resolves to  0002000000040000  in hex.

set_version   version_text_file   executable_file

The  set_version  utility reads a version text file as written by  pyi-grab_version , converts it to a Version resource, and installs that resource in the  executable_file  specified.

For advanced uses, examine a version text file. You find it is Python code that creates a  VSVersionInfo  object. The class definition for  VSVersionInfo  is found in  utils/versioninfo.py  in the PyInstaller  distribution folder. You can write a program that imports that module. In that program you can  eval  the contents of a version info text file to produce a  VSVersionInfo  object. You can use the  .toRaw()  method of that object to produce a Version resource in binary form. Or you can apply the  unicode()  function to the object to reproduce the version text file.

 

  上面的意思呢就是使用pyinstaller内置的grab_version.py工具获得其他.exe程序的版本信息文件,版本信息文件里面包括公司名,程序内部名称版本号之类,然后再把这个信息里面的相关信息更改成你想要的信息,再使用上面的--version-file= version_text_file  参数的把版本信息注射到.exe中去。

  其中注意因为这个版本信息是严格的数据结构,所以最好不要用notepad打开,有可能导致版本信息文件失效,我用的是notepad++更改,实测有用。

  其中grab_version.py的位置在.\PyInstaller-2.1\utils,pyinstaller 2.1根目录下的utils目录下。

  可以在使用的时候,在命令行中执行,需要将当前路径转到该脚本所在地或者指定grab_version.py的路径,不过更推荐的是使用bat文件来执行,只需要将下面字符保存到bat中方到grab_version.py文件里面去了:

  python grab_version.py targetExe_path

  比如:

  python grab_version.py C:\Windows\System32\diskext.exe

  产生的版本信息文件就在程序的当前目录下,更改好版本信息文件之后就可以开始使用了 

  python pyinstaller.py --version-file=file_version_info.txt --icon=ico.ico --onefile --windowed target.py

  OK,问题解决。

 

使用pyinstaller 2.1将python打包并添加版本信息和图标


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论