Python apps

IMHO it can be any folder which path is specified via the source property, e.g.:

  • /home/user/Documents/my-project
  • somewhere/under/the/working/directory
1 Like

I managed to answer my own question on building a snap around a singular python file without setup.py, etc.

While not super elegant and by no means production-proof, it’s proven to work, and has allowed me to test stuff out in confinement in Ubuntu Core:

parts:
  my-python-script:
    plugin: nil
    source: .
    override-build: |
      python3 -m venv env
      source env/bin/activate
      pip3 install package1
      pip3 install package2
      cp -a env/. $CRAFT_PART_INSTALL/
# chmod your script here if not already given execute
      cp -r ./my-python-script.py $CRAFT_PART_INSTALL/my-python-script
    build-packages:
      - python3-venv

This places the entire virtual env into the root of the snap, so effectively everything it needs to run is there. I guess you could also replace the pip3 install lines with a single one reading a requirements.txt

I tried an alternative way that makes the required python3 packages stage-packages, however even if they’re loaded into the $SNAP/ dir, doing an LD_LIBRARY_PATH to $SNAP/usr/lib/python3/dist-packages does not seem to work.

Hope this helps someone out there, and I hope it’s not too horrific :smiley:

Execuse me , how do you write the apps part, the command meta ?

Hi There,

This is how the app part looks in my snapcraft.yaml

apps:
  my-python-script:
    command: my-python-script
    plugs: [ <REQUIRED PLUGS> ]

The cp -r just before build-packages in the parts step will put the script in the correct spot in the snap for it to be executed by name, just make sure it has executable flag (chmod +x) set.

Hope this helps!

1 Like