{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Project structure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python script\n", "Python is a great language for building small helper tools for various different kinds of tasks. Such small tools can be often expressed as a single file Python script.\n", "\n", "Here is an example structure for a Python script (aka executable Python module)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# the content of my_script.py\n", "\n", "# imports\n", "import logging\n", "\n", "# constants\n", "LOGGER = logging.getLogger()\n", "\n", "\n", "def magical_function():\n", " LOGGER.warning('We are about to do some magical stuff')\n", "\n", "\n", "def main():\n", " # The actual logic of the script\n", " magical_function()\n", "\n", "\n", "if __name__ == '__main__':\n", " main()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python package\n", "An example structure for a python project:\n", "\n", "```\n", "my_project/\n", " README.md\n", " requirements.txt\n", " setup.py\n", " \n", " src/\n", " my_project/\n", " __init__.py\n", " my_module.py\n", " other_module.py\n", " \n", " my_pkg1/\n", " __init__.py\n", " my_third_module.py\n", " \n", " tests/\n", " conftest.py\n", " test_module.py\n", " test_other_module.py\n", " \n", " my_pkg1/\n", " test_my_third_module.py\n", "\n", "```\n", "\n", "* [requirements.txt](https://pip.pypa.io/en/latest/user_guide/#requirements-files) lists the Python packages from which my_project depends on.\n", " * these can be installed by running `pip install -r requirements`\n", "* [setup.py](https://packaging.python.org/tutorials/distributing-packages/#setup-py) is a file in which you include relevant information about your project and the file is also used for packaging your project. Here's a minimal example of a setup.py:\n", "\n", "```python\n", "'''Minimal setup.py file'''\n", "\n", "from setuptools import setup, find_packages\n", "\n", "setup(\n", " name='my_project',\n", " version='0.1',\n", " packages=find_packages(where=\"src\"),\n", " package_dir={\"\": \"src\"})\n", "```\n", "* Once you have the setup.py file in place, you can install your project in editable mode by running `pip install -e .` in the root directory of your project. In editable mode the installed version is updated when you make changes to the source code files." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.4" } }, "nbformat": 4, "nbformat_minor": 2 }