UPDATE:
我找到了问题的原因。 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" %*
这会导致无论 shebang 之后的文本是什么,都会使用 ArcInfo 附带的 python27。并且在这个特定的 Python 安装中没有 pkg_resources,因此出现错误消息。
修复方法是下载并安装最新版本的 Python3,这也会重新安装 py.exe。现在,跑步> ftype Python.File
prints
`Python.File="C:\WINDOWS\py.exe" "%L" %*`
之后,运行> gdal_merge.py
正常工作。
OLD:
我已经安装了Python 2.7蟒蛇2, and gdal在 Windows 7 系统上。
我安装了 gdal:
> conda install -c conda-forge gdal
当我跑步时gdal_merge.py
(位于 ../Anaconda2/Scripts 文件夹下)从 Windows 命令提示符:
> 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 的 site-packages 时,QGIS 会尝试从它加载而不是自己的 site-packages 文件夹。我还读到,Anaconda 不需要使用 PYTHONPATH 来工作。