我正在尝试从 Python 2.6 启动 Python 2.5。原因是我尝试使用的编译库 (GDAL) 不支持与另一个程序 (ArcGIS) 一起分发的 Python 版本。
这就是我正在尝试做的事情。main.py
Python 2.6 中的文件:
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)')
当我main.py
在 DOS 命令行上运行时python.exe main.py
(那是 Arc 的 2.6 版 python),一切正常。但是,如果我采用相同的脚本并将其作为“工具箱”添加到主应用程序中并从那里启动它,我会在文件中得到 GDAL 库的“找不到 DLL” import_tests.py
!
subprocess
当模块启动不同的 Python 解释器时,怎么会发生这种情况?关于可能发生什么的任何想法?
编辑:我可以验证os.environ['PATH']
两个调用中的变量是否相同。
Edit2:该C:\Program Files\ArcGIS...\Bin
目录包含一个与我的 python 绑定不兼容的 dll。Windows首先搜索cwd并尝试加载该dll,失败,然后报告“找不到dll”错误。