TL;DR:如何使用Cython作为分发方法,而不是Py2exe,cx_freeze,pyinstaller等。
在使用Cython创建可执行文件之后,我想看看如何通过首先编译Python程序并使用Cython --embed
将其分发给任何没有在其计算机上安装Python的Windows用户。
让我们使用一个名为test.py
的文件:
import json
print(json.dumps({'key': 'hello world'}))
并编译它:
cython test.py --embed
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
cl test.c /I C:\Python37\include /link C:\Python37\libs\python37.lib
这段代码可以正常运行并生成一个大小为140KB的test.exe
可执行文件。
在另一台机器上运行test.exe
是无法直接使用的,需要:
- 将python37.dll放在相同的文件夹中
- 安装通常的vc_redist.x64.exe文件
即使如此,仍然无法正常工作(截图见下面,因为我没有在虚拟机中成功复制和粘贴 - 这里不是主题):
ModuleNotFoundError: No module named 'encodings'
问题:分发一个经过--embed-Cython编译的最少文件集,并使其在任何机器上正常工作(在机器上没有预先安装Python)需要哪些文件?