Bas*_*asj 5 python windows compilation cython cx-freeze
TL;DR:如何使用 Cython 作为分发方法而不是 Py2exe、cx_freeze、pyinstaller 等。
继在用Cython制作一个可执行的,我想看看它怎么可能给一个Python程序分发到任何Windows用户(谁没有的Python已经安装了机上),通过用Cython第一编译它--embed。
让我们使用一个test.py:
import json
print(json.dumps({'key': 'hello world'}))
Run Code Online (Sandbox Code Playgroud)
并编译它:
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
Run Code Online (Sandbox Code Playgroud)
它可以工作并生成一个 140KB 的test.exe可执行文件。
test.exe在另一台机器上运行不能开箱即用,它需要:
即使这样,它仍然不起作用(下面的屏幕截图而不是复制/粘贴,因为我没有管理 VM 中的复制/粘贴 - 此处偏离主题):
ModuleNotFoundError:没有名为“编码”的模块
问题:分发--embed-Cython 编译的代码并使其在任何机器上运行(之前没有安装 Python)所需的最小文件集是什么?
经过进一步研究(我在一个空的 Win 7 x64 位 VM 中尝试过,之前没有安装任何 VCredist),似乎这些文件就足够了:
程序本身,test.exe(由 生成cython --embed并编译cl.exe)
python37.dll
python37.zip从命名的包来的“Windows X86-64嵌入zip文件”在https://www.python.org/downloads/windows/
vcruntime140.dll,如我可以将 Visual Studio 2015 C++ Redistributable DLL 与我的应用程序捆绑在一起吗?或要求用户安装vc_redist.x64.exe前
ucrtbase.dll
api-ms-win-*.dll还需要30多个文件;如果不是,您将出现以下错误:
... 缺少 api-ms-win-crt-runtime-l1-1-0.dll ...
笔记:
如果您需要另一个库,例如pygame,只需从C:\Python37\Lib\site-packages\pygame似乎工作的文件夹中复制/粘贴
对我来说,concrt140.dll、msvcp140.dll、vccorlib140.dll 似乎没有必要
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           916 次  |  
        
|   最近记录:  |