Python - Struktur Folder Project Baru
project_name/
│
├── app/
│ ├── __init__.py
│ ├── main.py # Entry point (FastAPI app / Flask app)
│ │
│ ├── api/ # Routing & endpoint definitions
│ │ ├── __init__.py
│ │ ├── v1/ # API versioning (optional)
│ │ │ ├── __init__.py
│ │ │ ├── routes_users.py
│ │ │ ├── routes_auth.py
│ │ │ └── routes_items.py
│ │ └── deps.py # Dependencies (auth, DB session, etc.)
│ │
│ ├── core/ # Core configuration & settings
│ │ ├── __init__.py
│ │ ├── config.py # App settings, env vars
│ │ ├── security.py # JWT, password hashing, etc.
│ │ └── logging_config.py # Custom logging setup
│ │
│ ├── models/ # ORM models (SQLAlchemy, Pydantic, etc.)
│ │ ├── __init__.py
│ │ ├── user.py
│ │ └── item.py
│ │
│ ├── schemas/ # Request/response data schemas (Pydantic)
│ │ ├── __init__.py
│ │ ├── user_schema.py
│ │ └── item_schema.py
│ │
│ ├── services/ # Business logic layer
│ │ ├── __init__.py
│ │ ├── user_service.py
│ │ └── auth_service.py
│ │
│ ├── repositories/ # Data access layer
│ │ ├── __init__.py
│ │ ├── user_repository.py
│ │ └── item_repository.py
│ │
│ ├── db/ # Database initialization & session
│ │ ├── __init__.py
│ │ ├── base.py # Base metadata for models
│ │ ├── session.py # SQLAlchemy session setup
│ │ └── init_db.py
│ │
│ ├── utils/ # Utility/helper functions
│ │ ├── __init__.py
│ │ ├── email_helper.py
│ │ └── password_helper.py
│ │
│ ├── tasks/ # Background jobs / Celery tasks
│ │ ├── __init__.py
│ │ └── send_email.py
│ │
│ └── tests/ # Unit & integration tests
│ ├── __init__.py
│ ├── test_user.py
│ └── test_auth.py
│
├── .env # Environment variables
├── requirements.txt # Dependencies
├── pyproject.toml # Modern alternative to setup.py
├── alembic/ # (optional) DB migrations
│ ├── env.py
│ ├── versions/
│ └── README
│
├── scripts/ # Automation scripts (e.g., seed, deploy)
│ └── seed_data.py
│
├── Dockerfile
├── docker-compose.yml
└── README.md
Penjelasan Singkat:
| Folder | Fungsi |
|---|---|
| app/api/ | Menyimpan semua endpoint & route API. |
| app/core/ | Konfigurasi global (settings, security, logging). |
| app/models/ | Definisi model database (ORM). |
| app/schemas/ | Validasi input/output via Pydantic. |
| app/services/ | Logika bisnis utama aplikasi. |
| app/repositories/ | Abstraksi akses database. |
| app/db/ | Setup koneksi & session DB. |
| app/utils/ | Helper function umum. |
| app/tasks/ | Background job (misal pakai Celery). |
| app/tests/ | Testing (pytest/unit test). |
Tips Best Practice
- Pisahkan layers dengan jelas:
API → Service → Repository → DB
Ini membuat kode mudah di-maintain dan di-test. - Gunakan environment variable untuk konfigurasi rahasia (gunakan
python-dotenvataupydantic.BaseSettings). - Gunakan dependency injection (misal di FastAPI) agar service/repo mudah di-mock saat testing.
- Versioning API (
/api/v1,/api/v2) sejak awal proyek. - Gunakan
pyproject.toml+ruff(linter) +black(formatter) agar style konsisten.
Saat semuanya siap kita buat virtual environment. agar saat install package tidak mengganggu project python lain yang menggunakan package yang sama. berikut cara di Windows
Langkah 1
Masuk terminal dan masuk ke direktori root project.
python -m venv venvIni akan membuat folder bernama venv/ yang berisi Python terisolasi (interpreter, pip, dll).
Langkah 2
Aktivkan Virtual Environment
env\Scripts\activateJika berhasil, kamu akan melihat (venv) di depan prompt terminal:
(venv) C:\path\to\project>Langkah 4 (Install Package)
gunakan perintah pip intall <nama_pacakage>
pip install flaskjika install dengan spesifik versi maka tambahakan "==" seperti di bawah ini
pip install flask==3.1.2PENTING!!!
Setiap selesai install package selalui perbarui file requirements.txt file ini berfungsi sama seperti pacakge.json di nodejs. Sehingga jika nanti project di share bisa install package depedency sesuai dengan requirements.txt berikut perintahnya
pip freeze > requirements.txtSelanjutnya bagaimana cara share project python yang benar ? baca di Python - Share Folder Project