参考
简介
- 引入Cython的目的是:将部分python源码转译成c,然后编译成.pyd格式的动态链接库,避免软件核心逻辑被轻易反编译
- 引入PyInstaller的目的,打包成exe,可选单个文件或目录
Python2.7 安装依赖
- 本地环境是 Python2.7 和 Python3.8 并存,下面通过python2和pip2来引用全局python2.7
- 安装 VC For Python 2.7
- 全局安装 Cython,我这里用清华的镜像可以直接装:
pip2 install cython
- 全局安装 PyInstaller。这个稍微麻烦些,适合 python2.7 的最后一版是 3.6,直接用
pip2 install PyInstaller==3.6
未成功,只能手动安装。 方法1:
- 从 PyPi 下载 3.6 版的 tar.gz 包,链接在此
- 解压到本地某目录,在该目录打开命令行窗口
- 执行
python2 setup.py install
方法2:
- 下载非官方的 Windows 预编译轮子,在这里查找并下载 PyInstaller3.6 的 whl 文件
- 本地直接执行
pip2 install Path\to\PyInstaller-3.6-py2.py3-none-any.whl
- 成功后可以直接命令行中执行 PyInstaller ,如果系统中也安装了 Python3 的 PyInstaller,那么可以用
python2 -m PyInstaller
调用 - 至此,依赖环境已经就绪
构建
把参考例程克隆到本地
git clone https://github.com/prologic/pyinstaller-cython-bundling.git cd pyinstaller-cython-bundling
项目中的 build.sh 不适用于 Windows,需要自行在命令行执行以下命令:
- 原脚本中的 pip install 步骤已经在依赖一节中完成,跳过
- 执行
python setup.py develop
- 执行
python2 -m PyInstaller -r file_a.so,dll,file_a.so -r file_b.so,dll,file_b.so -D ./bin/hello
上面用-r
参数指定输入文件,类型,名称
,多个文件依次传入;-D 表示构建成目录,指定-F 可构建成单个EXE;最后是入口文件
- 构建完成后可以在 dist 目录中找到生成的 hello.exe
Python3.8 安装VC相关依赖
- 这个非常折腾,也可能是我自己的环境问题,仅供参考吧
- 按照py2的步骤,会卡在setup.py步骤,报错说io.h找不到
- 用everything全盘找了一下,确实没有适用的io.h
按照这篇文章的方案,在VS2017中安装:
- Visual C ++ Build 工具的核心功能。
- VC++ 2017 v141工具集(x86,x64)
- Visual C++ 2017 可再发行组件更新
- 用于 Desktop C++ 的 Windows 10 SDK(10.0.16299.0)
这一项非常重要,io.h只在这个版本号的SDK中
- 需要使用开始菜单中VS2017的子菜单中,点击“适用于 VS2017的xxx命令行”项,在打开的命令窗口中进行构建,主要是要调用vcvarxxx.bat来设置构建环境。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。