2011-08-18 12 views
4

파이썬 2.6에서 파이썬 2.5를 시작하려고합니다. 그 이유는 내가 사용하려고하는 컴파일 된 라이브러리 (GDAL)는 다른 프로그램 (ArcGIS)과 함께 배포 된 Python 버전에서 지원되지 않기 때문입니다.파이썬 하위 프로세스 시작은 실행 프로그램에 따라 다른 동작을합니다.

내가하려고하는 것은 다음과 같습니다. 파이썬 2.6의 main.py 파일 : GDAL을 가져

@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 시도 :

import subprocess 
p = subprocess.Popen(['C:\OSGeo4W\gdal_python_exec.bat', 'X:\\local\\import_tests.py']) 

gdal_python_exec.bat 또한 일부 환경 변수를 설정하는 동안 내가 원하는 파이썬의 2.5 버전을 발생시키는 창 배치 스크립트입니다 :

try: 
    from osgeo import gdal 
    raw_input('Imported! (Press enter)') 
except Exception, e: 
    print(e) 
    raw_input('Failed! (Press enter)') 

내가 python.exe main.py로 DOS 명령 줄에서 main.py을 실행

(즉, Python의 Arc의 2.6 버전), 모든 것이 잘 작동합니다. 그러나 동일한 스크립트를 기본 응용 프로그램의 '도구 상자'로 추가하고 거기에서 실행하면 import_tests.py 파일의 GDAL 라이브러리에 "DLL을 찾을 수 없습니다"라는 메시지가 표시됩니다.

subprocess이 다른 파이썬 인터프리터를 시작하는 모듈 일 때 어떻게 될 수 있습니까? 무슨 일이 일어날 지에 대한 아이디어가 있습니까?

편집 : os.environ['PATH'] 변수가 두 호출에서 모두 동일하다는 것을 확인할 수 있습니다.

편집 2 :C:\Program Files\ArcGIS...\Bin 디렉토리에는 내 파이썬 바인딩과 호환되지 않는 dll이 포함되어 있습니다. Windows가 cwd를 먼저 검색하여 dll을로드하려고 시도했지만 실패하고 "dll을 찾을 수 없음"오류가보고되었습니다.

+0

기본 응용 프로그램에는 어떤 GUI를 사용하고 있습니까? gdal은 어떤 DLL을로드하려고합니까? 그들 중 하나가 성공적으로로드합니까? – Velociraptors

+0

기본 GUI는 ArcGIS입니다. 내가 아는 한'gdal'은'gdal.dll'을로드하려고 시도하지만, 어떻게 알 수 있을지 확신 할 수 없습니다. 어떻게 확인할 수 있습니까? – Rich

+0

[Process Explorer] (http://technet.microsoft.com)를 사용할 수 있습니다.com/ko-kr/sysinternals/bb896653)를 사용하여 특정 프로세스가로드 한 DLL을 확인하십시오. 이 경우 ArcGIS 및 모든 Python 프로세스를 확인해야 할 것이다. 원래의 문제를 감안할 때, ArcGIS가 파이썬이 아닌 무언가를 중독시킬 가능성이 가장 높다고 말할 수 있습니다. – Velociraptors

답변

1

PATH가 올바른지 여부에 관계없이 간단한 테스트는 다른 임의의 디렉토리로 변경하고 python.exe C:\full\path\to\main.py을 수행하는 것입니다. 문제가 재현되면 일종의 경로 문제인지 알 수 있습니다.

sys.path을 확인하십시오. 차이점은 어디입니까? 이 경우, 을 사용하거나 zc.buildout/zc.recipe.egg 같은 올바른 sys.path가있는 console_script를 생성하는 것과 같은 다른 것을 사용하여 파이썬 코드 및 라이브러리를 python.exe에서 액세스 할 수있는 방법을 변경해야 할 수도 있습니다. . ". \ 빈 ... \ 프로그램 파일 \는 ArcGIS : \ Windows와 깨진 하나는 C입니다 작업 한 C는"

+0

도움을 주셔서 감사합니다. 그러나 sys.path는 추가 디렉토리를 제외하고 두 호출간에 동일합니다. 수동으로 해당 디렉터리를 제거하면 여전히 동일한 오류가 발생합니다. 나는 또한 당신이 제안한 것처럼 절대 경로로 스크립트를 호출 해 보았습니다. 그러나 여전히 아무것도 아닙니다. 내가 확인할 수있는 다른 아이디어가 있니? – Rich

+0

os.getcwd()는 어떻게됩니까? –

+0

예, 그게 문제였습니다. 외관상으로는 GUI에서 달릴 때 cwd는 동일한 dll의 다른 버전이 있던 전화 번호부에 있었다. 그 디렉토리에서 다른 곳으로 갈 때 다시 작동합니다. – Rich

1

이 다른 곳에서 게시 된 의견에서 나타납니다

os.chdir을 사용하면 효과가 있습니다.

[이 내용의 의미가 무엇이든, 주석을 분석하기 힘들었습니다.]

+0

'C : \ Program Files \ ArcGIS ... \ Bin' 디렉토리에는 파이썬 바인딩과 호환되지 않는 dll이 포함되어 있습니다 (필자는 Windows가 제 것이 아니라고 확신합니다). Windows가 cwd를 먼저 검색하여 dll을로드하려고 시도했지만 실패하고 "dll을 찾을 수 없음"오류가보고되었습니다. – Rich

+0

@ 리치 : 이런 종류의 정보는 코멘트에 속하지 않습니다. ** 질문의 필수 ** 부분입니다. 이 중요한 사실을 포함하도록 ** ** 업데이트 **하십시오. –

+0

@Lott 감사합니다. 질문이 업데이트되었습니다. – Rich