更新:
我找到了问题的原因。 gdal_merge.py中的第一行是
#!C:/Users/akg/AppData/Local/Continuum/Anaconda2\python.exe
前两个字符#!,所谓的 shebang ,告诉一个名为Python Launcher的程序,py.exe,用于运行脚本的Python版本。在我的情况下,py.exe注册不正确。 (py.exe自带Python3.3或更高版本,并在C:\ Windows \ py.exe下安装。)
我用> ftype Python.File
测试了它,打印了
Python.File="C:\Python27\ArcGISx6410.3\python.exe" "%1" %*
这会导致使用随ArcInfo附带的python27,无论shebang之后的文本是什么。并且在这个特定的Python安装中没有pkg_resources,因此错误消息。
修复是下载并安装最新版本的Python3,它也重新安装了py.exe。现在,运行> ftype Python.File
打印
`Python.File="C:\WINDOWS\py.exe" "%L" %*`
在此之后,运行> gdal_merge.py
可以正常工作。
OLD:
我在Windows 7系统上安装了带有 Anaconda2 和 gdal 的Python 2.7。
我安装了gdal:
> conda install -c conda-forge gdal
当我从Windows命令提示符下运行gdal_merge.py
(位于../Anaconda2/Scripts文件夹下)时:
> gdal_merge.py
我收到错误消息:ImportError: No module named pkg_resources
在gdal_merge.py中是行:
__import__('pkg_resources').run_script('GDAL==2.2.0', 'gdal_merge.py')
导致导入错误。 Python尝试导入pkg_resources,但无法找到它。 (我已经测试过添加其他模块的导入,例如pandas,但它会导致相同的错误。)
但是pkg_resources可以从Python提示符导入:
>>> import pkg_resources
>>> pkg_resources
<module 'pkg_resources' from 'C:\Users\akg\AppData\Local\Continuum\Anaconda2\lib\site-packages\pkg_resources\__init__.pyc'>
那么为什么在运行gdal_merge.py时找不到包?对此有何解决方法?
我试图把../Anaconda2/Lib/site-packages放在PYTHONPATH中,这有帮助。然而,这并不理想:当我启动QGIS时,这将导致它使用错误的路径导入sip模块,这导致QGIS中的导入错误。 QGIS附带自己的Python发行版。但是当PYTHONPATH指向Anaconda2的站点包时,QGIS将尝试从它加载而不是自己的站点包文件夹。我还读过,没有必要使用PYTHONPATH让Anaconda工作。