GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Build installer packages automatically · Issue #107 · PythonTurtle/PythonTurtle

Build installer packages automatically #107

New issue
Copy link
New issue
Copy link
Open
Open
Build installer packages automatically#107
Copy link
Labels
automationTechnical processes that should be automated away, including packaging and releasesTechnical processes that should be automated away, including packaging and releases

Description

@bittner
bittner
opened on Sep 23, 2018
Issue body actions

Following up on issues #105 (comment), #106 and #90, I'd like to start collecting information on how to (best) do packaging for all platforms PythonTurtle runs on. When we know how to perform packaging manually it will be an easy task to automate it all.

In other words, we need

  1. a list of target package types (e.g. MSI for Windows, macOS AppImage, Debian DEB, RPM, Snap), and
  2. a complete list of concrete, detailed steps (read: shell commands) of how each package type is built, from source code living in source control only.

NOTE: If writing this up in this issue proves uncomfortable we may want to use the project Wiki to help us move along.

Activity

Next
  1. bittner commented on Sep 23, 2018

    @bittner
    bittner
    on Sep 23, 2018
    MemberAuthor
    More actions

    We currently seem to use py2exe and py2app for Windows and macOS.

    According to a recent talk at PyCon Otto we should switch to PyInstaller, which allows building stand-alone executables for Windows, macOS and GNU/Linux alike.

  2. cool-RR commented on Sep 24, 2018

    @cool-RR
    cool-RR
    on Sep 24, 2018
    Member
    More actions

    I agree we should definitely use PyInstaller instead of py2exe and py2app.

    And I agree that we need a reliable and automatic build process.

  3. bittner commented on Sep 25, 2018

    @bittner
    bittner
    on Sep 25, 2018
    MemberAuthor
    More actions

    We should also not forget about building the PythonTurtle Python package and push it to PyPI when releasing.

    I'd also suggest to trigger releases by pushing a Git tag (with the version number) to the GitHub repository. The installers may then be downloadable via the release page. I hope that's all possible in a seamless way.

  4. cool-RR commented on Sep 25, 2018

    @cool-RR
    cool-RR
    on Sep 25, 2018
    Member
    More actions

    I agree, though that kind of automation is a bit of a high goal, if we even get to the point where we could do a release, I'd be ecstatic.

  5. bittner commented on Sep 25, 2018

    @bittner
    bittner
    on Sep 25, 2018
    MemberAuthor
    More actions

    if we even get to the point where we could do a release, I'd be ecstatic.

    Then prepare your space suit! 😄

  6. bittner commented on Sep 27, 2018

    @bittner
    bittner
    on Sep 27, 2018
    MemberAuthor
    More actions

    As suspected, PyInstaller will require to run on the infrastructure it should build the installer for (e.g. on Windows for a Windows installer, on a Mac for a macOS installer).

    I have neither a Windows and Mac. Hence, I need to do the cumbersome finding-out how building is done on AppVeyor. Also, we need a macOS with Python 3 installed (and cross your fingers that the documentation is only outdated and we can also build with Python 3).

    I'll probably best start with automating building a Python package (and upload it to PyPI automatically). IIUC, a setup.py is needed for building with (some features of) PyInstaller, anyway.
    We'll have one possible way of installing PythonTurtle already this way.

  7. bittner commented on Sep 28, 2018

    @bittner
    bittner
    on Sep 28, 2018
    MemberAuthor
    More actions

    Do you want to add me as a maintainer to the PyPI project? Would make it easier for me to automate things when I can use my own credentials. My username is "bittner", unsurprisingly.

  8. cool-RR commented on Sep 29, 2018

    @cool-RR
    cool-RR
    on Sep 29, 2018
    Member
    More actions

    I added you as a maintainer on PyPI.

    Regarding PyInstaller, I wonder whether a VM with ReactOS would work for generating a Windows installer.

    Reacted by Peter Bittner
  9. bittner commented on Sep 29, 2018

    @bittner
    bittner
    on Sep 29, 2018
    MemberAuthor
    More actions

    To make pip install PythonTurtle install the program and all needed dependencies proves to be difficult:

    • The Python package wxPython seems to install successfully on Windows and (maybe) macOS, according to the wxPython Wiki.
    • On Linux distributions it would be necessary to install distro-specific binary wheels -- this may be possible with setuptools-extras in a questionably usable way.

    Conclusions:

    • We could add install_requires=['wxPython'] to setup(), but this would fail unless the prerequisites (mentioned in the README) were already installed. We may be able to catch the - very technical error - and print a helpful hint in case the installation fails.
    • As an alternative, we may trust users to perform the installation steps in the README and let PythonTurtle print a friendly reminder when the wx module can't be imported (ModuleNotFoundError in the application module).

    Doing either in a user-friendly "auto-detect prerequisites" way using platform.release() and/or os.name would be possible but also quite cumbersome. I suggest, we simply print a text message and refer to the installation section of the README with a URL.

  10. bittner commented on Sep 29, 2018

    @bittner
    bittner
    on Sep 29, 2018
    MemberAuthor
    More actions

    I wonder whether a VM with ReactOS would work for generating a Windows installer.

    I'm not sure how we would use a VM on a service in the cloud that would build the PythonTurtle package in an automated fashion. Can you elaborate? (Do you intend for local use on a developer machine only?)

  11. cool-RR commented on Sep 30, 2018

    @cool-RR
    cool-RR
    on Sep 30, 2018
    Member
    More actions

    You're right, I didn't think this through.

    I guess there are 2 questions:

    1. Could ReactOS work for generating a Windows installer using PyInstaller?

    2. Could we set it up to work automatically, on the cloud?

    Let's say that the answer to the first question is yes, and there isn't a SaaS provider that gives that service. Then say we can set up a Docker image that runs VirtualBox with a ReactOS guest. Maybe we can find a SaaS provider that'll run that Docker image for us?

  12. bittner commented on Oct 2, 2018

    @bittner
    bittner
    on Oct 2, 2018
    MemberAuthor
    More actions

    pypa/packaging.python.org#267 contains quite a few interesting links to packaging Python applications.

  13. bittner commented on Oct 3, 2018

    @bittner
    bittner
    on Oct 3, 2018
    MemberAuthor
    More actions

    As soon as uploading the Linux bundle to GitHub is settled (via PR #123) we'll jump on the CI train for macOS, yeah! 😋

  14. bittner commented on Oct 4, 2018

    @bittner
    bittner
    on Oct 4, 2018
    MemberAuthor
    More actions

    The next great thing after getting EXE for Windows and bundles for macOS working could be building an AppImage for Linux. This is something similar to a .dmg file on a Mac. It would be a single solution for all GNU/Linux distros! 🎉 😃

    AppImage also has (somewhat) an AppStore, dubbed AppImageHub. And the comparison makes you understand that it's really a cool thing. 👍

    Reacted by probonopd
    Reacted by probonopd
  15. cool-RR commented on Oct 4, 2018

    @cool-RR
    cool-RR
    on Oct 4, 2018
    Member
    More actions

    Sounds good to me!

  16. 5 remaining items

  17. cool-RR commented on Mar 5, 2020

    @cool-RR
    cool-RR
    on Mar 5, 2020
    Member
    More actions

    Having another thought at this. You say "I have neither a Windows computer nor I plan to buy one". If your objection to do the items you listed is because you've done enough on this ticket, or that you prefer not to spend your time doing Windows-related things, then yes, that's a fair objection.

    If the issue is that you don't want to spend money on a Windows license, then maybe that's solvable. One idea would be to use ReactOS, and seeing whether that runs Visual Studio Project. If ReactOS isn't an option, then maybe I could get a Windows license/machine to you. Let me know if that's helpful.

  18. bittner commented on Mar 5, 2020

    @bittner
    bittner
    on Mar 5, 2020
    MemberAuthor
    More actions

    Let me know if that's helpful.

    Do you know a person that is enthusiastic about programming on Windows? Windows is a messy environment for Python. I don't want to contribute to a false image of "Python + Windows" fit well together, that's all.

    Reacted by אורי
  19. bittner commented on Aug 30, 2020

    @bittner
    bittner
    on Aug 30, 2020
    MemberAuthor
    More actions

    See #108 (comment) for alternative solutions to build an MSI installer (WiX, WiX.Py). We may be successful that way in combination with GitHub Actions. Does someone want to give that a shot?

  20. cool-RR commented on Aug 30, 2020

    @cool-RR
    cool-RR
    on Aug 30, 2020
    Member
    More actions

    Does someone want to give that a shot?

    I don't, so I guess we'll wait until a possible volunteer arrives.

  21. cclauss commented on Sep 21, 2020

    @cclauss
    cclauss
    on Sep 21, 2020
    Contributor
    More actions

    A task list...

    • Linux: pyinstaller build successful
      • Automated on GitHub Actions
    • macOS: pyinstaller build successful
      • Automated on GitHub Actions
    • Windows: pyinstaller build successful
      • Automated on GitHub Actions
  22. bittner commented on Sep 21, 2020

    @bittner
    bittner
    on Sep 21, 2020
    MemberAuthor
    More actions

    A few hints to help you make progress:

    • With python3 setup.py clean bundle you can build all binary bundles (PyInstaller is used).
    • The binaries build successful for all platforms (including .exe for Windows), for what I recall.
    • Windows users seem to expect a Windows installer; this could be a MSI or WiX.Py installer (both aren't yet prepared).
    • GitHub Actions should automatically push binaries to our GitHub Releases whenever we push a Git tag to master; we may want to use something like actions/create-release to make this less laborious for us.
  23. cclauss
    added 3 commits that reference this issue on Sep 22, 2020

    WIP: Create GitHub Action Build_apps.yml

    1be546e

    WIP: Create GitHub Action Build_apps.yml

    ff07bab

    Install wxPython and make the ELF executable

    67512e3
  24. bittner commented on Oct 14, 2020

    @bittner
    bittner
    on Oct 14, 2020
    MemberAuthor
    More actions

    We received a super-nice answer by @judej on the Microsoft Developer Community request for help that I had posted! 😂

    Bottom line: No MSI volunteer for us, but there are two more interesting projects, one that builds an installer and the other that builds a Python ZIP App:

    1. pynsist – a tool to build Windows installers for your Python applications. [...] bundle Python itself, so you can distribute your application to people who don’t have Python installed
    2. shiv – for building fully self-contained Python zipapps as outlined in PEP 441, but with all their dependencies included!

    That could be two nice alternatives worth evaluating. Thanks Jude! 💯 🎖️

  25. cool-RR commented on Oct 15, 2020

    @cool-RR
    cool-RR
    on Oct 15, 2020
    Member
    More actions

    Cool. I also recently heard about PyOxidizer. I'm still not 100% sure I understood the project (discussion) but it's possible it does what we want.

  26. cclauss commented on Oct 15, 2020

    @cclauss
    cclauss
    on Oct 15, 2020
    Contributor
    More actions

    I will take a shot at doing this with shiv over the weekend. Please try PyOxidizer and then we can compare notes.

  27. cool-RR commented on Oct 15, 2020

    @cool-RR
    cool-RR
    on Oct 15, 2020
    Member
    More actions

    Sorry, I started a new job a few days ago and I won't have time to do anything :(

    Reacted by Christian Clauss
  28. bittner commented on Oct 15, 2020

    @bittner
    bittner
    on Oct 15, 2020
    MemberAuthor
    More actions

    PyOxidizer sounds like an experiment to me: A Python application running on "a Rust VM", an OS-native layer created using Rust. I'm not sure what benefit this provides. Doesn't the PyInstaller setup we run do it all fine? 🥉

    shiv is a totally new approach (new in our "portfolio" of release artifacts), which might be interesting to provide to our audience. I find the idea thrilling (even though I'd be ready to bet few people might use it). 🥈

    pynsist sounds like the Microsoft Windows installer we're looking for. This might provide the user experience Windows folks seem to expect: 1️⃣ Download installer, 2️⃣ run it to install and add a start menu entry, 3️⃣ start application from start menu. 🥇

  29. cclauss commented on Oct 15, 2020

    @cclauss
    cclauss
    on Oct 15, 2020
    Contributor
    More actions

    Downside of pynsist is Windows only. I will try to advance Shiv (from LinkedIn) on Mac and Linux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    automationTechnical processes that should be automated away, including packaging and releasesTechnical processes that should be automated away, including packaging and releases

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.