When using pyproj, note the differences from various releases in how it is used to transform data. Here are a few examples using new/old capabilities based on the question:
Using pyproj >= 2.2.0
import pyproj print(pyproj.__version__) # 2.4.1 print(pyproj.proj_version_str) # 6.2.1 proj = pyproj.Transformer.from_crs(3857, 4326, always_xy=True) x1, y1 = (-11705274.6374, 4826473.6922) x2, y2 = proj.transform(x1, y1) print((x2, y2)) # (-105.15027111593008, 39.72785727727918)
Using pyproj <= 1.9.6
import pyproj print(pyproj.__version__) # 1.9.6 print(pyproj.proj_version_str) # 4.9.3 inProj = pyproj.Proj(init='epsg:3857') outProj = pyproj.Proj(init='epsg:4326') x1, y1 = (-11705274.6374, 4826473.6922) x2, y2 = pyproj.transform(inProj, outProj, x1, y1) print((x2, y2)) # (-105.15027111593008, 39.72785727727918)
There are a few considerations with the different versions of PROJ/pyproj:
transform for older versions always return the same axis order of "x, y" or "longitude, latitude", whereas PROJ 6+ is the order as defined by EPSG, unless an option like always_xy=True is specified Proj is limited to converting between geographic and projection coordinates within one datum, whereas the newer Transformer takes into account datum shifts, and is recommended for newer pyproj use