Python+PyInstaller+Cython打包exe文件
近期写了一个Python程序,但是不想把源码公开,于是在网上查询相关资料,发现可以通过生成pyd
文件,最后打包成exe
执行程序的方式,尽可能地防止反编译。
一. 简介
本文章内容适合windows
开发环境,简单介绍一下接下来会涉及到的东西。
- PyInstaller: 是一款用于将pyhon程序打包成exe文件的工具。
- Cython:是用Python实现的一种语言,可以用来写Python扩展,用它写出来的库都可以通过import来载入,性能上比Python的快。
- pyd文件:我们都知道,.py是编写好的源代码,而.pyc是编译好的字节码,.pyd则是一种python动态模块,实质上是一种dll文件。
二. 安装PyInstaller和Cython
我们可以通过pip来安装。
- 安装PyInstaller:
pip install pyinstaller
- 安装Cython:
pip install Cyphton
然后记得配置环境变量,确保命令行能执行pip
、pyinstaller
、cython
命令。
三. 开始打包
假设我们已经写好了一个python文件,名为course.py
,接下来我们就可以开始打包了。
第一步:先将python中引用的第三方库或包对应的文件(夹)复制到当前目录。
第二步:在当前目录创建一个setup.py
文件,内容如下。
1 | from distutils.core import setup |
第三步:生成pyd文件,执行下列命令。
1 | python setup.py build_ext --inplace |
到这里,文件夹中会出现一个名为course.cp37-win_amd64.pyd
的文件,可将其改名为course.pyd
。
第四步:在当前目录创建一个index.py
文件,内容如下。
1 | # 这里把course.py中用到的库复制过来 |
第五步:打包
1 | pyinstaller.exe -F .\index.py -i .\s.ico |
-F指定只生成一个exe文件,-i指定exe的图标,其他参数可以自行查询。
最后,exe文件会生成在当前目录下的dist文件夹中。
四. 相关报错
1. 生成pyd文件时无法找到vcvarsall.bat文件
报错:Unable to find vcvarsall.bat
查阅网上资料,大部分说的是VC环境问题,我的环境是Visual Studio 2019,Python3.6。
两个解决方法:
① 卸载Visual Studio和Python3.6,安装Visual Studio 2017,选装 Anaconda3、Python本机开发工具,然后重新配置Python环境。
② 略过生成pyd文件这一步(直接对源文件打包),但是这样打包出来的exe容易被反编译。
2. pip版本过低,需要升级
如果遇到pip版本过低,可能会遇到错误:You are using pip version 10.0.1, however version 20.0.2 is available
解决方法:执行下列命令升级pip(注意要使用管理员身份进入cmd执行)。
1 | python -m pip install --upgrade pip -i https://pypi.douban.com/simple |