Создайте автономный EXE-файл Windows, который не требует pythonXX.dll - PullRequest
16 голосов
/ 02 апреля 2009

есть ли способ создать автономный .exe из скрипта Python. Исполняемые файлы, созданные с помощью py2exe, могут работать только с pythonXX.dll. Я хотел бы получить полностью автономный .exe, который не требует установки библиотеки времени выполнения Python. Это похоже на проблему с линковкой, но использование статической библиотеки вместо динамической, и было бы также полезно применить полоску для удаления неиспользуемых символов.

Есть идеи?

Спасибо.

Alessandro

Ответы [ 5 ]

17 голосов
/ 02 апреля 2009

Вы можете сделать это в последней версии py2exe ...
Просто добавьте что-то вроде приведенного ниже кода в ваш файл setup.py (ключевая часть - bundle_files: 1).

Чтобы включить ваш пакет TkInter в установку, используйте клавишу «include».

distutils.core.setup(
      windows=[
            {'script': 'yourmodule.py',
             'icon_resources': [(1, 'moduleicon.ico')]
            }
      ],
      zipfile=None,
      options={'py2exe':{
                         'includes': ['tkinter'],
                         'bundle_files': 1
                        }
      }
  )
5 голосов
/ 02 апреля 2009

Из-за того, как работает динамический компоновщик Windows, вы не можете использовать статическую библиотеку, если используете модули Python .pyd или .dll; DLL-библиотеки, загруженные в Windows, не разделяют автоматически свое пространство символов с исполняемым файлом и поэтому требуют отдельной DLL-библиотеки, содержащей символы Python.

4 голосов
/ 02 апреля 2009

Если ваша цель иметь один исполняемый файл - облегчить загрузку / отправку по электронной почте и т. Д., Я решил эту проблему, связав вывод py2exe с помощью Inno Setup . На самом деле это лучше, чем иметь один исполняемый файл, потому что вместо предоставления исполняемого файла, который можно поместить в какой-то каталог, приложение Windows с хорошим поведением обеспечит удаление, появится в апплете «Установка и удаление программ» и т. Д. Inno обрабатывает все это для тебя.

2 голосов
/ 02 апреля 2009

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

http://code.google.com/p/pylunch/downloads/detail?name=PyLunch-0.2.pdf

1 голос
/ 02 апреля 2009

Это не лучший способ сделать это, но вы можете рассмотреть возможность использования исполняемого SFX-архива с файлами .exe и .dll внутри и настройку его для выполнения файла .exe при двойном щелчке.

...