2017-12-19 4 views
1

이미이 질문과 유사한 질문이 많이 있지만 불행히도 내 문제에 어떻게 적용하는지 알지 못했습니다.Python : SystemError 상위 모듈이로드되지 않았으며 상대 가져 오기를 수행 할 수 없습니다.

다음과 같이 내 프로젝트의 구조는 다음과 같습니다 train.py에서 다음

Project 
|___ maincode 
     |___ __init__.py 
     |___ losses.py 
     |___ bin 
      |___ __init__.py 
      |___ train.py 

와 나는 다음과 같은 코드를 가지고 : 나는이 프로젝트의 주요 디렉토리 Project/에서 스크립트 train.py를 실행하면 이제

# Allow relative imports when being executed as script. 
if __name__ == "__main__" and __package__ is None: 
    __package__ = "maincode.bin" 
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..')) 

    from .. import losses 

def main(args=None): 
    #some code here 

if __name__ == '__main__': 
    main() 

을 즉, 터미널에서 다음을 실행하십시오.

maincode/bin/train.py 

후 나는 다음과 같은 오류를 얻을 :

SystemError: Parent module 'maincode.bin' not loaded, cannot perform relative import

는 파이썬 2.7.6 파이썬 3.5.2와 함께 모두 시도와 같은 오류를 얻을.

도와 주시겠습니까? 미리 감사드립니다.

+0

방금 ​​실행 train.py 또는 전체 응용 프로그램 하시겠습니까? – edlee

+0

@edlee 메인 코드는'train.py'에 있습니다.이 코드는 나머지 프로젝트에 따라 달라 지므로 전체 응용 프로그램을 실행해야합니까? – Khue

+0

무엇 - 문서가 효과가 있어야한다고 말합니다. 왜 그런지 모르겠다. – user2357112

답변

1

전체 패키지가 아닌 해당 모듈을 실행하기 만하면됩니다. python -m maincode.bin.train은 파이썬이이를 모듈로 실행하도록 알려줍니다.

전체 패키지를 실행하려면 디렉토리를 프로젝트 : cd /path/to/project으로 변경 한 다음 실행하십시오. python maincode 그리고 코드가 올바르게 설정되어 있으면 train.py를 실행해야합니다.

그렇지 않으면 스크립트 외부로 스크립트를 이동하고 자체 스크립트에서 실행하십시오. 이 이해 패키지에

는 여기에서 찾을 수 있습니다 : Relative imports for the billionth time

+0

'python -m maincode.bin.train'을 시도해 보았습니다! 정말 고마워요! – Khue