Я пытаюсь запустить Python 2.5 из Python 2.6. Причиной этого является скомпилированная библиотека, которую я пытаюсь использовать (GDAL), не поддерживается для версии Python, распространяемой с другой программой (ArcGIS).
Вот что я пытаюсь сделать. Файл 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, который запускает нужную версию Python 2.5, а также настраивает некоторые переменные среды:
@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
(это версия Python для Arc 2.6), все работает нормально. Однако, если я возьму тот же сценарий и добавлю его в качестве «набора инструментов» в основное приложение и запустите его оттуда, я получу «DLL не найдена» для библиотеки GDAL внутри файла import_tests.py
!
Как это может произойти, если subprocess
это модуль, который запускает другой интерпретатор Python? Любые идеи о том, что может происходить?
Редактировать : я могу убедиться, что переменные os.environ['PATH']
одинаковы в обоих вызовах.
Edit2: Каталог C:\Program Files\ArcGIS...\Bin
содержал dll, который не был совместим с моими привязками python. Windows сначала проверила cwd и попыталась загрузить эту dll, не смогла, затем сообщила об ошибке «dll not found».