How to organize a Python Project? How to organize a Python Project? python python

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).


See python-package-template

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