하위 폴더에서 모듈 가져 오기
하위 폴더를 모듈로 가져오고 싶습니다. 따라서 모든 하위 폴더에는 __init__.py
. 내 폴더 구조는 다음과 같습니다.
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
내 기본 스크립트에서 가져옵니다.
from dirFoo.foofactory import FooFactory
이 팩토리 파일에는 하위 모듈이 포함되어 있습니다.
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import 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
당신 PYTHONPATH
이나 sys.path
여기 를 엉망으로 만들 필요가 없습니다 .
패키지에서 절대 가져 오기를 올바르게 사용하려면 "루트"패키지 이름도 포함해야합니다. 예 :
from dirFoo.dirFoo1.foo1 import Foo1
from dirFoo.dirFoo2.foo2 import Foo2
또는 상대 가져 오기를 사용할 수 있습니다 .
from .dirfoo1.foo1 import Foo1
from .dirfoo1.foo1 import Foo2
여기서 알려주세요. (newbee, keviv22에서)
자신의 이익을 위해 절대로 "-"또는 "_"와 같은 공백이나 기호를 사용하여 폴더 나 파일의 이름을 지정하십시오. 그렇게하면 몇 가지 문제에 직면 할 수 있습니다. 내 것과 같이 가져 오기 명령이 정확하더라도 이름이 지정된 폴더 내에서 사용할 수있는 원하는 파일을 성공적으로 가져올 수 없습니다.
다음과 같이 잘못된 폴더 이름 지정 :
- 일반 클래스 폴더
- Generic_Classes_Folder
위의 유효한 폴더 이름 :
- GenericClassesFolder 또는 Genericclassesfolder 또는 genericClassesFolder (또는 단어 사이에 공백이나 특수 기호없이 이와 유사 함)
내가 한 실수 :
파일 구조를 고려하십시오.
Parent
. __init__.py
. Setup
.. __init__.py
.. Generic-Class-Folder
... __init__.py
... targetClass.py
. Check
.. __init__.py
.. testFile.py
내가 뭘하고 싶었어?
- testFile.py에서 Generic-Class-Folder 파일에있는 'targetClass.py'파일을 가져 와서 'targetClass.py'파일에서 "functionExecute"라는 함수를 사용하고 싶었습니다.
What command I did?
- from 'testFile.py', wrote command,
from Core.Generic-Class-Folder.targetClass import functionExecute
- Got errors like
SyntaxError: invalid syntax
Tried many searches and viewed many stackoverflow questions and unable to decide what went wrong. I cross checked my files multiple times, i used __init__.py
file, inserted environment path and hugely worried what went wrong......
And after a long long long time, i figured this out while talking with a friend of mine. I am little stupid to use such naming conventions. I should never use space or special symbols to define a name for any folder or file. So, this is what I wanted to convey. Have a good day!
(sorry for the huge post over this... just letting my frustrations go.... :) Thanks!)
Set your PYTHONPATH environment variable. For example like this PYTHONPATH=.:.. (for *nix family).
Also you can manually add your current directory (src in your case) to pythonpath:
import os
import sys
sys.path.insert(0, os.getcwd())
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:
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:
One.method_from_one(param)
Two.method_from_two(other_param)
Had problems even when init.py existed in subfolder and all that was missing was adding 'as' after import
from folder.file import Class as Class
import folder.file as functions
참고URL : https://stackoverflow.com/questions/8953844/import-module-from-subfolder
'programing' 카테고리의 다른 글
바벨을 사용할 때 js가 필요합니까? (0) | 2020.09.12 |
---|---|
uint32, int32, uint64, int64와 같은 유형이 stdlib 헤더에 정의되어 있습니까? (0) | 2020.09.12 |
인텔 x86 에뮬레이터 가속기 (HAXM 설치 프로그램) 버전 6.0.5가 Windows와 호환되지 않는 것으로 표시됨 (0) | 2020.09.12 |
왼쪽 외부 조인에서 반환 된 기본 Null 값 바꾸기 (0) | 2020.09.12 |
자바 스크립트 객체 push () 함수 (0) | 2020.09.12 |