2014-01-17 6 views
1

저는 파이썬 문제에 대한 조언을 찾고 있습니다. 나는 파이썬에서 초보자이다. 나는이 작업을하기 위해 다른 언어의 프로그래밍 경험에 의존하고 있으며 결국 마침내 서서 기다리고 있다고 생각한다. 다음은 시나리오입니다. 다른 모듈을 사용하는 모듈을 가져옵니다.상대 경로에서 모듈 가져 오기

가 가

프로그램이라는 test.py에 대한 나의 드라이버가이처럼 시작합니다

import sys 
sys.path.append(r'C:\Program Files (x86)\Zorba XQuery Processor 2.9.1\share\zorba\uris\com\nuemeta\www\modules\DDEXpedite\bindings\Python\Code and Other Files') 

import QueryDDEX 

을 그런 다음 QueryDDEX.py 파일에 내가 가진 : 내 머리에서

import sys,os 

temp = os.getcwd() 
os.chdir(os.path.dirname(os.path.realpath(__file__))) 
sys.path.append(os.path.realpath("..\..\..\..\..\..\..\..\..\python")) 

print sys.path 

import zorba_api 

os.chdir(temp) 

나는 생각했다 (1) 현재 작업 디렉토리를 저장합니다. (2) 현재 작업 디렉토리를 QueryDDEX.py 모듈의 디렉토리로 변경합니다. (3) 다른 모듈에이 모듈을 배포하면 상대 경로에서 zorba_api 모듈을 가져옵니다. (4) 현재 작업 디렉토리를 변경합니다. 처음에는 원래대로 되돌아갔습니다.

이제 상대 경로를 사용하는 것은 좋지 않다는 것을 읽었으며 괜찮습니다. 나는 zorba_api를 쓰지 않았기 때문에 나는 다른 선택을 보지 못한다. 그래서 나는 그것을 너무 많이 제어 할 수 없다. 어쨌든,이 프로그램의 출력은 이것이다 :

['C:\\Users\\Administrator\\Desktop', 'C:\\Python27\\Lib\\idlelib', 'C:\\Windows\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\uris\\com\\nuemeta\\www\\modules\\DDEXpedite\\bindings\\Python\\Code and Other Files', 'C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\python'] 

Traceback (most recent call last): 
    File "C:\Users\Administrator\Desktop\Test.py", line 4, in <module> 
import QueryDDEX 
    File "C:\Program Files (x86)\Zorba XQuery Processor 2.9.1\share\zorba\uris\com\nuemeta\www\modules\DDEXpedite\bindings\Python\Code and Other Files\QueryDDEX.py", line 9, in <module> 
    import zorba_api 
ImportError: No module named zorba_api 

이 일이 내 의견으로는 까다로운 곳이다의 zorba_api 모듈은

C:\\Program Files (x86)\\Zorba XQuery Processor 2.9.1\\share\\zorba\\python 

에 위치하고 있으며 우리는 내 디버그 문으로 볼 수 그것은 그 파이썬 클래스 경로에 있습니다. 그렇다면이 오류가 발생하는 이유는 무엇입니까?

답변

1

이 시나리오를 확인하십시오. 의 파일은 C:\projects\test\입니다. 당신의 sys.pathmodules 디렉토리를 추가, 아주 좋은하지만, 유용하지

import modules.beta 

또는 : 그럼 당신은 그래서 당신이해야 할 alpha에서 beta을 가져 C:\projects\test\modules\에서 beta.py라는 파일이 있습니다.

beta.py 파일에서 모듈을 가져 오려면 C:\projects\test\modules\ 디렉토리에 있지 않아야합니다. alpha.py 디렉토리에 있습니다. 당신이 beta.py에서 그것을 가져 오려면, modules/에서 gamma.py라는 세 번째 파일이 있다면 그래서 예를 들어, 당신은 사용해야합니다

import modules.gamma 

을 당신이에서의 가져 오기 파일에서 (alpha.py) 경로 없기 때문에 가져온 파일 (beta.py) 경로.

희망 사항은 문제를 해결하는 데 도움이되기를 바랍니다.

+0

나는 당신이하는 말을 이해하지만 어쩌면 여전히 내 솔루션이 그럴 경우 왜 작동하지 않는지 이해할 수 없기 때문에 내가하지 않을 수도 있습니다. 현재 작업 디렉토리를 __file__로 변경하여 모듈 위치에 놓은 다음 첫 번째 모듈에서 두 번째 모듈로 상대 경로를 사용하려고합니다. 그것은 절대 경로를 사용할 때 작동합니다. 마지막으로, 문제를 해결하려면 어떻게해야합니까? 왜 내 프로그램이 작동하지 않는지 이해하기 시작했지만 지금은 어떻게 작동시키는 지에 대해 더욱 혼란 스럽습니다. – zg303

+0

'QueryDDEX에 새로운 경로를 추가 할 때.py' 파일을 사용한다면'test.py' 경로에 있다는 것을주의해야합니다. 그래서 당신이 제공 한 경로가 잘못되었을 수도 있습니다. – cdonts

+0

밝혀졌습니다. 상대 경로에서 "/../"를 추가하여 문제가 해결 된 하나의 디렉토리였습니다. 도움을 주셔서 감사합니다. 디버깅하는 데 시간이 오래 걸렸을 것입니다. – zg303