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