【发布时间】:2011-10-30 05:10:54
【问题描述】:
我正在尝试从 Python 2.6 启动 Python 2.5。原因是我尝试使用的编译库 (GDAL) 不支持与另一个程序 (ArcGIS) 一起分发的 Python 版本。
这就是我正在尝试做的事情。 Python 2.6 中的main.py 文件:
import subprocess
p = subprocess.Popen(['C:\OSGeo4W\gdal_python_exec.bat', 'X:\\local\\import_tests.py'])
gdal_python_exec.bat 是一个 Windows 批处理脚本,它可以启动我想要的 2.5 版本的 Python,同时还设置了一些环境变量:
@echo off
set OSGEO4W_ROOT=C:\OSGeo4W
PATH=%OSGEO4W_ROOT%\bin;%PATH%
for %%f in (%OSGEO4W_ROOT%\etc\ini\*.bat) do call %%f
@echo on
@C:\OSGeo4W\bin\python.exe %1
import_tests.py 尝试导入 gdal:
try:
from osgeo import gdal
raw_input('Imported! (Press enter)')
except Exception, e:
print(e)
raw_input('Failed! (Press enter)')
当我在 DOS 命令行中以 python.exe main.py(这是 Arc 的 2.6 版 python)运行 main.py 时,一切正常。但是,如果我采用相同的脚本并将其作为“工具箱”添加到主应用程序中并从那里启动它,我会在import_tests.py 文件中为 GDAL 库获得“找不到 DLL”!
当 subprocess 是启动不同 Python 解释器的模块时,怎么会发生这种情况?对可能发生的事情有任何想法吗?
编辑:我可以验证两个调用中的os.environ['PATH'] 变量是否相同。
Edit2:C:\Program Files\ArcGIS...\Bin 目录包含一个与我的 python 绑定不兼容的 dll。 Windows首先搜索cwd并尝试加载该dll,失败,然后报告“找不到dll”错误。
【问题讨论】:
-
您在主应用程序中使用什么 GUI? gdal 尝试加载哪些 dll?它们中的任何一个都加载成功了吗?
-
主要的 GUI 是 ArcGIS。据我所知
gdal尝试加载gdal.dll,但我不确定我会如何找到。我该如何检查? -
您可以使用Process Explorer 查看特定进程加载了哪些DLL。在这种情况下,您可能需要检查 ArcGIS 和所有 Python 进程。鉴于您最初的问题,我想说 ArcGIS 最有可能毒害了某些东西,不是 python。
标签: python subprocess arcgis gdal