分发嵌入式Cython编译代码并使其在任何机器上运行所需的最小文件集

6

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是无法直接使用的,需要:

即使如此,仍然无法正常工作(截图见下面,因为我没有在虚拟机中成功复制和粘贴 - 这里不是主题):

ModuleNotFoundError: No module named 'encodings'

enter image description here

问题:分发一个经过--embed-Cython编译的最少文件集,并使其在任何机器上正常工作(在机器上没有预先安装Python)需要哪些文件?


相关内容:https://dev59.com/3bTna4cB1Zd3GeqPBNuO - ead
1个回答

10

经过进一步研究(我在一个空的Win 7 x64位虚拟机中尝试,没有安装任何VCredist),似乎这些文件已经足够:

注意:

  • 如果您需要另一个库,比如pygame,只需从C:\Python37\Lib\site-packages\pygame复制/粘贴文件夹即可。

  • 对我来说,concrt140.dll、msvcp140.dll和vccorlib140.dll似乎不是必需的。

测试所有这些内容非常有用:防止Python嵌入式查找我的默认路径C:\ Python38的模块


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接