How to organize a Python Project?
A Package is basically a folder with __init__.py
file under it and usually some Modules, where Module is a *.py
file.It has to do with import
mainly. If you add __init__.py
to Indicators you can use:
from Indicators.Stochastics import *
or
from Indicators import Stochastics
By the way, I would recommend to keep module/package names lowercase. It does not affect functionality but it's more "pythonic".
From a file system perspective, a module is a file ending with .py
and a package is a folder containing modules and (nested) packages again. Python recognizes a folder as a package if it contains a __init__.py
file.
A file structure like that
some/ __init__.py foofoo.py thing/ __init__.py barbar.py
defines the package some
, which has a module foofoo
and a nested package thing
, which again has a module barbar
. However, when using packages and modules, you don't really distinguish these two types:
import somesome.dothis() # dothis is defined in 'some/__init__.py'import some.foofoo # <- moduleimport some.thing # <- package
Please follow PEP8 when selecting naming your packages/modules (i.e. use lower-case names).
Directory structure
. |-- bin | `-- my_program |-- docs | `-- doc.txt |-- my_program | |-- data | | `-- some_data.html | |-- __init__.py | |-- submodule | | `-- __init__.py | |-- helpers.py |-- tests | |-- __init__.py | |-- test_helpers.py |-- Makefile |-- CHANGES.txt |-- LICENSE.txt |-- README.md |-- requirements-dev.txt |-- requirements.txt `-- setup.py
cat Makefile
PYTHON=`which python` NAME=`python setup.py --name` all: check test source deb init: pip install -r requirements.txt --use-mirrors dist: source deb source: $(PYTHON) setup.py sdist deb: $(PYTHON) setup.py --command-packages=stdeb.command bdist_deb rpm: $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall test: unit2 discover -s tests -t . python -mpytest weasyprint check: find . -name \*.py | grep -v "^test_" | xargs pylint --errors-only --reports=n # pep8 # pyntch # pyflakes # pychecker # pymetrics clean: $(PYTHON) setup.py clean rm -rf build/ MANIFEST dist build my_program.egg-info deb_dist find . -name '*.pyc' -delete