如何将 GDAL 作为依赖项添加到 Python 包

Luí*_*usa 5 python pip setuptools gdal

我正在尝试为使用 GDAL 的 PyPI 打包 Python 脚本。我首先在我的setup.py:

install_requires=['GDAL==1.11.2'],

这样包就无法在我的测试虚拟环境中安装:

extensions/gdal_wrap.cpp:2855:22: fatal error: cpl_port.h: No such file or directory
 #include "cpl_port.h"
                      ^
compilation terminated.
error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

然后我通过引用来尝试它pygdal,因为它被标记为 virtualenv 友好版本:

install_requires=['pygdal'],

这样安装就不会出错(但通常会加载编译警告)。但是,当我调用脚本时,我又得到了这个错误:

Traceback (most recent call last):
  File "/home/desouslu/.virtualenvs/test_p3/bin/hasc2gml", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/home/desouslu/.virtualenvs/test_p3/lib/python3.4/site-packages/pkg_resources.py", line 2716, in <module>
    working_set.require(__requires__)
  File "/home/desouslu/.virtualenvs/test_p3/lib/python3.4/site-packages/pkg_resources.py", line 685, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/home/desouslu/.virtualenvs/test_p3/lib/python3.4/site-packages/pkg_resources.py", line 588, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pygdal
Run Code Online (Sandbox Code Playgroud)

将 GDAL 设置为依赖项的正确方法是什么?

Luí*_*usa 1

经过各种测试后,我得出结论,这是软件包本身的问题pygdal。依赖项已正确声明,但pip安装或编译失败。我尝试pygdal直接pip在 Ubuntu 14.04 系统上安装,但失败了。目前还没有适用于 GDAL/OGR 的 python 轮子,这可能可以解释这个问题。请参阅此讨论以了解更多详细信息。

我现在采用的策略是简单地将依赖关系留给用户。在源代码中,类似这样的内容可以帮助用户:

try:
    from osgeo import ogr
except ImportError:
    raise (""" ERROR: Could not find the GDAL/OGR Python library bindings. 
               On Debian based systems you can install it with this command:
               apt install python-gdal""") 
Run Code Online (Sandbox Code Playgroud)

如果目标系统使用包管理机制(例如aptyum),则可以使用它而不是 PiPY 来分发 GDAL 相关程序。