TL;DR:如何用Cython来代替Py2exe、cx_freeze、pyinstaller等分发方式。
以下是 在Cython中制作可执行文件我想知道如何通过先用Cython编译Python程序,将其发布给任何Windows用户(他的机器上还没有安装Python)。--embed
.
让我们用一个 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
在另一台机器上不能开箱即用,它需要。
即使这样做,它仍然不工作 (下面的截图而不是复制粘贴,因为我在虚拟机中没有管理好复制粘贴--这里不说了):
ModuleNotFoundError.没有名为'encodings'的模块。没有名为 "编码 "的模块
问题:分发一个文件所需的最小文件集是什么?--embed
-Cython编译的代码,并使其在任何机器上工作(之前没有安装Python)?
经过进一步研究,似乎这些文件已经足够了。
test.exe
(制作人) cython --embed
和汇编 cl.exe
)python37.dll
python37.zip
来自于名为 "Windows x86-64可嵌入的压缩文件" 在 https:/www.python.orgdownloadswindows
vcruntime140.dll
如上所述 我可以在我的应用程序中捆绑Visual Studio 2015 C++ Redistributable DLL的吗? 或要求用户安装 vc_redist.x64.exe。 之前
笔记。
如果你需要另一个图书馆,像 pygame
,只需将文件夹从 C:\Python37\Lib\site-packages\pygame
似乎可以
对我来说,concrt140.dll、msvcp140.dll、vccorlib140.dll似乎没有必要。