Как мне скомпилировать приложение IronPython в EXE без Visual Studios (и, возможно, с py2exe)? - PullRequest
3 голосов
/ 18 ноября 2011

Поэтому я попытался найти этот ответ, прежде чем прийти прямо сюда, чтобы спросить его.Определенно представляется возможным превратить приложение / набор скриптов IronPython в EXE-файл.Одна проблема заключается в том, что все они говорят об использовании IronPython с IronPython Studios, плагином Python для Visual Studios.В последний раз я проверял, думал ли я, что IronPython Studios была в основном заменена на плагин Python Tools for Visual Studios (или PTVS).Проблема в том, что из-за того, как мой код структурирован, ему действительно удалось вывести из строя плагин и, следовательно, Visual Studios при загрузке моего кода в IDE.Это будет происходить до следующего запланированного обновления в конце месяца или в начале следующего месяца.Так что это не вариант, так как вместо этого мне приходилось разрабатывать свой проект в Eclipse с помощью плагина PyDev.

Ранее я использовал py2exe для преобразования некоторых базовых приложений Python в исполняемые файлы, но это былокогда я использовал интерпретатор CPython.Я не знаю, как бы я настроил py2exe для работы с IronPython.Можно ли использовать py2exe, чтобы сделать исполняемый файл IronPython?И если моя программа использует дополнительные сборки C # для своей работы, как бы мне их настроить, чтобы py2exe мог их использовать, и мой исполняемый файл мог видеть их для ссылок?

Ответы [ 3 ]

6 голосов
/ 19 ноября 2011

IronPython поставляется с компилятором командной строки pyc.py (в папке Tools \ Scripts), который вы можете использовать. Другой альтернативой является использование SharpDevelop , которое скомпилирует ваш код IronPython в исполняемый файл.

Ваше скомпилированное приложение IronPython может использовать сборки C #, если они находятся в GAC или если они развернуты вместе с исполняемым файлом в той же папке.

3 голосов
/ 20 ноября 2011

Pyc.py - это то, что нужно, так как Python Tools for Visual Studio не поддерживает прямую компиляцию.SharpDevelop имеет пользовательские действия для сборки Ironpython.Я использовал #Develop, пока PTVS не вышел.

См. Этот вопрос IronPython: EXE-файл, скомпилированный с использованием pyc.py, не может импортировать модуль "os" для некоторых подробных шагов, которые необходимо выполнить для создания вашего EXE-файла.Не забудьте скомпилировать стандартные модули lib, которые вы используете.Если вам нужно, чтобы пользователи загружали и устанавливали IronPython, вам не нужно будет компилировать скрипт.

2 голосов
/ 30 августа 2018

Я использую IronPyton 2.7.8 и ipyc.exe, а не Tools \ Scripts \ pyc.py, и это вносит некоторые различия, поэтому я оставляю здесь некоторую информацию.

1. использовать / вставлять и / автономный вариант

Если вы разделите ваш скрипт на несколько файлов py, то используйте параметр / embed с параметром / main, они сгенерируют один exe-файл, включающий все файлы скриптов py. Например, у вас есть скрипт «MyMain.py» и «OtherFuncs.py», как показано ниже.

C: \ Program Files \ IronPython 2.7 \ ipyc.exe /main:MyMain.py OtherFuncs.py / embed / platform: x86 / автономный / target: winexe

/ опция standalone используется для включения базовых dll-файлов для IronPython в папку C: \ Program Files \ IronPython 2.7 \, например IronPython.dll, IronPython.Modules.dll, Microsoft.Dynamic.dll и Microsoft.Scripting.dll

Но будьте осторожны, что DLL / IronPyton.SQLite.dll и DLL / IronPtyhon.WPF.dll не включены, поэтому, если вы используете в своем скрипте функциональность WPF или SQLite, вам следует дополнительно скопировать и распространить эти dll-файлы вместе с вашим exe-файлом. файл, и вы должны добавить следующую строку в вашем скрипте

clr.AddReference("IronPython.Wpf")
clr.AddReference("IronPython.SQLite")

2. файлы сценариев библиотек в папке C: \ Program Files \ IronPython 2.7 \ Lib

ваш сценарий использует множество стандартных функций, поддерживаемых файлами сценариев библиотеки в папке C: \ Program Files \ IronPython 2.7 \ Lib, поэтому вы должны распространять эти файлы сценариев вместе с вашим exe-файлом.

есть две опции: одна просто копирует папку Lib в папку с вашим exe-файлом, а другая создает StdLib.dll со всеми стандартными файлами сценариев библиотеки в качестве следующей команды.

C: \ Program Files \ IronPython 2.7 \ ipyc.exe /main:StdLib.py io.py sys.py ... все необходимые файлы сценариев ... / embed / platform: x86 / target: dll

StdLib.py - это просто пустой файл с размером 0, это хак для создания одного файла DLL. и вы должны добавить следующие строки в самой первой строке вашего скрипта.

import clr
clr.AddReference("StdLib")

Я использую скрипт на python, что делает StdLib.dll примерно следующим образом.

#...
#Build StdLib.DLL
ipath = 'C:\Program Files\IronPython 2.7'
ipyc = ipath + '\ipyc.exe'
# any library files you need
gb += glob.glob(r".\Lib\*.py")
gb += glob.glob(r".\Lib\encodings\*.py")
# ...
gb = [ipyc,"/main:StdLib.py","/embed","/platform:x86","/target:dll"] + gb
subprocess.call(gb)
print "Made StdLib"
...