Минимальный набор файлов, необходимый для распространения кода, скомпилированного с помощью встроенного Cython, и обеспечения его работы на любой машине

TL;DR: как использовать Cython в качестве метода распространения вместо Py2exe, cx_freeze, pyinstaller и т. Д.


После создания исполняемого файла в Cython я хотел бы увидеть, как можно было бы распространить программу Python любому пользователю Windows (у которого еще не установлен Python на его машине), скомпилировав ее сначала с помощью Cython.--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

Он работает и производит 140 КБ test.exe исполняемый файл.

Бег test.exe на другой машине не работает "из коробки", требует:

  • python37.dll в той же папке
  • для установки обычного файла vc_redist.x64.exe

Даже с этим он по-прежнему не работает (снимок экрана ниже вместо копирования / вставки, потому что я не управлял копированием / вставкой в ​​виртуальной машине - здесь не по теме):

ModuleNotFoundError: нет модуля с именем "encodings"

Вопрос: какой минимальный набор файлов необходим для распространения --embed-Cython-скомпилированный код и заставить его работать на любой машине (без предварительно установленного Python)?

1 ответ

Решение

После дальнейшего исследования (я пробовал использовать пустую виртуальную машину Win 7 x64, без предварительно установленного VCredist), кажется, что этих файлов достаточно:

Заметки:

  • если вам нужна другая библиотека, например pygame, просто скопируйте / вставьте папку из C:\Python37\Lib\site-packages\pygame кажется работает

  • для меня concrt140.dll, msvcp140.dll, vccorlib140.dll не показались необходимыми

Другие вопросы по тегам