==================== Create the Project ==================== Project Naming -------------- Obviously the very first step is to come up with a name for your new app/project. As already mentioned, this tutorial uses **Poser** for the (placeholder) project name. But for the moment, let's pretend the name is **My Cool App** and walk through the 4 "variations" involved. When you generate code via cookiecutter (below) you will be asked for each of these "types" of names. Here are descriptions and examples which hopefully show the distinction: * **project name** - human-friendly display name for the project (``My Cool App``) * **distribution name** - PyPI-friendly name for the release (``My-Cool-App`` or ``my-cool-app`` or ``MyCoolApp``) * **package name** - Python-friendly name which code can import (``my_cool_app`` or ``mycoolapp``) * **repo name** - "slug" name used for source folder and URLs (``my-cool-app`` or ``mycoolapp``) Virtual Environment ------------------- Now that the name is settled, let's create a Python virtual environment: .. code-block:: sh python3 -m venv ~/poserenv From now on all commands will generally be ran within the root folder of the virtual environment, which should be activated: .. code-block:: sh cd ~/poserenv source bin/activate Cookie Cutter ------------- We'll be using `cookiecutter`_ to generate starting code for the new project, so install that: .. _cookiecutter: https://cookiecutter.readthedocs.io/ .. code-block:: sh pip install cookiecutter Generate Code ------------- Next we'll invoke the `wuttaweb template`_ for cookiecutter. .. _wuttaweb template: https://forgejo.wuttaproject.org/wutta/cookiecutter-wuttaweb You can specify the desired output path via the ``-o