2014-06-09 1 views
1

나는 이상한 문제에 직면하고있다. 그리고 이것은 이미 여러 포럼에서 언급 한 것과 약간 다른 것처럼 보입니다.파이썬 가져 오기 오류 이름을 가져올 수 없습니다

Directory structure: 

Project_Folder 
-- Folder A 
-- SubFolder A1 
-- Subfolder A2 
-- Subfolder A3 
     -- Folder A3-1 
     -- XYZ.py 
-- Subfolder A4 (this contains utility classes) 
     -- A4-1.py 
     -- A4-2.py 

참고 : 모든 폴더가 __init__.py이 또한 파이썬 경로가 PATH에 필요한 모든 디렉토리를 포함 포함되어 있습니다.

스크립트 XYZ.py ...는 2 개 이하의 유틸리티 클래스에 종속됩니다. Scipts는 sys.path 하위 폴더 A4에 추가하기 시작하므로 이상적으로 직접 A4-1을 사용하지 않아도됩니다. 직접 A4-1이 가져 오기 작업을해야합니다. 아래와 같이 에서 A4-1.py 가져 오기 하위 방법 A4-2.py 가져 오기 하위 방법

하지만이 문제는 피사체에 명시된 바와 같이 있습니다. 그러나 A4.A4-1.py를 사용하면 동일하게 작동합니다.

이상한 부분은 프로젝트가 이미 설정된 서버에서 동일한 스크립트 작업입니다.

파이썬에 익숙하지 않아 로컬 시스템에서이 스크립트를 어떻게 실행할 수 있는지 이해해야합니다. (가져 오기에서 모듈 이름을 변경하거나 사용하지 않음)

또한 프로젝트에 종속성으로 A4를 추가 한 IDE INtelliJ를 사용하고 있습니다. 그리고 컴파일러는 그것을 해결할 수 있지만 실행은 가져 오기 오류를 던지고 있습니다 ...

어떤 도움을 주실 수 있습니다.

+0

'__init __. py' 주위에 백틱을 넣어서 굵게 표시되지 않도록 할 수 있습니다. 그러면 사람들은 그게 오류라고 의심하지 않을 것입니다. –

+0

경로에이 디렉토리를 추가하는 코드와 경로를 표시 할 수 있습니까? 또한 import 문에'.py'를 포함 할 필요가 없습니다. – Mark

+0

나는 미안해하지 않았다. 참고로, __init__.py는 이미 폴더 안에있다 ... 나는 편집기가 init.py에서 밑줄을 제거했다고 생각한다. 아마 너 혼란 스럽 겠는가? – nukul

답변

1

이 문제는 해결되었습니다. PYTHONPATH에서 비슷한 폴더가 충돌했는데 유틸리티가있는 경로가 있었지만 파일이 없습니다 ... 경로 자체를 제거한 후 올바른 경로에서 util 파일을 검색했습니다 ...

1

파일의 이름이 실제로 A4-1.py입니까? 이 때문에 나에게 ImportError가 아닌 SyntaxError가 주어집니다. 모듈 이름에 - 부호가 (명백하게) 허용되지 않습니다. 그것은 마이너스를 의미하기 때문에 의미가 있습니다.

같은 probject 내에서 가져 오는 경우, 나는 개인적으로 대부분의 경우,이

from A4.A4_1 import submethods 

같은 경로에 A4를 추가 한 후 직접 A4_1에서 가져 오기보다 더 가져올 것을 말할 것입니다. 당신이 ..를 해결하는 경우 경로가 작동하는 경우

편집

당신은 시도 할 수 있을까요?

import sys,os,time,datetime 
testdir = os.path.dirname(os.path.abspath(__file__)) 
newdir = os.path.abspath(os.path.join(testdir, '../../utilities')) 
sys.path.append(newdir) 

하지 않으면, 당신은 또한 당신이 sys.path을 확인하는 경우

print sys.path 

EDIT2

를 사용하여 올바른 절대 경로가 포함되어 있는지 확인하십시오 다른 디렉토리가 아닙니다 수 가져 오기 시작과 일치하지만 나머지는 포함하지 않습니다 (예 : submethods). 다른 디렉토리가 A4이라면, 아마 파이썬이 잘못된 것을 사용하고있을 것입니다.

또한 이름이 기존 파이썬 모듈이 아닌지 확인하십시오. 예를 들어 모듈의 이름을 바꾸면 가져 오기의 첫 번째 부분이 계속 작동합니다.

+0

안녕하세요, A4-1.py는 실제 프로젝트 클래스 파일 이름을 제공하지 않고 설명하기 위해 제공되는 것입니다. 정상적으로 작동하고 이름 지정 규칙이 올바르게 준수된다고 가정 할 수 있습니다. 그러나 언급 한 바와 같이 modulename.modulefile을 사용하여 가져 오기가 제대로 작동합니다. 유일한 문제는 경로를 추가하고 파일에서 가져 오기가 클라이언트에서 작동하지 않습니다. 하지만 서버에서 작동합니다. 상당히 새로운 파이썬이기 때문에, 나는 어디에서 잡을 수 있는지 알지 못한다. 내가 뭔가를 놓치고 있거나 이것을 실행하기 위해 뭔가를 추가로 제공해야합니다. – nukul

+0

경로에 추가 (sys.path.append)가 작동 할 수 있어야합니다. 그러나 대답에서 제안한 것처럼, 나는'modulename.modulefile'을 고수 할 것이고, 그냥 가져 오기 위해 경로를 바꾸는 것보다 낫다. – Mark

+0

문제는 sys.path.append가 작동하는 서버에서 modulename.modulefile doesn; t입니다. 그리고 주위에 클라이언트를 .... 주위에 .... 나는 어떤 구성 (실업 수 있도록 클라이언트에서 at missing)을 이해해야합니다 당신은 sys.path.append가 작동해야한다고 언급했지만 ... 제 경우에는 그렇지 않습니다 .. .PLs는 이것에 대한 어떤 이유를 제안합니까? – nukul

관련 문제