Створіть один виконуваний файл із проекту Python


87

Я хочу створити єдиний виконуваний файл з мого проекту Python. Користувач повинен мати можливість завантажувати та запускати його без необхідності встановлення Python. Якби я просто розповсюджував пакет, я міг би використовувати pip, wheel та PyPI для його побудови та розповсюдження, але для цього потрібно, щоб користувач мав Python і знав, як встановлювати пакети. Що я можу використовувати для створення самостійного виконуваного файлу з проекту Python?


Я все ще пишу в 2.x (точніше 2.7.2), але міг би побачити необхідність переходу на 3.x (якщо модулі та подібні сумісні) і тоді також знадобиться рішення.
ShadowFlame

Зверніть увагу, що упаковка значно ускладнить діагностику проблем. Ви не тільки (або pdb) не маєте легкого доступу до виконуваних файлів py2exe(невідомо про інші) не включаєте .pyфайли, тому ви не побачите вихідних рядків у слідах стека.
ivan_pozdeev

Просто як цікавинку, я почав використовувати pyinstaller
ShadowFlame

Відповіді:


115

Ось кілька загальних. Якщо прямо не зазначено, усі перелічені нижче проекти активно підтримуються станом на моє останнє редагування (січень 2020 р.).

Я також включив посилання на відповідні веб-сайти, репозиторії та списки PyPi на випадок, якщо ви хочете самі перевірити, як часто вони оновлювались.

Крім того, якщо не зазначено інше, усі перелічені нижче програми створюватимуть exe спеціально для операційної системи, в якій він працює. Так, наприклад, запуск Pyinstaller в Windows створить Windows exe, але запуск Pyinstaller в Linux створить Linux exe. Якщо ви хочете створити exe для декількох операційних систем, вам доведеться вивчити використання віртуальних машин або використовувати щось на зразок Wine .


Усі наступні програми працюють однаково - вони об’єднують Python і вашу програму, ефективно поєднуючи їх для створення виконуваного файлу.

  • PyInstaller:

    • Посилання : Веб-сайт || Репо || PyPi
    • Підтримує : Python 2.7 та Python 3.4 - 3.7 на Windows, Mac та Linux.
  • cx_Freeze:

  • py2app:

    • Посилання: Веб-сайт || Репо || PyPi
    • Підтримує: Python 2.7 та 3.3 (?) - 3.7 (?) Лише на Mac.
    • Примітка: Станом на останню редакцію, я не зміг остаточно визначити точний діапазон версій Python, що підтримуються pyapp. В останньому випуску згадується про підтримку Python 3.7.

Примітка: попередні версії цього допису включали записи для py2exe ( репо ) та bbfreeze ( репо ). Обидва проекти вилучено із цього списку: протягом кількох років вони бачили майже ні до чого, і, здається, абсолютно не підтримуються. Див. Історію редагування старих записів.


Звичайно, це не єдиний спосіб робити щось:

  • пінсист:

    • Посилання: Веб-сайт || Репо || PyPi
    • Підтримує: Усі версії Python? Примітка - створить лише інсталятори Windows .
    • Інші примітки: схоже, Pynsist підтримує об’єднання будь-якої довільної версії Python із вашим додатком. Однак сам інструмент вимагає запуску Python 3.5+.

      Pynsist створить програму встановлення Windows для вашої програми, яка буде безпосередньо встановлювати Python на комп'ютер користувача, а не поєднувати його з вашим кодом та створювати ярлики, що посилаються на ваш сценарій Python. Хоча ця програма виробляє лише інсталятори Windows, схоже, ви все ще можете запустити Pynsist на комп'ютерах Mac і Linux.

  • Нуїтка:

    • Посилання: Веб-сайт || Repo (дзеркало Github) || PyPi
    • Підтримує: Python 2.6 - 2.7 та Python 3.3 - 3.7 на Windows, Mac та Linux.
    • Інші примітки: Nuitka буквально скомпілює ваш код Python і створить exe (на відміну від інших проектів, які просто включають Python), щоб спробувати пришвидшити ваш код. Як побічний ефект, ви також отримаєте зручний exe, який можете розповсюджувати. Зверніть увагу, що у вашій системі повинен бути доступний компілятор C ++ .
  • cython:

    • Посилання: Веб-сайт || Репо || PyPi
    • Підтримує: Python 2.6 - 2.7 та Python 3.2 - 3.8 на Windows, Mac та Linux.
    • Інші примітки: Cython схожий на Nuitka тим, що він є компілятором Python. Однак замість того, щоб безпосередньо компілювати ваш код, він скомпілює його в C. Потім ви можете взяти цей код C і перетворити свій код на exe . Вам потрібно мати у вашій системі доступний компілятор C.

Мої особисті переваги полягають у використанні PyInstaller, оскільки мені було найпростіше запустити і запустити, він був розроблений для приємної роботи з різними популярними бібліотеками, такими як numpy або pygame, і має чудову сумісність з різними ОС та версіями Python.

Однак я також без особливих труднощів успішно створив різні exe, використовуючи cx_Freeze, тому вам слід також спробувати спробувати цю програму.

Я ще не мав можливості спробувати pynist, Nuitka або Cython, але вони здаються досить цікавими та інноваційними рішеннями. Якщо у вас виникають проблеми з використанням першої групи програм, можливо, варто спробувати одну з цих трьох. Оскільки вони працюють принципово інакше, ніж програми в стилі Pyinstaller / cx_freeze, вони можуть домогтися успіху в тих непарних випадках, коли перша група зазнає невдачі.

Зокрема, я думаю, що pynist - це хороший спосіб обійти всю проблему розповсюдження вашого коду взагалі: Mac і Linux вже мають вбудовану підтримку Python, і просто встановлення Python в Windows може бути справді найчистішим рішенням. (Недоліком є ​​те, що вам потрібно турбуватися про націлювання на декілька версій Python + встановлення бібліотек).

Nuitka та Cython (на мій обмежений досвід), здається, працюють досить добре. Знову ж таки, я сам їх широко не тестував, і тому моє головне зауваження полягає в тому, що, здається, їм потрібно набагато більше часу, щоб створити exe, ніж у програмах стилю "заморожування".


З огляду на це, перетворення вашої програми Python на виконуваний файл не обов’язково є єдиним способом розповсюдження вашого коду. Щоб дізнатись більше про доступні інші варіанти, перегляньте такі посилання:


1
Зверніть увагу , що вам також необхідно включити в вашому скріпляйте Microsoft C ++ Redistributables (він же msvcrxx.dll, де xxце номер версії) , щоб зробити .exe запустити (чи попросити користувачів встановити його самі по собі). Це необхідно, оскільки Python побудований на Windows за допомогою Visual Studio.
непосидючий

Отже, схоже, жоден із IDE python (pycharm або pydev - плагін eclipse) ще не включив функціонал компіляції до одного виконуваного файлу в саму IDE. Це правильно? :-)
Nelda.techspiress

Якщо ви дбаєте про безпеку свого вихідного коду, можливо, найкращим вибором є Cython, оскільки він компілює код C. Ті програми, які використовують техніку заморожування , можуть бути легко декомпільовані.
Мартін Де ла Фуенте

PyInstaller вказаний вище як підтримуючий Python 3.7. Це не відповідає моєму досвіду і згідно з описом на pyinstaller.org, де сказано: "PyInstaller працює з Python 2.7 і 3.3—3.6".
Том

1
@Tom - Провівши трохи більше копання, схоже, хоча сам pyinstaller підтримує Python 3.7, вони офіційно не випустили нову версію з підтримкою 3.7. (Наприклад, у їхньому репозиторії github зазначено, що вони підтримують Python 3.7 +, схоже, у них не залишилося відкритих питань, пов'язаних з 3.7, але остання версія pyinstaller на PyPi від грудня 2017 року). Отже, якщо вам потрібна підтримка 3.7, ви можете спробувати створити + встановити pyinstaller безпосередньо з джерела або дочекатися наступного випуску. (Або скористайтеся іншою програмою, звичайно)
Michael0x2a

10

pyinstaller все ще знаходиться в активній розробці. Ви можете побачити останні зміни на GitHub.

Він підтримує всі три основні платформи:

  • Windows (32-розрядна та 64-розрядна)
  • Linux (32-розрядна та 64-розрядна)
  • Mac OS X (32-розрядна та 64-розрядна)

і він підтримує версії Python 2.6 та 2.7. Він не підтримує Python 3, але існує експериментальна гілка Python 3 .

Оновлення

Станом на версію 3.2.1 він підтримує Python 2.7, 3.3-3.5


2

Краще використання, pip install auto-py-to-exeяке забезпечує чудовий інтерфейс із усіма параметрами, необхідними для створення виконуваного файлу.

Після встановлення просто введіть auto-py-to-exeу термінал або командний рядок.

Авто-py-to-exe


дякую, що ви все ще відповідаєте на тему, стару, як ця. Виглядає дивовижною знахідкою і справді спрощує роботу під час налаштування, а також надає фактично використовувану команду: D
ShadowFlame
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.