OrzLee

这个世界上只有一个问题
那就是时间问题

Python打包exe和解包

python.jpg

前言

之前自己接触过[Python][1]一段时间,不过那只是自己无聊瞎折腾。[Python][1]使用空格缩进划分代码块,强制规范了代码得可读性。最近公司有个项目,由[Python][1]打包的windows可执行程序,项目已经有了,只不过由于没有更新导致无法使用,需要解包调整代码后再打包。程序不是orzlee写的,也没有多少[Python][1]经验,不过会一种编程语言,其他的语言也就是语法差异了。

解包

[Python][1]解包使用[pyinstxtractor.py][2],将[pyinstxtractor.py][2]和将要解包的.exe放到同一文件夹后执行:

python pyinstxtractor.py example.exe

解包后会在当前目录生成example.exe_extracted文件夹。

如果[Python][1]打包的可执行程序是[Python 2.7][3]版本,那么example.exe_extracted文件夹中应该直接解包出了pyc文件,其他版本还需要一步。

  1. example.exe_extracted文件夹中找到没有后缀的文件(在文件夹一级目录,不用找其他目录),一般就是主要的pyc文件了(orzlee这个解包后就是main)。

  2. 由于其他版本的[Python][1]解包后缺少文件头,所以需要加上:

    1. 需要十六进制编辑器(orzlee随便在网上找了一个[Hxd][4])。

    2. 先将main文件复制一份,重命名为main.pyc

    3. 先打开文件夹中其他pyc后缀的文件,复制文件头。 Hxd.png

    4. 打开main.pyc将文件头粘贴后保存。 Hxd_main.png

  3. 安装[uncompyle6][5]:

    pip install uncompyle6
  4. 转换pyc文件:

    uncompyle6 main.pyc > main.py

    至此已经解包成功。

打包

修改完代码后再打包回exe可执行文件,需要[pyinstaller][7]。

  1. 安装[pyinstaller][7]:

    pip install pyinstaller

    还有其他方法[pyinstaller Downloads][6]。

  2. 打包:

    pyinstaller -F main.py

    一定要加上-F参数,不然不会打包成一个文件。 部分参数说明:

    
            -F 生成单个可执行文件;

        -D  –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。

        -w 表示去掉控制台窗口,这在GUI界面时非常有用。命令行程序请无视!;

        -c  –console, –nowindowed 使用控制台,无界面(默认);

        -p 自定义需要加载的类路径,一般用不到;

        -i 表示可执行文件的图标。



#结语

[python][1]打包成exe可执行文件还是第一次见,打包、解包又长见识了。还好这个[python][1]程序非常简单,不然难度真的很大。总之经验是累积起来的,只要有[Google][8]在,这点困难还是能应付的。

[1]:https://www.python.org "点击访问 Python官网"

[2]:https://github.com/countercept/python-exe-unpacker/blob/master/pyinstxtractor.py "点击下载 pyinstxtractor.py"

[3]:https://docs.python.org/2.7/ "点击阅读 Python2.7文档"
[4]:https://mh-nexus.de/en/hxd/ "点击前往 hxd官网"

[5]:https://github.com/rocky/python-uncompyle6 "点击前往 Github:python-uncompyle6"

[6]:https://www.pyinstaller.org/downloads.html "点击访问 pyinstaller安装文档"

[7]:https://www.pyinstaller.org/index.html "点击访问 pyinstaller官网"
[8]:https://www.google.com "点击访问 Google"
本原创文章未经允许不得转载 | 当前页面:OrzLee » Python打包exe和解包

评论