First Software Engineering question, so I hope I'm on topic.

I'm an academic scientist working on on Python GUI applications for educational (and eventually research) use. The GUI uses PyQt and pyqtgraph to plot the results of calculations derived from user inputs. I've put a prototype for the first app on GitHub. In addition to the code itself, I've frozen the apps (currently with PyInstaller) as standalone 1-file executables (Windows and OS X), and attached them to a GitHub release—I expect the majority of users just want an app that runs when they click on it.

However, for some users the code itself may be useful for learning how to solve a problem, or for use in their own project. So, a clean way to download the "important" parts of the package (functional code and docs, minus tests and other cruft) is also desirable.

What's not clear to me is what role setup.py and requirements.txt (if any) should play in this type of distribution. Searching online, reading docs at PyPI etc, most tutorials assume that the author is producing a library that would be pip-installed and incorporated into their python library (like numpy, pandas, PyQt etc). My projects are just apps that a user would execute at will, and not want burrowed into their computer's python libraries. It doesn't seem like something you'd actually upload to PyPI and make installable from there. So, it's unclear to me how such a distribution should be properly structured and implemented.

Should I still be using setup.py and requirements.txt, somehow, to produce an easy way to download a clean subset of the code and necessary requirements, separate from their system's Python installation? If so, any pointers on how to go about this? This aspect of deployment is still very mysterious to me.

I think links to GitHub are frowned upon because of their time impermanence, but I could offer a link to the project if it's helpful and on topic.

2 Answers 2


A typical user would create a virtualenv to run a particular program, or related set of programs, like yours. So yes, requirements.txt is definitely useful to get the dependencies installed quickly; setup.py is likely not.


Taking 9000's suggestion further: this blog post was very helpful in distinguishing between the two ways to list requirements, and the best ways to go about it:


Basically, if users aren't going to use a pip install, I should just use a requirements.txt that specifies which versions of the required packages will work.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.