Установка pyproj в Anaconda python (Ubuntu)

#python-2.7 #anaconda #pyproj

#python-2.7 #anaconda #pyproj

Вопрос:

Я пытаюсь установить pyproj на удаленный сервер, на котором работает anaconda python 2.7.15 в Ubuntu 16.04. После запуска conda install -c conda-forge pyproj (первый указанный вариант в https://anaconda.org/conda-forge/pyproj ), пакет успешно устанавливается (pyproj 2.0.2). Однако после запуска моей программы я получаю следующую обратную трассировку:

 Traceback (most recent call last):
  File "run_qc_worker.py", line 1288, in <module>
    GC.make_metadata_caches() # For percentiles check
  File "/home/ubuntu/qc-mem/qc/lib/global_class.py", line 384, in make_metadata_caches
    mercator_arr = self.proj_arr(lat_lon_arr) # project to x/y
  File "/home/ubuntu/qc-mem/qc/lib/global_class.py", line 421, in proj_arr
    inproj = Proj(init='epsg:4326') # WGS 84
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/pyproj/__init__.py", line 322, in __init__
    self.crs = CRS.from_user_input(projparams if projparams is not None else kwargs)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/pyproj/crs.py", line 224, in from_user_input
    return cls(**value)
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/pyproj/crs.py", line 146, in __init__
    super(CRS, self).__init__(projstring)
  File "pyproj/_crs.pyx", line 307, in pyproj._crs._CRS.__init__
  File "/home/ubuntu/anaconda2/lib/python2.7/site-packages/pyproj/datadir.py", line 62, in get_data_dir
    "Valid PROJ.4 data directory not found."
pyproj.exceptions.DataDirError: Valid PROJ.4 data directory not found.Either set the path using the environmental variable PROJ_LIB or with `pyproj.datadir.set_data_dir`.
  

В моем скрипте на python я импортирую с помощью from pyproj import Proj, transform , и соответствующие строки кода являются:

 inproj = Proj(init='epsg:4326') # WGS 84
outproj = Proj(init='epsg:3857') # WGS 84 / Pseudo-Mercator
  

По-видимому, pyproj не может найти data каталог. Поиск по каталогу в
~/anaconda2/lib/python2.7/site-packages/pyproj Я подтвердил, что нет data каталога. У меня есть другой сервер с установкой pyproj на anaconda3, который действительно содержит data каталог (с epsg файлом). Я скопировал этот каталог на сервер anaconda2 и объявил путь, используя переменную среды, как указано в обратной трассировке:

 export PROJ_LIB=~/anaconda2/lib/python2.7/site-packages/pyproj/data
  

Я все еще получаю ту же обратную трассировку ошибки.

Я не могу найти data каталог в репозитории github для pyproj (https://github.com/pyproj4/pyproj /).

Как я могу устранить эту ошибку?

Ответ №1:

Я смог решить эту проблему, установив предыдущую версию pyproj . Я заменил pyproj-2.0.2 установку на pyproj-1.9.6 , запустив conda install -c conda-forge/label/gcc7 pyproj . ( proj4 также был понижен с 6.0.0 до 5.2.0 в рамках этой установки). Это второй доступный вариант установки conda, указанный наhttps://anaconda.org/conda-forge/pyproj.

Как описано выше, я также вручную скопировал ( scp ) существующий data каталог из установки anaconda3 на другом сервере, а затем экспортировал PROJ_LIB переменную среды с путем к data каталогу.

Обратите внимание, что при запуске pyproj-1.9.6 перед экспортом пути к data вместо этого отображается ошибка трассировки RuntimeError: 'no arguments in initialization list' . Эта проблема хорошо описана другими пользователями здесь:https://github.com/pyproj4/pyproj/issues/134.

Комментарии:

1. Похоже, что вручную копировать data каталог не требуется. Простая установка версии pyproj 1.9.6 будет работать.

Ответ №2:

Текущая версия pyproj 2.2.0 работает для меня:

 (base) $ conda create -c conda-forge -n proj27 python=2.7 pyproj
...
  proj4              conda-forge/linux-64::proj4-6.1.0-he751ad9_2
  pyproj             conda-forge/linux-64::pyproj-2.2.0-py27hc44880f_0
...
(base) snowal@snowal-lx2:~$ conda activate proj27
(proj27) snowal@snowal-lx2:~$ python
Python 2.7.15 | packaged by conda-forge | (default, Feb 28 2019, 04:00:11) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
  
 >>> from pyproj import Proj, transform
>>> inproj = Proj(init='epsg:4326') # WGS 84
>>> outproj = Proj(init='epsg:3857') # WGS 84 / Pseudo-Mercator
>>> import pyproj
>>> pyproj.__version__
'2.2.0'