77 lines
1.3 KiB
Markdown
77 lines
1.3 KiB
Markdown
![]() |
---
|
||
|
tags: [python]
|
||
|
created: Tuesday, August 27, 2024
|
||
|
---
|
||
|
|
||
|
# Python application structure
|
||
|
|
||
|
## Directory layout
|
||
|
|
||
|
```
|
||
|
src/
|
||
|
cli.py OR app.py
|
||
|
constants.py
|
||
|
__init__.py
|
||
|
tests/
|
||
|
requirements.txt
|
||
|
setup.py
|
||
|
```
|
||
|
|
||
|
## `requirements.txt`
|
||
|
|
||
|
Dependencies used within the venv for the project, e.g:
|
||
|
|
||
|
```
|
||
|
google-auth==1.35.0
|
||
|
google-auth-httplib2==0.1.0
|
||
|
google-auth-oauthlib==0.4.6
|
||
|
google-api-python-client==2.26.1
|
||
|
gspread==3.7.0
|
||
|
requests==2.25.1
|
||
|
oauth2client==4.1.3
|
||
|
```
|
||
|
|
||
|
## `setup.py`
|
||
|
|
||
|
The declaration file for the application, equivalent to `package.json`, e.g:
|
||
|
|
||
|
```py
|
||
|
from setuptools import setup, find_packages
|
||
|
|
||
|
setup(
|
||
|
name="eolas-db",
|
||
|
version="0.1",
|
||
|
packages=find_packages(where="src"),
|
||
|
package_dir={"": "src"},
|
||
|
install_requires=[
|
||
|
# List your project dependencies here
|
||
|
],
|
||
|
entry_points={
|
||
|
"console_scripts": [
|
||
|
"eolas-db=cli:main",
|
||
|
],
|
||
|
},
|
||
|
)
|
||
|
```
|
||
|
|
||
|
The `entry_points` key is important. This is the first execution point of the
|
||
|
application. Typically you would name your entry-point script as `app.py` or
|
||
|
`cli.py` and then specify its `main` function.
|
||
|
|
||
|
E.g. in `cli.py`:
|
||
|
|
||
|
```py
|
||
|
def main():
|
||
|
print('run the application')
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|
||
|
|
||
|
```
|
||
|
|
||
|
## `__init__.py`
|
||
|
|
||
|
See
|
||
|
[[Python_modules_and_imports#distinguishing-_modules_-from-_packages_]]|Python
|
||
|
modules]]
|