【问题标题】:Using GIS in virtual Python environments在虚拟 Python 环境中使用 GIS
【发布时间】:2017-10-05 19:20:46
【问题描述】:

这个问题已经put on hold at the GIS Stack Exchange 跑题了。所以我想我会尝试 StackOverflow。

我使用 Python 已经有一段时间了,并且已经接受了虚拟环境是一件好事的想法,因为它们可以防止未来的软件包更新破坏您花费大量时间开发的宝贵代码。我刚刚花了好几天的时间试图让 cartopy 在 Mac 上的 Python 3.6 虚拟环境中工作,使用 fink 安装的 gdal、geos 和 proj4 库(参见Python 3.4 crashes when producing some – but not all – Cartopy maps with segmentation fault 11)。但是,似乎即使在虚拟环境中,代码仍然依赖于那些外部库。这似乎违背了使用虚拟环境的目的,因为如果更新了外部库,即使虚拟环境中的 Python 包保持不变,它也会冒着破坏在虚拟环境中开发的任何 GIS 代码的风险。我遇到这种情况的唯一一次是与 GIS 相关的软件包有关(但很明显,它也可能发生在其他领域)。

是否可以为 GIS 创建一个 Python 虚拟环境,该环境最初可以使用外部库和软件构建,但随后是独立的,并且在更改或更新外部库和框架时不受影响?

【问题讨论】:

  • 您可能需要考虑使用 Docker。也许类似于this image
  • 我以前没有遇到过。我会看看。并感谢您的建议。

标签: python gis gdal geos proj


【解决方案1】:

Python 虚拟环境很棒,但是当您尝试隔离基于 C 的依赖项时,您会发现它并没有真正的帮助。

Docker 是一种解决方案,但对于您的情况可能有点过分。 Conda 是一个环境管理器,它通过处理您的 Python 包及其所有依赖项来解决这个问题,无论它们是用什么语言编写的。Cartopy 和许多其他常见的 GIS 包可通过 conda-forge 预先构建存储库。

安装 Conda 后,您可以这样做:

conda create -n my_cartopy_env -c conda-forge cartopy

cartopy 和它的所有依赖项都应该在他们自己的环境中为您安装,它可以在 Windows、OS X 或 Linux 上运行。魔术:-)

【讨论】:

  • +1 为 Conda,效果很好。但是还是要注意一些。激活新环境时,并非所有 conda+gdal 构建都能正确设置系统环境。最近的 Conda 版本 + 来自 conda-forge 的 GDAL 如今做得很好(通过运行 gdal-activate.bat)。但是,例如,以前的版本不会覆盖已经设置(例如手动)的 sys 变量,这使您仍然使用与您期望的不同的二进制文件。它的包/构建依赖,所以不能保证。在激活环境之前和之后探索 sys 变量以确定。
  • +1 使用正确的术语简洁地改写我原来的问题 - 至少我现在知道我想要做什么。 Conda 是一个很好的建议,我会检查一下。我已经对这个问题投了赞成票,但我不会将其标记为“已接受的答案”,以防其他人发布另一个解决方案。
猜你喜欢
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
相关资源
最近更新 更多