# What changed in geopy

> 38 changes in geopy 2 from its official release notes, upgrade guides and advisories: 25 breaking, 2 deprecations, 8 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/pypi/geopy/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## geopy 2

### Breaking changes

- Rejects inputs longer than 256 characters to prevent excessive CPU use when parsing malformed coordinate strings; long valid strings with irrelevant prefixes may also be rejected. (2.5.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.5.0), [security advisory](https://github.com/advisories/GHSA-MHVH-FQ92-PFMR)
- Drops support for Python 3.7 and adds support for Python 3.13, 3.14, and 3.15. (2.5.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.5.0)
- Build metadata moves from `setup.py` to `setup.cfg`, and `download_url` is removed from the metadata. (2.5.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.5.0)
- All bounding box arguments must now be a list of two Points; formats such as plain strings and lists of four coordinates are no longer valid. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- The default is now True for all geocoders and methods. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Removes the format_string parameter from all geocoders. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Service-specific request parameters are no longer passed to geocoder __init__ methods; pass them to geocode or reverse instead. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Most service-specific geocoder arguments must now be passed as keyword arguments; positional arguments are no longer accepted. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Distance algorithms now raise ValueError for points with different altitudes because altitude is ignored in calculations. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Replaces the removed geopy.distance.vincenty. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Removes vincenty; use geopy.distance.geodesic instead. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- The authentication key argument no longer has a default value of None. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Location no longer accepts None for point and raw arguments. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Nominatim now raises ConfigurationError when used with a default or sample user-agent. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- The authentication key argument no longer has a default value of None. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Constructing a Point from a single number now raises ValueError; pass zero longitude explicitly to avoid the error. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Timezone no longer accepts None for point and raw arguments. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- The authentication key argument no longer has a default value of None. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- at_time no longer accepts numeric values; pass datetime instances instead. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Removes GoogleV3.timezone; use GoogleV3.reverse_timezone instead. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Geocoder parse_* methods have been prefixed with an underscore to mark them as private. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Drops support for Python 2.7 and 3.4. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Service-specific request parameters are no longer passed to geocoder __init__ methods; pass them to geocode or reverse instead. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- A reverse query that cannot be parsed as a Point now raises ValueError instead of being bypassed. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Passing None now disables the request timeout; previously a default timeout was used. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)

### Deprecations

- Nominatim has moved from geopy.geocoders.osm to geopy.geocoders.nominatim; the old module remains for backwards compatibility but is slated for removal in geopy 3. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- The old Nominatim module remains for backwards compatibility but will be removed in geopy 3. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)

### New APIs and options

- Adds optional asyncio support in all geocoders via AioHTTPAdapter. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Adds an installation extra for using geopy.adapters.AioHTTPAdapter. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Adds an installation extra for using geopy.adapters.RequestsAdapter. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Introduces adapters as a mechanism for using HTTP client implementations other than urllib. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Adds an adapter using aiohttp, enabling optional asyncio support in geocoders. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Adds an adapter using requests; it is the default when the requests package is installed and supports keepalives. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Adds an adapter using urllib, which is the default when the requests package is not installed. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)
- Adds an async counterpart to RateLimiter. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)

### Behavior and default changes

- RateLimiter is now thread-safe. (2.0.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.0.0)

### Fixes and other changes

- Fixes `GeocoderQueryError` being raised for empty results. (2.5.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.5.0)
- Fixes `utcnow` deprecation warnings. (2.5.0) — [release notes](https://github.com/geopy/geopy/releases/tag/2.5.0)
