最近根据公司生产需求写了个小脚本,想打包成exe文件分发给其他人使用,但又担心代码本反编译而泄露信息,所以花了一整天时间,磕磕绊绊的,终于搞定了!来之不易的“成果”需要总结和记载(毕竟耗费了生命中一天之久的时长)。

目录

一、python如何打包成exe (常规打包方法)

二、反编译exe文件

三、防止反编译方式生成exe

正文

一、python如何打包成exe (常规打包方法)

1.1首先你要先把自己的程序写好,在pycharm中运行正常。我的程序文件目录结构如下图所示:

1.2直接控制台输入命令:pyinstaller -p C:\Users\Administrator\PycharmProjects\ExportCustomerInfo\venv\Lib\site-packages -i v6.ico -F main.py

此句解释如下:

这里输入自己的第三方引用包的路径(不懂的看我上一篇文章);

这里是将要生成exe的图标设置(友情提示:非ico格式的图片会出错哦)

这里是你要发布的主程序文件

1.3运行结果如下:Building EXE from EXE-00.toc completed successfully.代表成功!

1.4新产生的文件及文件夹如下,请到dist文件夹里去找exe双击运行效果如下:

二、反编译exe文件

2.1先去网上下载一个pyinstxtractor.py的文件,将其和exe文件放到一个新文件夹里面如12345。

下载地址:https://download.csdn.net/download/hmy123cq3/16231988

2.2在电脑cmd命令行,切换到12345这个文件夹路径里并执行如下代码:

python pyinstxtractor.py main.exe

执行效果如下:

2.3可以到如下路径查找文件,可见很多pyc文件,其中我们的机密代码就在这些文件内,反编译pyc文件是很容易的可以借助工具或在线反编译,这里就不详细介绍了。

三、防止反编译方式生成exe

3.1首先,清理环境,将一、二两步产生的文件,全部删除掉。我删除的文件如下图所示:

3.2然后,创建一个py文件,命名为create_pyd.py,然后在此文件中敲入如下代码:

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 29 13:33:20 2018
@author: Li Zeng hai

python build_pyd.py build_ext --inplace
"""

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name='any words.....',
    ext_modules=cythonize(["jr_customer_excel.py", "send_mail.py"]), )

注意最后一行代码了吗,ext_modules=cythonize(["jr_customer_excel.py", "send_mail.py"])...,这里面的数组就是你想要编译成pyd格式的文件,有多少就添加多少。

3.3然后在pycharm控制台执行如下代码:

python create_pyd.py build_ext --inplace

如果执行以上代码出错提示没有Cython,执行如下命令进行安装:

pip install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple

结果如下图所示:

接着将这几个pyd后缀的文件名中的cp39-win_amd64部分去掉,去掉后如下图所示:

3.4执行步骤一中的打包exe(常规方法),即直接执行代码:

pyinstaller -p C:\Users\Administrator\PycharmProjects\ExportCustomerInfo\venv\Lib\site-packages -i v6.ico -F main.py

执行结果如下图所示,Building EXE from EXE-00.toc completed successfully.代表成功了!

此步骤需要注意的一个坑就,main.py顶部的引用,已经要把其他py文件里的引用都加上,不然会提示找不到模块,什么原因我也不知道,我是按错误提示操作的,如下所示:

3.5到dist文件夹里运行exe文件看看成果吧!

3.5重复执行一下步骤二作为校验,结果如下所示:

此时,已经找不到这里面的两个文件了。

至此,本文全部完毕!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐