상대 import를 사용하여 Python 파일을 PyCharm에서 실행

상대 import를 사용하여 Python 파일을 PyCharm에서 실행하려고 시도하고 잘 작동하지 않는다는 경험이 없습니까?

TL;DR


  • Program: $ModuleSdkPath$
  • Parameters: -c "import os,runpy;runpy.run_module('.'.join(r'$FilePathRelativeToSourcepath$'.replace(os.sep,'.').split('.')[:-1]),{},__name__,1)"
  • Working directory: $Sourcepath$

  • Sources Root를 올바르게 설정한 후 위의 설정으로 External Tools를 추가하십시오.

    해결하려는 문제



    예를 들어, my_pkg 라고 하는 자작의 패키지내에서 아래와 같은 파일을 만듭니다.

    my_pkg/foo.py
    x = 42
    

    my_pkg/bar.py
    from .foo import x
    
    if __name__ == '__main__':
        print(x)
    

    여기서 my_pkg/bar.py를 PyCharm에서 열고 단순히 Run하면 다음과 같은 예외가 발생합니다.
    /usr/bin/python3 /tmp/my_pkg/bar.py
    Traceback (most recent call last):
      File "/tmp/my_pkg/bar.py", line 1, in <module>
        from .foo import x
    ModuleNotFoundError: No module named '__main__.foo'; '__main__' is not a package
    
    Process finished with exit code 1
    

    원인



    이유는 여기 기사 등에서 자세히 설명합니다.
    결론만 말하면, -m 옵션을 붙여, 모듈의 완전 수식명 ( my_pkg.bar )을 지정해 실행하면(자) 잘 동작합니다.
    # ERROR!!
    /usr/bin/python3 /tmp/my_pkg/bar.py
    
    # OK
    cd /tmp
    /usr/bin/python3 -m my_pkg.bar
    

    즉, 어쨌든 PyCharm이 -m 옵션 형식으로 실행하게하는 것이 좋습니다.

    해결 방법 1. 어리석게 편집 구성 설정



    아래 그림과 같이 설정하면 -m 옵션 형식으로 실행시킬 수 있습니다.
    그러나 이 방법에는 실행하려는 각 파일에 대해 이 설정을 매번 수행해야 하는 매우 심각한 문제가 있습니다.





    솔루션 2. External Tools 사용



    PyCharm 에는, 외부의 실행 파일을 취급하는 기능이 갖추어져 있으므로, 이것을 이용합니다.
    조금 번거롭지만 일단 설정하는 것만으로 모든 프로젝트에서 사용할 수있게되는 것이 장점입니다.

    External Tools 새로 만들기



    메뉴 막대의 파일 → 설정 → 도구 → 외부 도구로 이동하여 새 외부 도구를 추가하십시오.





    Tool settings 부분은 아래와 같이 설정해 주십시오.
  • Program: $ModuleSdkPath$
  • Parameters: -c "import os,runpy;runpy.run_module('.'.join(r'$FilePathRelativeToSourcepath$'.replace(os.sep,'.').split('.')[:-1]),{},__name__,1)"
  • Working directory: $Sourcepath$

  • 소스 루트 설정



    나머지는 my_pkg의 부모 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 Sources Root로 등록하면 OK입니다.



    실행


    bar.py를 연 상태에서 메뉴 막대에서 Tool → External Tools → python -m을 클릭하십시오.
    제대로 실행할 수 있으면 성공입니다. 자주 사용하는 경우 바로 가기 키를 할당하는 것이 유용합니다.

    좋은 웹페이지 즐겨찾기