Кросс-платформенная альтернатива py2exe
py2exe отлично, и я использую его всякий раз, когда хочу упаковать программу python для запуска в системе Windows.
Мой вопрос в том, есть ли эквивалентный инструмент, который я могу использовать для упаковки программы в Windows, но что я могу запустить в Linux?
Ответы
Ответ 1
Хорошо, я сделал это. Он немного взломан, но он отлично работает для моего использования.
Суть его в том, чтобы использовать ModuleFinder, чтобы найти все импортированные модули, отфильтровать любые системные, скомпилировать их и закрепить их.
К сожалению, мой код для этого усеян дополнительными осложнениями, которые не имеют никакого отношения к этому вопросу, поэтому я не могу вставить рабочую программу, просто некоторые фрагменты:
zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED)
sys.path.insert(0, '.')
finder = ModuleFinder()
finder.run_script(source_name)
for name, mod in finder.modules.iteritems():
filename = mod.__file__
if filename is None:
continue
if "python" in filename.lower():
continue
subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename))
zipfile.write(filename, dest_path)
Ответ 2
здесь также PyInstaller, который поддерживает Linux, MacOS и Windows - я еще не использовал его (пока), поэтому я не знаю если вы можете упаковать вещи в windows для linux, но, глядя на manual, это кажется возможным.
EDIT:
FAQ явно заявляет, что вы не можете создать пакет Windows из linux и без пакета mac os из linux - нет ничего о создании linux из двух других источников, но это может не сработать.
EDIT2:
После небольшого поискового запроса я нашел cx_freeze, который также может стоить взгляда.
Ответ 3
Я действительно сомневаюсь, что вы можете сделать что-то подобное.
Что вы можете сделать, так это просто настроить самостоятельно 3 встроенные виртуальные машины для Windows, один для MacOS и один для Linux, который имеет все, что вам нужно для запуска вашей программы.
Затем используйте комбинацию py2exe/py2app/pyinstaller для создания дистрибутива для каждой из платформ. У вас будет 3 разных pacakges, но каждый из них будет хорошо упакован и без необходимости устанавливать что-либо еще на клиентских машинах.