Pythonturtle: Автоматическая сборка установочных пакетов

Созданный на 23 сент. 2018  ·  31Комментарии  ·  Источник: PythonTurtle/PythonTurtle

Следя за проблемами https://github.com/cool-RR/PythonTurtle/pull/105#issuecomment -421965482, # 106 и # 90, я хотел бы начать сбор информации о том, как (лучше всего) делать упаковку для всех. платформы, на которых работает PythonTurtle. Когда мы узнаем, как производить упаковку вручную, автоматизировать все это станет простой задачей.

Другими словами, нам нужно

  1. список типов целевых пакетов (например, MSI для Windows, macOS AppImage, Debian DEB, RPM, Snap) и
  2. полный список конкретных, подробных шагов ( читайте: команды оболочки) того, как создается каждый тип пакета, из исходного кода, живущего только в системе управления версиями.

ПРИМЕЧАНИЕ. Если писать об этом в этом выпуске неудобно, мы можем использовать проект Wiki, чтобы помочь нам двигаться дальше.

automation

Самый полезный комментарий

Следующей замечательной вещью после получения EXE для Windows и пакетов для работы macOS может быть создание AppImage для Linux. Это что-то похожее на файл .dmg на Mac. Это было бы единое решение для всех дистрибутивов GNU / Linux! : тада:: смайлик:

AppImage также (отчасти) имеет AppStore, получивший название AppImageHub . И сравнение дает понять, что это действительно круто. : +1:

Все 31 Комментарий

В настоящее время мы используем py2exe и py2app для Windows и macOS.

Согласно недавнему докладу на PyCon Otto, мы должны переключиться на PyInstaller , который позволяет создавать автономные исполняемые файлы для Windows, macOS и GNU / Linux.

Я согласен, что мы обязательно должны использовать PyInstaller вместо py2exe и py2app.

И я согласен с тем, что нам нужен надежный и автоматический процесс сборки.

Мы также не должны забывать о создании пакета передавать его в PyPI при выпуске.

Я также предлагаю запускать выпуски, вставляя тег Git (с номером версии) в репозиторий GitHub. После этого установщики можно будет загрузить со страницы выпуска . Я надеюсь, что все это возможно без проблем.

Я согласен, хотя такая автоматизация - своего рода высокая цель, если мы даже дойдем до того момента, когда мы сможем выпустить релиз, я буду в восторге.

если мы даже дойдем до того момента, когда сможем выпустить релиз, я буду в восторге.

Тогда приготовь свой скафандр! :улыбка:

Как и предполагалось, PyInstaller потребует запуска в инфраструктуре, для которой он должен создать установщик (например, в Windows для установщика Windows, на Mac для установщика macOS).

У меня нет ни винды, ни мака. Следовательно, мне нужно сделать громоздкое выяснение того, как выполняется сборка на AppVeyor. Кроме того, нам нужна macOS с установленным Python 3 (и скрестите пальцы, что документация устарела, и мы также можем построить с Python 3).

Мне, вероятно, лучше всего начать с автоматизации создания пакета Python (и автоматически загружать его в PyPI). IIUC, в любом случае требуется setup.py для сборки с (некоторыми функциями) PyInstaller.
У нас уже будет один из возможных способов установки PythonTurtle таким образом.

Вы хотите добавить меня в качестве сопровождающего к проекту PyPI ? Мне было бы легче автоматизировать вещи, если бы я мог использовать свои собственные учетные данные. Мое имя пользователя - bittner, что неудивительно.

Я добавил вас в качестве сопровождающего по PyPI.

Что касается PyInstaller, мне интересно, будет ли виртуальная машина с ReactOS работать для создания установщика Windows.

Заставить pip install PythonTurtle установить программу и все необходимые зависимости довольно сложно:

Выводы:

  • Мы _could_ добавить install_requires=['wxPython'] к setup() , но это не удастся, если предварительные условия ( упомянутые в README ) уже не были установлены. Возможно, мы сможем обнаружить - очень техническую ошибку - и напечатать полезную подсказку в случае сбоя установки.
  • В качестве альтернативы мы можем доверить пользователям выполнение шагов установки в README и позволить PythonTurtle распечатать дружественное _reminder_, когда модуль wx не может быть импортирован ( ModuleNotFoundError в модуле приложения ).

Выполнение либо удобным для пользователя способом «автоматического определения предварительных условий» с использованием platform.release() и / или os.name было бы возможно, но также довольно громоздко. Я предлагаю просто распечатать текстовое сообщение и обратиться к разделу установки README с URL-адресом.

Интересно, подойдет ли виртуальная машина с ReactOS для создания установщика Windows.

Я не уверен, как мы будем использовать виртуальную машину в облачной службе, которая будет автоматически создавать пакет PythonTurtle. Вы можете уточнить? (Вы собираетесь использовать только локально на машине разработчика?)

Вы правы, я этого не продумала.

Думаю, есть 2 вопроса:

  1. Может ли ReactOS работать для создания установщика Windows с помощью PyInstaller?

  2. Можно ли настроить его на автоматическую работу в облаке?

Предположим, что ответ на первый вопрос - да, и нет поставщика SaaS, который предоставляет эту услугу. Затем скажите, что мы можем настроить образ Docker, который запускает VirtualBox с гостевой системой ReactOS. Может быть, мы сможем найти поставщика SaaS, который будет запускать этот образ Docker для нас?

https://github.com/pypa/python-packaging-user-guide/issues/267 содержит довольно много интересных ссылок на упаковку приложений Python.

Как только загрузка пакета Linux на GitHub будет решена (через PR # 123), мы перейдем на поезд CI для macOS , да! : yum:

Следующей замечательной вещью после получения EXE для Windows и пакетов для работы macOS может быть создание AppImage для Linux. Это что-то похожее на файл .dmg на Mac. Это было бы единое решение для всех дистрибутивов GNU / Linux! : тада:: смайлик:

AppImage также (отчасти) имеет AppStore, получивший название AppImageHub . И сравнение дает понять, что это действительно круто. : +1:

Звучит неплохо!

На данный момент сборка пакета приложений в macOS (с использованием PyInstaller) работает не полностью. В качестве альтернативы, подумал я, мы можем создать формулу домашнего пивоварения. В настоящее время я просматриваю соответствующую документацию:

Хммм, похоже, ему нужен кто-то с Mac, чтобы эффективно разработать формулу. Хотя на самом деле это не кажется сложным. : мышление:

Вот формулы, относящиеся к Python (3):

  • Python (похоже, устанавливает 3.7; Python @ 3 - это символическая ссылка, так называемый «Псевдоним»)
  • wxPython (зависит от Python @ 2 , см. также https://github.com/Homebrew/homebrew-core/issues/32744)

Может быть достаточно зависеть от Python@3 (= 3.7) и установить wxPython через pip ( как в наших тестах ).

Для справки: если автоматические выпуски не работают (вероятно, в настоящее время они не работают, поскольку api_key: установлен только на примерное значение ), вот как проект VSCodium выполняет автоматические выпуски на GitHub. : +1:

Рам, вы упомянули «установщик Windows» как главный приоритет в настоящее время. Я согласен.

Отметим текущее состояние союза.

Установщик Windows (обзор выполнения)

  • Сборки Windows работают над AppVeyor с октября 2018 года.
  • Эти сборки создают двоичный файл Windows .EXE и установщик .MSI (см. Пример задания ).
  • Размер файла установщика .MSI настолько мал, что можно предположить, что он на самом деле пуст.
  • Я помню, вы опробовали .EXE (загрузив и запустив его) и подтвердили, что .MSI не будет работать. (Или это был кто-то другой, кто тестировал это для меня? Не уверен.)
  • Я помню, я упоминал в другом вопросе (или это был наш частный чат?), Что нужно для создания работающего установщика MSI (на самом деле это просто файл проекта MS Visual Studio или что-то в этом роде).

Думаю, я все подготовил. Теперь, когда у меня нет компьютера с Windows, и я не планирую его покупать (кстати, то же самое для macOS), единственное, чего не хватает, - это того, кто возьмет на себя управление и вставит недостающий кусочек пазла на место. По моему внутреннему ощущению, мы действительно очень близки к тому, чтобы «задача выполнена».

Следующие шаги (требуется волонтер)

Похоже, что все, что вам нужно сделать, это создать необходимую конфигурацию с расширением Microsoft Visual Studio Installer Projects , согласно ответу на StackOverflow .

Следовательно, можете ли вы взять на себя ответственность? Что необходимо сделать, IIUC:

  1. Создайте проект Visual Studio с установщиком
  2. Убедитесь, что установщик успешно работает на вашем локальном компьютере.
  3. Добавьте в этот проект файл .vdproj

Затем AppVeyor обнаружит этот файл, создаст установщик и предоставит его для загрузки на странице артефактов сборки.

использованная литература

По моему внутреннему ощущению, мы действительно очень близки к тому, чтобы «задача выполнена».

Не думаю, что если я начну над этим работать, это будет близко к завершению. Я даже не знаю, как использовать Visual Studio Project или каков наш текущий план. Если бы я взялся за эту задачу, я бы предположил, что это заняло бы несколько дней полной занятости.

Вы приложили много усилий для этого, поэтому я не чувствую себя хорошо, рассказывая вам об этом, но я определенно не буду добровольно работать над этой проблемой. PythonTurtle сейчас далеко не так важен в моей жизни, чтобы я потратил больше часа на его улучшение.

Я раздражаюсь, указывая на эту проблему из других выпусков, говоря, что без этой проблемы ничего не стоит? Я не буду мешать вам работать над любыми другими проблемами, я просто, вероятно, не присоединюсь, потому что эти усилия кажутся мне напрасными, но я не буду блокировать вас, и если я вам понадоблюсь для проверки кода или мелких вещей, Я буду счастлив сделать это.

Еще одна мысль по этому поводу. Вы говорите: «У меня нет компьютера с Windows и я не планирую его покупать». Если ваше возражение против выполнения перечисленных вами пунктов связано с тем, что вы сделали достаточно для этого билета или предпочитаете не тратить свое время на вещи, связанные с Windows, тогда да, это справедливое возражение.

Если проблема в том, что вы не хотите тратить деньги на лицензию Windows, возможно, это решаемо. Одна из идей - использовать ReactOS и посмотреть, работает ли он в Visual Studio Project. Если ReactOS не подходит, то, может быть, я смогу предоставить вам лицензию / машину для Windows. Сообщите мне, если это поможет.

Сообщите мне, если это поможет.

Вы знаете человека, который увлечен программированием в Windows? Windows - это запутанная среда для Python. Я не хочу вносить свой вклад в ложное представление о том, что «Python + Windows» хорошо сочетаются друг с другом, вот и все.

См. Https://github.com/PythonTurtle/PythonTurtle/issues/108#issuecomment -683420022 для получения альтернативных решений для создания установщика MSI (WiX, WiX.Py ). Мы можем добиться успеха в сочетании с GitHub Actions. Кто-нибудь хочет попробовать?

Кто-нибудь хочет попробовать?

Я не знаю, так что мы подождем, пока не прибудет возможный доброволец.

Список задач ...

  • [] __Linux__: сборка pyinstaller прошла успешно

    • [] Автоматизировано в действиях GitHub

  • [] __macOS__: сборка pyinstaller прошла успешно

    • [] Автоматизировано в действиях GitHub

  • [] __Windows__: сборка pyinstaller прошла успешно

    • [] Автоматизировано в действиях GitHub

Несколько советов, которые помогут вам добиться прогресса:

  • [x] С помощью python3 setup.py clean bundle вы можете собрать все бинарные пакеты (используется PyInstaller).
  • [x] Бинарные файлы собраны успешно для всех платформ (включая .exe для Windows), насколько я помню.
  • [] Пользователи Windows, похоже, ожидают установщика Windows ; это может быть установщик MSI или WiX.Py (оба еще не подготовлены).
  • [] GitHub действия должны автоматически нажать двоичные файлы для наших GitHub Релизы всякий раз , когда мы нажимаем тег Git на master ; мы можем захотеть использовать что-то вроде actions / create-release, чтобы сделать это менее трудоемким для нас.

Мы получили супер-хороший ответ от @judej на опубликованный запрос сообщества разработчиков

Итог: у нас нет добровольцев MSI, но есть еще два интересных проекта: один создает установщик, а другой - приложение Python ZIP :

  1. pynsist - _a инструмент для создания установщиков Windows для ваших приложений Python. [...] объедините сам Python, чтобы вы могли распространять свое приложение среди людей, у которых не установлен Python_
  2. shiv - _для создания полностью автономных zip-приложений Python, как описано в PEP 441, но со всеми их зависимостями! _

Это могут быть две хорошие альтернативы, которые стоит оценить. Спасибо, Джуд! : 100:: medal_m military:

Прохладный. Я также недавно слышал о PyOxidizer . Я все еще не уверен на 100%, что понял проект ( обсуждение ), но, возможно, он делает то, что мы хотим.

Я постараюсь сделать это с помощью shiv на выходных. Пожалуйста, попробуйте PyOxidizer и тогда мы сможем сравнить заметки.

Извините, я начал новую работу несколько дней назад и у меня не будет времени ничего делать :(

PyOxidizer для меня звучит как эксперимент: приложение Python, работающее на «виртуальной машине Rust», уровне ОС, созданном с помощью Rust. Я не уверен, какую пользу это дает. Разве запускаемая нами установка PyInstaller справляется со всем этим нормально? : 3rd_place_medal:

shiv - это совершенно новый подход (новый в нашем «портфеле» релизных артефактов), который может быть интересно предоставить нашей аудитории. Я нахожу эту идею захватывающей (хотя готов поспорить, что мало кто ей воспользуется). : 2nd_place_medal:

pynsist звучит как программа установки Microsoft Windows, которую мы ищем. Это может обеспечить тот опыт, который пользователи Windows ожидают:: one: Загрузить установщик,: two: запустить его, чтобы установить и добавить запись в меню «Пуск»,: 3: запустить приложение из меню «Пуск». : 1st_place_medal:

Обратной стороной пинсиста является только Windows. Я постараюсь продвигать Shiv (из LinkedIn) на Mac и Linux.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги