Treat Vercel deployment as a configuration contract: declare dependency/version/runtime settings explicitly and align your code layout with Vercel’s discovery (or override it explicitly).
Apply this standard:
1) Pick the correct dependency manifest/lock strategy
pyproject.toml as the primary manifest.uv.lock / pylock.toml for pyproject.toml projects). Don’t mix Pipfile lockfiles as “the” lock for pyproject.toml projects.2) Declare supported Python versions
.python-version (e.g., 3.13).project.requires-python with a bounded range (e.g., >=3.12,<3.15).3) Ensure entrypoint discovery always works
app.py, main.py, asgi.py in the root or src/, app/, api/).app, application, or handler.[tool.vercel].entrypoint.4) Match framework “shape” to dependencies
uvicorn); Flask (WSGI) should not rely on ASGI server wiring.5) Don’t make discovery depend on missing local env/config
Example pyproject.toml wiring:
[project]
requires-python = ">=3.12,<3.15"
[tool.vercel]
entrypoint = "api/main.py"
If Vercel reports entrypoint/callable not found, fix it by updating (a) the entrypoint path override, (b) conventional filename/path placement, and (c) top-level callable exports—then ensure any required env/settings are configured in Vercel.