Show how to structure a Python project.
Project description
Somepackage
Show how to structure a Python project.
Inspired by https://github.com/kennethreitz/samplemod.
Great resources
Recommendations
Please browse this blog post for a good summary of recommendatios and templates: https://medium.com/@jonas.r.kemper/understanding-best-practice-python-tooling-by-comparing-popular-project-templates-6eba49229106
Python 2 or 3?
Develop your code under Python 3, test it for both Python 2 and Python 3 but consider Python 3 to be the default today.
Split your code into packages, modules, and functions
All code should be inside some function (except perhaps if __name__ == '__main__':).
Split long functions into smaller functions.
If you need to scroll through a function over several screens, it is probably too long.
Functions should do one thing and one thing only.
Hide internals with underscores.
Organize related functions into modules.
If modules grow too large, split them.
Import from other modules under somepackage/ using from .somemodule import something.
Do file I/O on the “outside” of your code, not deep inside.
Classes vs. functions
Do not overuse classes.
Prefer immutable data structures.
Prefer pure functions.
Naming
Give the subdirectory the same name as your package.
Before you name your package, check that the name is not taken on https://pypi.org (you may want to upload your package to PyPI one day).
Interfaces
In somepackage/__init__.py define what should be visible to the outside.
Use https://semver.org.
Testing
Test all non-trivial code. I recommend to use https://pytest.org.
Use Travis CI: https://docs.travis-ci.com/user/languages/python/.
Dependency management
Package dependencies for developers should be listed in requirements.txt.
Alternatively, consider using http://pipenv.readthedocs.io.
Package dependencies for users of your code (who will probably install via pip) should be listed in setup.py.
Code style
Follow PEP8: https://www.python.org/dev/peps/pep-0008/
Use pycodestyle to automatically check for PEP8.
Type checking
Consider using type hints: https://docs.python.org/3/library/typing.html
Consider using http://mypy-lang.org.
Consider verifying type annotations at runtime: https://github.com/RussBaz/enforce
Documentation
I used to recommend reStructuredText for READMEs in contrast to Markdown but PyPI no longer requires reStructuredText. You can use Markdown as noted on https://pypi.org/help/ under “How can I upload a project description in a different format?”.
Example shown here: https://packaging.python.org/tutorials/packaging-projects/#creating-setup-py
Suggestions? Corrections? Pull requests?
Yes please!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file cchmtest-1.2.3.tar.gz
.
File metadata
- Download URL: cchmtest-1.2.3.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4a6bb73ad50d9ec7a02512659ee9c707106e8537f5df21af46cb9e0e484ecd0 |
|
MD5 | 7d0eaa32b30a2defc85d9248bdde0911 |
|
BLAKE2b-256 | 6a900a5660985bcc96d86e832a5a67e02b45db038074d724812a064889656dbe |