NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #758 most downloaded on PyPI
Python interface to PROJ (cartographic projections and coordinate transformations library)
Last release 29 days ago
05 Sep 2026
Ships fairly regularly
a new release about every 5 months
Most releases are documented
notes for 41 of 54 stable releases
Nothing withdrawn
no release was ever pulled
20 years old
70 releases · first in 2006
DEP: Minimum supported Python version 3.12 by @snowman2 in #1629
MANIFEST.in by @neutrinoceros in #1576Geod.npts method and some crs dict typings by @jack-volantautonomy in #1594Full Changelog: 3.7.2...3.8.0
One column per quarter.
Nothing published for this version
Bump pypa/cibuildwheel from 2.22 to 2.23 by @dependabot [bot] in #1479
Full Changelog: 3.7.1...3.7.2
Nothing published for this version
Nothing published for this version
WHL: Wheels contain PROJ 9.5.1 by @snowman2 in #1477
Full Changelog: 3.7.0...3.7.1
Nothing published for this version
ENH: Add is_deprecated and get_non_deprecated() to CRS by @jjimenezshaw in #1383
Dependencies:
Enhancements:
Bug fixes:
Maintenance:
Full Changelog: 3.6.1...3.7.0
Nothing published for this version
WHL: Update to PROJ 9.3 by @snowman2 in #1334
Full Changelog: 3.6.0...3.6.1
Nothing published for this version
WHL: Wheels contain PROJ 9.2.1 by @snowman2 in #1291
allow_superseded kwargs to TransformerGroup by @dmahr1 in #1269Full Changelog: 3.5.0...3.6.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
- WHL: Wheels contain PROJ version is 7.0.1
WHL: Wheels contain PROJ version is 7.0.1
BUG: Allow *_name to be added in CRS.to_cf (issue #585)
BUG: Fix building prime meridian in pyproj.crs.CRS.from_cf() (pull #588)
BUG: Fix check for numpy bool True kwarg (pull #590)
DOC: Update pyproj.Proj docstrings for clarity (issue #584)
Added pyproj.proj_version
BUG: Fix pyproj.Proj.get_factors() (issue #600)
BUG: fix unequal (!=) with non-CRS type (pull #596)
- ENH: Added pyproj.Proj.get_factors() (issue #503)
ENH: Added pyproj.Proj.get_factors() (issue #503)
ENH: Added type hints (issue #369)
BUG: Don’t use CRS classes for defaults in CRS child class init signatures (issue #554)
ENH: Updated pyproj.crs.CRS.axis_info to pull all relevant axis information from CRS (issue #557)
ENH: Added pyproj.transformer.Transform.eq() (issue #559)
ENH: Added pyproj.crs.CRS.utm_zone (issue #561)
BUG: Modify CRS dict test to accommodate numpy bool types. (issue #564)
BUG: Fix pipeline transformations to match cct (issue #565)
BUG: Don’t silently ignore kwargs when projparams are specified (Proj & CRS) (issue #565)
- Remove deprecated PyObject_AsWriteBuffer (issue #495)
WHL: Wheels contain PROJ version is 6.3.1
Remove deprecated PyObject_AsWriteBuffer (issue #495)
ENH: Added pyproj.crs.CRS.equals() with ignore_axis_order kwarg (issue #493)
ENH: Added pyproj.crs.CoordinateSystem.from_json() , pyproj.crs.CoordinateSystem.from_json_dict() , and pyproj.crs.CoordinateSystem.from_string() (pull #501)
ENH: Added pyproj.crs.CoordinateSystem to pyproj.crs namespace (pull #501)
ENH: Added pyproj.crs.CoordinateSystem.from_user_input() , pyproj.crs.CoordinateOperation.from_user_input() , pyproj.crs.Datum.from_user_input() , pyproj.crs.PrimeMeridian.from_user_input() , pyproj.crs.Ellipsoid.from_user_input() (pull #502)
ENH: Added pyproj.crs.CoordinateSystem.from_name() , pyproj.crs.CoordinateOperation.from_name() , pyproj.crs.Datum.from_name() , pyproj.crs.PrimeMeridian.from_name() , pyproj.crs.Ellipsoid.from_name() (pull #505)
BUG: Fix getting pyproj.crs.Ellipsoid.semi_minor_metre when not computed (issue #457)
ENH: Added support for custom CRS (issue #389)
ENH: Added enumeration for WKT2_2019 (issue #526)
ENH: Update from_cf/to_cf to use WKT instead of PROJ strings for internal management (issue #515)
Nothing published for this version
- Elevate +init= warning to FutureWarning (pull #486)
Elevate +init= warning to FutureWarning (pull #486)
Add UserWarning to pyproj.crs.CRS.to_proj4() (pull #486)
BUG: Fix for 32-bit i686 platforms (issue #481)
Return ‘inf’ in Proj instead of 1.e30 (pull #491)
- WHL: Wheels contain PROJ version is 6.2.1 (issue #456)
WHL: Wheels contain PROJ version is 6.2.1 (issue #456)
WHL: Wheels for Linux x86_64 use manylinux2010 (pyproj4/pyproj-wheels/pull/18)
BUG: Fix setting lat_ts for mercator projection in pyproj.crs.CRS.from_cf() and pyproj.crs.CRS.to_cf() (issue #461)
BUG: latlon -> longlat in CRS.from_cf() for o_proj so behavior consistent in PROJ 6.2.0 and 6.2.1 (pull #472)
ENH: Add repr for pyproj.crs.CoordinateOperation and for pyproj.transformer.TransformerGroup (pull #464)
- Minimum PROJ version is 6.2.0 (issue #411)
Minimum PROJ version is 6.2.0 (issue #411)
Removed global pyproj context (issue #418)
Added support for PROJ JSON in pyproj.crs objects and pyproj.Transformer (pull #432)
Moved doctests code out of pyproj.init (issue #417)
Added version information to python -m pyproj (pull #429)
Added scope & remarks to pyproj.crs objects and pyproj.Transformer (issue #441)
Added operations to pyproj.crs.CoordinateOperation objects and pyproj.Transformer (issue #441)
Added pyproj.get_authorities() and pyproj.get_codes() (issue #440)
Release gil in core cython/PROJ code (issue #386)
BUG: Added checks for uninitialized pyproj.crs objects to prevent core dumping (issue #433)
BUG: Added fix for get_transform_crs when checking type (pull #439)
DOC: Build docs with python3 (pull #428)
- Added cleanup for internal PROJ errors (issue #413)
Added cleanup for internal PROJ errors (issue #413)
Delay checking for pyproj data directory until importing pyproj (issue #415)
Address issue where PROJ core dumps on proj_create with +init= when global context does not have data directory set (issue #415 & issue #368)
- Removed deprecated functions Proj.proj_version , CRS.is_valid , and CRS.to_geodetic() (pull #371)
Minimum supported Python version 3.5 (issue #331)
Added support for calculating geodesic area ( pyproj.Geod.polygon_area_perimeter() ) and added interface to calculate total length of a line ( pyproj.Geod.line_length() & pyproj.Geod.line_lengths() ) (issue #210).
Added support for calculating geodesic area and line lengths with shapely geometries ( pyproj.Geod.geometry_area_perimeter() & pyproj.Geod.geometry_length() ) (pull #366)
Added pyproj.transformer.TransformerGroup to make all transformations available (issue #381)
Added option for area_of_interest for pyproj.transformer.Transformer.from_crs() , pyproj.transformer.Transformer.from_proj() and pyproj.transformer.TransformerGroup
Added pyproj.transformer.Transformer.area_of_use (issue #385)
Added pyproj.crs.CoordinateOperation.area_of_use (issue #385)
Updated to only have one PJ_CONTEXT per pyproj session (issue #374)
Always return latlon with Proj (issue #356)
Remove aenum dependency (issue #339)
Removed deprecated functions Proj.proj_version , CRS.is_valid , and CRS.to_geodetic() (pull #371)
Search on sys.prefix for the PROJ data directory (issue #387)
- Add deprecation warning when using +init= syntax (pull #358)
Update wheels to PROJ 6.1.1
Add deprecation warning when using +init= syntax (pull #358)
Added pyproj.crs.is_proj() (pull #359)
Fixed case in pyproj.crs.CRS.to_dict() with pyproj.crs.CRS.to_proj4() returning None (pull #359)
Keep no_defs in input PROJ string as it does not hurt/help anything in current code (pull #359)
Made public properties on C classes readonly (pull #359)
Update data dir exception handling to prevent ignoring errors (pull #361)
pyproj.crs.CRS.to_cf() export transverse mercator parameters for UTM zones (pull #362)
- Deprecate Proj.proj_version (pull #337)
Added pyproj.show_versions() (issue #334)
Added fix for whitepace around ‘=’ in PROJ strings (issue #345)
Update version check in setup.py (issue #323)
Add “stable” doc site pointing to latest release (issue #347, pull #348)
Deprecate Proj.proj_version (pull #337)
Test fixes (pull #333, pull #335)
- Undo deprecation of pyproj.transformer.Transformer.from_crs() (issue #275)
Minimum PROJ version is now 6.1.0
Updated CRS repr (issue #264)
Add Datum, CoordinateSystem, CoordinateOperation classes, (issue #262)
Added pyproj.crs.CRS.to_cf() and pyproj.crs.CRS.from_cf() for converting to/from Climate and Forecast (CF) 1.8 grid mappings (pull #244)
Added pyproj.crs.CRS.to_dict() (issue #226)
Added pyproj.crs.CRS.to_authority() (pull #294)
Added pyproj.crs.CRS.is_vertical and pyproj.crs.CRS.is_engineering (issue #316)
Added pyproj.crs.CRS.target_crs (pull #328)
Provide option to “pretty print” WKT in pyproj.crs.CRS.to_wkt (issue #258)
Add support for Bound and Compound CRS for pyproj.crs.CRS.is_geographic , pyproj.crs.CRS.is_projected (issue #274)
Add support for Bound CRS for pyproj.crs.CRS.is_geocentric (issue #374)
Add support for comparison with CRS a non-crs type supported by pyproj.crs.CRS.from_user_input() (issue #312)
Added support for ITRF, compound EPSG, and urn projection strings in CRS (pull #289)
Better handle Compound CRS (issue #265)
Disallow creation of non-CRS object (eg pipeline) in CRS class (issue #267)
Added check in pyproj.crs.CRS.to_epsg() for when proj_list is null (issue #257)
Fix comparing classes of non-instance types (issue #310)
Added always_xy option to Transformer so the transform method will always accept as input and return as output coordinates using the traditional GIS order, that is longitude, latitudecfor geographic CRS and easting, northing for most projected CRS (issue #225)
Provide direction option in pyproj.transformer.Transformer.transform() (issue #266)
Add check for valid initialization of Transformer and ensure it is a transformer (issue #321)
Added pyproj.transformer.Transformer.to_wkt() as well as attributes related to PJ_PROJ_INFO (pull #322)
Undo deprecation of pyproj.transformer.Transformer.from_crs() (issue #275)
Fix false positive errors raised in transformer (issue #249)
Fix pyproj.Proj initialization from DerivedGeographicCRS (issue #270)
Add interface to get the projection/ellps/prime_meridian/units lists (issue #251)
Docs/Build/Test fixes (pull #278, pull #245, pull #248, pull #247, issue #253, pull #252)
- Added support for time transformations (issue #208)
Added support for time transformations (issue #208)
Fixed projection equivalence testing for transformations (pull #231).
Switch to pytest for testing (pull #230)
Various testing fixes (pull #223, #222, #221, #220)
Convert PROJ error messages from bytes to strings (pull #219)
Fix data dir path separator to be (;) for windows and (:) for linux (pull #234)
- Updated to use the CRS definition for Proj instances in transforms (issue #207)
Updated to use the CRS definition for Proj instances in transforms (issue #207)
Add option to skip transformation operation if input and output projections are equivalent and always skip if the input and output projections are exact (issue #128)
Update setup.py method for checking PROJ version (pull #211)
Add internal proj error log messages to exceptions (pull #215)
- Restore behavior of 1.9.6 when illegal projection transformation requested (return inf instead of raising an exception, issue #202). kwarg errcheck
Restore behavior of 1.9.6 when illegal projection transformation requested (return inf instead of raising an exception, issue #202). kwarg errcheck added to pyproj.transformer.transform() and pyproj.transformer.itransform() (default False ). When errcheck=True an exception is raised.
- Added pyproj.transformer.Transformer to make repetitive transformations more efficient (issue #187)
Added pyproj.transformer.Transformer to make repetitive transformations more efficient (issue #187)
Added fix for using local datumgrids with transform (issue #191)
Added pyproj.transformer.Transformer.from_pipeline() to support pipeline transformations.
Added fix for conversion between radians/degrees for transformations (issues #192 & #195)
- add filter for boolean values in dict2string so “no_rot=True” works (issue #183).
add filter for boolean values in dict2string so “no_rot=True” works (issue #183).
make sure .pxd files included in source tarball.
add radians flag back in for transform/itransform (issue #185).
- Ensure data path set properly for TransProj (pull request #179, addressed issue #176).
Ensure data path set properly for TransProj (pull request #179, addressed issue #176).
- Update to PROJ version 6.0.0 & removed support for older PROJ versions.
Update to PROJ version 6.0.0 & removed support for older PROJ versions.
Added pyproj.CRS class.
Updated pyproj.Proj & pyproj.transform to accept any input from CRS.from_user_input.
Removed internal PROJ source code.
Changed default for preserve_units to be True in pyproj.Proj class initialization.
Modified logic for searching for the PROJ data directory to not conflict with older versions of PROJ.
Added pyproject.toml.
- fix segfault when inverse projection not defined (issue #43, pull request
fix segfault when inverse projection not defined (issue #43, pull request #44).
supports python 3.7
- fix for issue #42 (compilation error with microsoft visual studio).
fix for issue #42 (compilation error with microsoft visual studio).
- update proj4 source to latest github master (commit 953cc00fd87425395cabe37641cda905c4b587c1).
update proj4 source to latest github master (commit 953cc00fd87425395cabe37641cda905c4b587c1).
port of basemap fix for input arrays in fortran order
restore inverse Hammer patch that was lost when proj4 source code was updated.
- migrate to github from googlecode.
migrate to github from googlecode.
update proj4 source code from svn r2595 (version 4.9.0RC2).
include runtime_library_dirs in setup-proj.py.
added to_latlong method (issue 51).
fix back azimuth when lon1 and lon2 are identical.
- Geod now uses C code adapted from geographiclib now included in proj4 source, instead of pure python code directly from geographiclib.
Geod now uses C code adapted from geographiclib now included in proj4 source, instead of pure python code directly from geographiclib.
make radians=True work with Geod.npts (issue 47).
allow PROJ_DIR env var to control location of proj data (issue 40).
- updated proj4 src to 4.8.0 - includes two new map projections (natearth and isea).
updated proj4 src to 4.8.0 - includes two new map projections (natearth and isea).
- use pure python geographiclib for geodesic computation codes instead of proj4.
use pure python geographiclib for geodesic computation codes instead of proj4.
don’t use global variable pj_errno for return codes, use pj_ctx_get_errno instead.
use new projCtx structure for thread safety in proj lib.
update C source and data from proj4 svn (r2140).
add pj_list and pj_ellps module level variables (a dict mapping short names to longer descriptions, e.g. pyproj.pj_list[‘aea’] = ‘Albers Equal Area’).
Your coding agent can read these notes before it upgrades. Set up the MCP server →