Python Dependency Packaging

September 30, 2019
python distribution
Estimated Reading Time: 2 minute(s)


This repository is a demonstration on how Python developers can distribute their applications to non-technical individuals, and still have their dependencies packaged up in an easy to use way.

Pyinstaller

For those of you that don’t know of Pyinstaller

PyInstaller freezes (packages) Python applications into stand-alone executables, under Windows, GNU/Linux, Mac OS X, FreeBSD, Solaris and AIX.

License

This incredibly convenient project also is distributed under the gpl-2.0 license, which means you can use it in free and open source projects along with commercial projects.

Our Dependencies

For this sample project, the only dependency we installed was flask, which came with its own dependencies. If we were to send just our app.py file to our clients, they would not be able to run our program without installing our dependencies, described in our requirements.txt.

Installing As A Developer

Python developers have created the formality of always providing a requirements.txt with one’s project, to explain how one can get all the dependencies. If given a requirements.txt, one can activate a virtual environment by running

$ source venv/bin/activate

and then install the dependencies by using

$ pip3 install -r requirements

Which will instal the dependencies only in the activated environment, leaving your system environment pollution free.

Preparing For A Non-Technical Person

While the instructions above will work, those steps are often too difficult for a non-technical individual. I would never expect a client of mine to install their own dependencies, so we must have a simpler way. So we’ll install pyinstaller inside our activated virtualenv, by running

$ pip3 install pyinstaller

Now that we have pyinstaller, we’ll call it by running

$ pyinstaller --onefile app.py -n app.exe

This will generate a file called app.exe in our dist folder. Run that executable by running

$ ./app.exe

Note: This executable can now be called without having your venv activated

You can now distribute this app.exe to other users.

Please note that pyinstaller does not support cross building. So an exectuable made on an OSX machine will only work on another OSX machine

Moving Forward

One could use Pyinstaller in their CiCd pipeline, to build an executable upon merges to a git master branch or on a github release, allowing an easy way to shares executables with non-technical individuals.

Python, Pandas and SQL (Oh my!)

July 11, 2019
pandas python sql databases

Visualizing Geospatial Data

April 22, 2018
python tutorial visualization

Automate The Boring Stuff: Renaming Files

April 17, 2018
python tutorial
comments powered by Disqus