티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Import module from subfolder

서브폴더를 모듈로 가져오는 방법

 문제 내용 

I want to import subfolders as modules. Therefore every subfolder contains a __init__.py. My folder structure is like this:

각각의 서브폴더에 init.py가 포함되어있는 모듈로 서브폴더를 가져오고 싶습니다. 폴더 구조는 다음과 같습니다.
src\
  main.py
  dirFoo\
    __init__.py
    foofactory.py
    dirFoo1\
      __init__.py
      foo1.py
    dirFoo2\
      __init__.py
      foo2.py

 

In my main script I import

메인 스크립트에서 다음과 같이 가져옵니다.
from dirFoo.foofactory import FooFactory

 

In this factory file I include the sub modules:

이 팩토리 파일에 서브 모듈을 포함합니다.
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2

 

If I call my foofactory I get the error, that python can't import the submodules foo1 and foo2:

foofactory를 호출하면 foo1 및 foo2 하위 모듈을 가져올 수 없다는 오류가 발생합니다.
Traceback (most recent call last):
  File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
  File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in    <module>
from dirFoo1.foo1 import Foo1
    ImportError: No module named dirFoo1.foo1

 

 

 높은 점수를 받은 Solution 

There's no need to mess with your PYTHONPATH or sys.path here.

여기서 PYTHONPATH 또는 sys.path를 조작할 필요가 없습니다.

 

To properly use absolute imports in a package you should include the "root" packagename as well, e.g.:

패키지에서 절대 임포트를 올바르게 사용하려면 "root" 패키지 이름도 포함해야 합니다. 예를 들어:
from dirFoo.dirFoo1.foo1 import Foo1
from dirFoo.dirFoo2.foo2 import Foo2

 

Or you can use relative imports:

또는 상대 임포트를 사용할 수 있습니다.
from .dirfoo1.foo1 import Foo1
from .dirfoo2.foo2 import Foo2

 

 

 가장 최근 달린 Solution 

Say your project is structured this way:

프로젝트 구조가 다음과 같다면:
+---MyPythonProject
|   +---.gitignore
|   +---run.py
|   |   +---subscripts
|   |   |   +---script_one.py
|   |   |   +---script_two.py

 

Inside run.py, you can import scripts one and two by:

run.py 내에서 다음과 같이 스크립트 one과 two를 가져올 수 있습니다.
from subscripts import script_one as One
from subscripts import script_two as Two

 

Now, still inside run.py, you'll be able to call their methods with:

이제 run.py 내에서 메소드를 호출할 수 있습니다.
One.method_from_one(param)
Two.method_from_two(other_param)

 

 

출처 : https://stackoverflow.com/questions/8953844/import-module-from-subfolder

반응형
댓글
공지사항
최근에 올라온 글