我正在尝试为使用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
然后我尝试引用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
将GDAL设置为依赖项的正确方法是什么?
答案 0 :(得分:0)
经过各种测试后,我得出结论,这是pygdal
包本身的问题。正确声明了依赖项,但pip
无法安装或编译它。我尝试使用pygdal
直接在库存Ubuntu 14.04系统和it fails上安装pip
。 GDAL / OGR还没有一个python轮,这可能解释了这个问题。有关详细信息,请参阅this discussion。
我现在采用的策略是简单地将依赖项留给用户。在源代码中,类似这样的东西可以帮助用户:
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""")
如果目标系统使用包管理机制(例如apt
,yum
),可以使用它而不是PiPY来分发GDAL相关程序。