Использование ГИС в виртуальных средах Python

Этот вопрос был отложен на GIS Stack Exchange как не относящийся к теме. Поэтому я решил вместо этого попробовать StackOverflow.

Я использую Python некоторое время и понял, что виртуальные среды — это хорошо, потому что они предотвращают будущие обновления пакетов, ломающие ваш драгоценный код, на разработку которого ушли эоны. Я только что провел несколько дней, пытаясь заставить cartopy работать в виртуальной среде Python 3.6 на Mac, используя установленные fink библиотеки для gdal, geos и proj4 (см. Python 3.4 аварийно завершает работу при создании некоторых, но не всех, карт Cartopy с ошибкой сегментации 11). Однако похоже, что даже в виртуальной среде код по-прежнему зависит от этих внешних библиотек. Казалось бы, это противоречит цели использования виртуальных сред, поскольку обновление внешних библиотек может привести к нарушению работы любого кода ГИС, разработанного в виртуальной среде, даже если пакеты Python в виртуальной среде останутся неизменными. Единственный раз, когда я столкнулся с такой ситуацией, это касается пакетов, связанных с ГИС (но, очевидно, это может произойти и в других сферах).

Можно ли создать виртуальную среду Python для ГИС, которая изначально может быть построена с использованием внешних библиотек и программного обеспечения, но затем станет автономной и не изменится при изменении или обновлении внешних библиотек и фреймворков?


person user1718097    schedule 07.05.2017    source источник
comment
Возможно, вы захотите рассмотреть возможность использования Docker. Может быть, что-то вроде этого изображения.   -  person Alberto Garcia-Raboso    schedule 08.05.2017
comment
Я такого раньше не встречал. Я взгляну. И спасибо за предложение.   -  person user1718097    schedule 10.05.2017


Ответы (1)


Виртуальные среды Python великолепны, но, как вы понимаете, они не очень помогают, когда вы пытаетесь изолировать зависимости на основе C.

Docker — это одно из решений, но в вашей ситуации оно может оказаться излишним. Conda — это менеджер среды, который решает эту проблему, заботясь о ваших пакетах Python и всех их зависимостях, независимо от того, того, на каком языке они были написаны. Cartopy и многие другие распространенные ГИС-пакеты доступны предварительно собранными через conda-forge репозиторий.

После того, как вы установили Conda, вы можете просто сделать:

conda create -n my_cartopy_env -c conda-forge cartopy

И cartopy, и все его зависимости должны быть установлены для вас в их собственной среде, и он работает на Windows, OS X или Linux. Магия :-)

person Duncan WP    schedule 10.05.2017
comment
+1 для Conda, отлично работает. Но некоторую осторожность все же следует соблюдать. Не все сборки conda+gdal правильно устанавливают системные среды при активации новой среды. Последние версии Conda + GDAL от conda-forge делают это хорошо в наши дни (посредством запуска gdal-activate.bat). Но предыдущие версии, например, не перезаписывали переменную sys, если она уже была установлена ​​(например, вручную), из-за чего вы по-прежнему использовали другие двоичные файлы, чем те, которые вы ожидали. Это зависит от пакета/сборки, поэтому никаких гарантий. Изучите системные переменные до и после активации сред, чтобы быть уверенным. - person Rutger Kassies; 10.05.2017
comment
+1 за лаконичную перефразировку моего исходного вопроса с использованием правильной терминологии - по крайней мере, теперь я знаю, что пытаюсь сделать. Conda - хорошее предложение, и я проверю его. Я проголосовал за вопрос, но пока не буду отмечать его как «принятый ответ» на случай, если кто-то еще опубликует другое решение. - person user1718097; 12.05.2017