4

我正在尝试从 Python 2.6 启动 Python 2.5。原因是我尝试使用的编译库 (GDAL) 不支持与另一个程序 (ArcGIS) 一起分发的 Python 版本。

这就是我正在尝试做的事情。main.pyPython 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”错误。

4

2 回答 2

1

不管 PATH 是否正确,一个简单的测试就是切换到不同的任意目录并执行python.exe C:\full\path\to\main.py. 如果这重现了问题,那么您就知道这是某种路径问题。

检查sys.path,我敢打赌这就是区别所在。如果是这种情况,您可能需要更改使您的 Python 代码和库可从 访问的方式python.exe,使用站点模块或使用zc.buildout / zc.recipe.egg对生成 console_scripts 的支持正确的 sys.path 烘焙。

于 2011-08-19T01:18:30.453 回答
1

从其他地方发布的评论中可以看出

“工作的是 C:\Windows,损坏的是 C:\Program Files\ArcGIS...\Bin。”

做一个os.chdir让它工作。

[不知道这到底意味着什么,评论很难解析。]

于 2011-08-21T15:22:22.597 回答