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.