Я пытаюсь запустить Python 2.5 из Python 2.6. Причиной этого является скомпилированная библиотека, которую я пытаюсь использовать (GDAL) не поддерживается для версии Python, распространяемой с другой программой (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
это окна пакетный скрипт, который запускает версию 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's версии 2.6 от python), все работает нормально. Однако, если я беру один и тот же скрипт и добавляю его как «набор инструментов» внутри основного приложения и запускаю его оттуда, я получаю «DLL не найден» для библиотеки GDAL внутри файла import_tests.py
!
Как это может произойти, когда subprocess
- это модуль, который запускает другой интерпретатор Python? Любые идеи о том, что может произойти?
Редактировать: Я могу проверить, что переменные os.environ['PATH']
одинаковы для обоих вызовов.
Редакция 2: В каталоге C:\Program Files\ArcGIS...\Bin
содержится dll, которая несовместима с моими привязками python. Windows сначала искала cwd и попыталась загрузить эту DLL, не удалось, а затем сообщила об ошибке «dll not found».
Какой графический интерфейс вы используете для основного приложения? Какие DLL-файлы пытается загрузить gdal? Успешно ли загружается какая-либо из них? – Velociraptors
Главным графическим интерфейсом является ArcGIS. Насколько я знаю, 'gdal' пытается загрузить' gdal.dll', но я не уверен, как это узнаю. Как я могу проверить? – Rich
Вы можете использовать [Process Explorer] (http://technet.microsoft.com/en-us/sysinternals/bb896653), чтобы узнать, какие DLL-файлы загружены определенным процессом. В этом случае вы, вероятно, захотите проверить ArcGIS и все процессы Python. Учитывая вашу первоначальную проблему, я бы сказал, что наиболее вероятно, что ArcGIS отравляет что-то, * не * python. – Velociraptors