'Using pip install to install Cartopy but missing Proj version at least 4.9.0
It seems that I cannot get pip to install Cartopy on my computer. I work straight from the windows command line (no Anaconda or other proxy programs).
When I try "pip install cartopy" I get the expected:
C:\Users\Justin\Documents\Python Programs>pip install cartopy
Collecting cartopy
Using cached https://files.pythonhosted.org/packages/e5/92/fe8838fa8158931906dfc4f16c5c1436b3dd2daf83592645b179581403ad/Cartopy-0.17.0.tar.gz
Installing build dependencies ... done
Complete output from command python setup.py egg_info:
C:\Users\Justin\AppData\Local\Temp\pip-install-cetb0vj7\cartopy\setup.py:171: UserWarning: Unable to determine GEOS version. Ensure you have 3.3.3 or later installed, or installation may fail.
'.'.join(str(v) for v in GEOS_MIN_VERSION), ))
Proj 4.9.0 must be installed.
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Justin\AppData\Local\Temp\pip-install-cetb0vj7\cartopy\
I know that "pip install proj" does not actually get the correct module version so I went to https://proj4.org/install.html to download and install the OSGeo4W which I thought would solve my problem but has appeared not to (for reference I do still have this on my computer though).
So then I tried install the cartopy .whl directly from this https://www.lfd.uci.edu/~gohlke/pythonlibs/#cartopy website and tried using "pip install Cartopy-0.17.0-cp37-cp37m-win32.whl" (I use the the 32 bit version of Python3.7 so I am fairly certain this is the correct file). But I then get the error:
C:\Users\Justin\Documents\Python Programs>pip install Cartopy-0.17.0-cp37-cp37m-win32.whl
Processing c:\users\justin\documents\python programs\cartopy-0.17.0-cp37-cp37m-win32.whl
Requirement already satisfied: numpy>=1.10 in c:\users\justin\appdata\local\programs\python\python37\lib\site-packages (from Cartopy==0.17.0) (1.15.1)
Requirement already satisfied: setuptools>=0.7.2 in c:\users\justin\appdata\local\programs\python\python37\lib\site-packages (from Cartopy==0.17.0) (40.6.2)
Requirement already satisfied: six>=1.3.0 in c:\users\justin\appdata\local\programs\python\python37\lib\site-packages (from Cartopy==0.17.0) (1.11.0)
Collecting pyshp>=1.1.4 (from Cartopy==0.17.0)
Downloading https://files.pythonhosted.org/packages/08/3e/3bda7dfdbee0d7a22d38443f5cc8d154ff6d4701e615f4c07bf1ed003563/pyshp-2.0.1.tar.gz (214kB)
100% |████████████████████████████████| 215kB 1.4MB/s
Collecting shapely>=1.5.6 (from Cartopy==0.17.0)
Using cached https://files.pythonhosted.org/packages/a2/fb/7a7af9ef7a35d16fa23b127abee272cfc483ca89029b73e92e93cdf36e6b/Shapely-1.6.4.post2.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\Justin\AppData\Local\Temp\pip-install-sb4uyliy\shapely\setup.py", line 80, in <module>
from shapely._buildcfg import geos_version_string, geos_version, \
File "C:\Users\Justin\AppData\Local\Temp\pip-install-sb4uyliy\shapely\shapely\_buildcfg.py", line 200, in <module>
lgeos = CDLL("geos_c.dll")
File "c:\users\justin\appdata\local\programs\python\python37\lib\ctypes\__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found
So then I tried to download something called a tar.gz file, but this is where I lose myself. I am not familiar with tar.gz and I saw there you have to "./configure" the file path, but I was not sure how to do this nor was I sure where I should store said file. Any guidance around this issue would be so incredibly appreciated thank you.
Solution 1:[1]
According to response to the corresponding Github issue, https://github.com/googlecolab/colabtools/issues/85#issuecomment-372532728, ubuntu users need to install some extra packages before installing Cartopy.
sudo apt-get install libproj-dev proj-data proj-bin
sudo apt-get install libgeos-dev
sudo pip install cython
sudo pip install cartopy
Solution 2:[2]
On a Mac I did this
brew install geos
brew install proj
Add this to top of /usr/local/include/proj_api.h
#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
pip install Cartopy
It works for Python3.6 but Fails for Python3.7.4
Solution 3:[3]
I strongly recommend installation using conda (not necessarily a full Anaconda install) as it will bring in all of the executable dependencies that cartopy requires. With conda installed, installing the latest version of cartopy would look like:
conda install --channel conda-forge cartopy
Unfortunately installation of binaries for Python is notoriously fiendish on Windows (partly because the toolchain changes with each Python version [at least, it used to until >= python 3.5], and partly because most of the developers of the scientific python ecosystem typically don't use or have access to Windows machines). Christoph Gohlke's incredible resource that you have already been using is the major exception to this statement.
I personally have spent several man-weeks getting cartopy installed on Windows (with significant help from folks including the Enthought team and Christoph Gohlke) - I poured all of this knowledge into the conda-forge packaging ecosystem so that others don't have to feel that pain if they choose to use conda.
If you really, really, really must install cartopy manually on your Windows machine, you might like to take a look at https://github.com/conda-forge/cartopy-feedstock/tree/master/recipe which contains all of the steps that were required to build cartopy in Windows. In addition to this, all of its dependencies are documented in similarly named repositories on the conda-forge organisation.
Finally, given your output and @cgohlke's suggestion - try installing his Shapely binary https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely.
Solution 4:[4]
For anyone else out there here is how I did it on Linux Mint 20.04 LTS using a python3 venv environment:
Activate the environment, then install the following:
sudo apt install python3-dev libproj-dev proj-data proj-bin libgeos-dev
pip3 install wheel numpy cartopy
That seemed to work fine for me.
Solution 5:[5]
I ran into multiple issues trying to install Cartopy inside a Docker container. This is the relevant part of the script I needed. Obviously needs some mods to run in a shell script.
FROM python:3.10
# Install support for Cartopy.
# See https://stackoverflow.com/questions/53697814/using-pip-install-to-
install-cartopy-but-missing-proj-version-at-least-4-9-0
RUN apt-get update
RUN apt-get install -y libproj-dev proj-data proj-bin libgeos-dev python3-dev cmake sqlite3
RUN apt-get upgrade -y
# Install Proj from source since it's needed by Cartopy and unavailable via apt
# See https://github.com/SciTools/cartopy/issues/1879 and https://proj.org/install.html#compilation-and-installation-from-source-code
WORKDIR /tmp
RUN curl -sSL https://download.osgeo.org/proj/proj-8.2.1.tar.gz | tar -xvz -C /tmp
WORKDIR /tmp/proj-8.2.1
RUN mkdir build
WORKDIR /tmp/proj-8.2.1/build
RUN cmake ..
RUN cmake --build .
RUN cmake --build . --target install
RUN projsync --system-directory --list-files
After all that, I was able to pip install Cartopy 0.20.0 along with other packages.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Pim Heijden |
| Solution 2 | jojo |
| Solution 3 | pelson |
| Solution 4 | themetman |
| Solution 5 |
