我正在尝试从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命令行中运行main.py
为python.exe main.py
(这是Arc的2.6版本的python)时,一切正常。但是,如果我使用相同的脚本并将其作为“工具箱”添加到主应用程序中并从那里启动它,我会在import_tests.py
文件中找到“找不到DLL”GDAL库!
当subprocess
是启动不同Python解释器的模块时,怎么会发生这种情况?关于可能发生什么的任何想法?
修改:我可以验证两个电话中os.environ['PATH']
个变量是否相同。
Edit2: C:\Program Files\ArcGIS...\Bin
目录包含一个与我的python绑定不兼容的dll。 Windows首先搜索cwd并尝试加载该DLL,失败,然后报告“未找到dll”错误。
答案 0 :(得分:1)
无论PATH是否正确,一个简单的测试就是更改为不同的任意目录并执行python.exe C:\full\path\to\main.py
。如果它再现了问题,那么你知道它是路径问题的某种。
检查sys.path,我敢打赌这就是差异所在。如果是这种情况,您可能需要改变您使用python.exe
访问Python代码和库的方式,使用site module或使用其他内容,例如zc.buildout / {{3支持生成带有正确的sys.path的console_scripts。
答案 1 :(得分:1)
从其他地方发布的评论中可以看出
“工作的是C:\ Windows,破坏的是C:\ Program Files \ ArcGIS ... \ Bin。”
执行os.chdir
使其正常运行。
[不知道这究竟意味着什么,评论很难解析。]