+Installable package projects should consider using a directory layout
+like the one shown below. All Python files are below a directory, and
+the package source files are nested in a subdirectory. This layout
+allows straightforward build-job triggers using the directory paths so
+Jenkins jobs are triggered appropriately. For example, a PyPI merge
+job should not be triggered by a non-Python change, because the job
+cannot upload the same package twice.
+
+.. code-block:: bash
+
+ git-repo-name/
+ │
+ ├── docs/
+ │ └── index.rst
+ │
+ ├── helloworld-package/
+ │ │
+ │ └── helloworld/
+ │ │ ├── __init__.py
+ │ │ ├── helloworld.py
+ │ │ └── helpers.py
+ │ │
+ │ ├── tests/
+ │ │ ├── helloworld_tests.py
+ │ │ └── helloworld_mocks.py
+ │ │
+ │ ├── requirements.txt
+ │ └── setup.py
+ │ └── tox.ini
+ │
+ ├── releases/
+ │ └── release-helloworld.yaml
+ │
+ ├── .gitignore
+ ├── LICENSE
+ └── README.md
+
+
+Use of these templates requires a .pypirc configuration file in the
+Jenkins builder home directory. An example appears next that uses API
+tokens. Note that in the [pypi] entry the repository key-value pair is
+optional, it defaults to pypi.org.
+
+.. code-block:: bash
+
+ [distutils] # this tells distutils what package indexes you can push to
+ index-servers = pypi-test pypi
+
+ [pypi-test]
+ repository: https://test.pypi.org/legacy/
+ username: __token__
+ password: pypi-test-api-token-goes-here
+
+ [pypi]
+ username: __token__
+ password: pypi-api-token-goes-here
+
+