여러 위치에서 모듈을 가져 오려고하는데 Python3의 상대 가져 오기가 비활성화 되었기 때문에이 모듈을 사용할 수 없습니다. 사용자가 package_1을 복사하여 터미널 (메인 클래스를 사용)에서 실행할 수 있도록이 작업을 수행하려고합니다. 또 다른 클래스는 웹 응용 프로그램 프론트 엔드 인 scriptb.py로 가져옵니다. 은 "package_1/run.py"수입에서 여기여러 위치에서 모듈을 가져올 때 python3 상대 가져 오기
-- projectfolder
-- projectfolder/
-- __init__.py
--- package_1/
------ __init__.py
------ subpackage_a/
------ subpackage_a/core/module1.py
------ subpackage_a/__init__.py
------ subpackage_a/core/__init__.py
------ run.py
--- package_2/
----- __init__.py
-- -- scriptb.py
: package_1.run 가져 오기 클래스 이름
: subpackage_a.core.module1 가져 오기 클래스 이름에서 여기는 "package_2/scriptb"수입은
그러나 나는 실행할 때 나는 run.py ImportError를에서 다음과 같은 오류 얻을 scriptb.py : 없음 모듈 이름 'package_1.core'
Traceback:
File "/directory/package_1/run.py", line 7, in <module>
from subpackage_a.common.exceptions import Classname
ImportError: No module named 'subpackage_a.common'
을
이것을 처리하고 ImportError 예외를 포착하고 모든 "package_a"모듈에서 두 개의 가져 오기 위치를 정의하는 더 좋은 방법이 있습니까?
또는 각 모듈에 두 번
if __name__ == '__main__':
from package_1 import classname
else:
from .package_1 import classname
감사
EDIT 수입을 의미하는이하는 것보다 더 나은 : 향후 참조를 위해
는 i를 다른 모듈을 가져올 서브 패키지에서이 작업을 수행했다 코어 폴더
try:
from package_1.core.module1 import classname:
except ImportError:
from ..core.module2 import classname
다음과 같이 작동합니다 주요 지역 : 당신이 패키지로 사용하려는 경우
if __name__ == '__main__':
from package_1.core.module1 import classname:
except ImportError:
from .package_1.core.module2 import classname
답장을 보내 주셔서 감사합니다. 모든 패키지에는 __init__.py 파일이 있습니다. 나는 그들을 입력하는 것을 잊었을 때 게시물을 편집 할 것입니다. – budge
젠장, 주 프로그램으로 호출되지 않았기 때문에 "__name__ == '__main__':"하위 패키지 안에 사용할 수 없습니다. 그것을하는 동일한 문제가있는. ImportError 예외를 잡아야한다고 가정 해 봅시다. – budge