모든 종류의 예와 기타 유사한 질문을 보았지만 내 시나리오와 정확히 일치하는 예를 찾을 수없는 것 같습니다. 비슷한 질문이 너무 많기 때문에이 질문을하는 사람처럼 느껴지지만 "올바르게"작동하지 않는 것 같습니다. 내 프로젝트는 다음과 같습니다.
user_management (package)
|
|------- __init__.py
|
|------- Modules/
| |
| |----- __init__.py
| |----- LDAPManager.py
| |----- PasswordManager.py
|
|------- Scripts/
| |
| |----- __init__.py
| |----- CreateUser.py
| |----- FindUser.py
"CreateUser.py"를 기본 user_management 디렉토리로 이동하면 쉽게 사용할 수 있습니다. "import Modules.LDAPManager"
to import LDAPManager.py --- 작동합니다. 내가 할 수없는 일은 (내가 원하는) Scripts 하위 폴더에 CreateUser.py를 유지하고 LDAPManager.py를 가져 오는 것입니다. 나는 이것을 사용하여 이것을 달성하기를 바랐다 "import user_management.Modules.LDAPManager.py"
. 이것은 작동하지 않습니다. 간단히 말해, Python 파일을 계층 구조에서 쉽게 더 깊게 볼 수 있지만 한 디렉터리를 위로 참조하고 다른 디렉터리로 아래로 참조하는 Python 스크립트를 가져올 수는 없습니다.
다음을 사용하여 내 문제를 해결할 수 있습니다.
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import Modules.LDAPManager as LDAPManager
나는 이것이 나쁜 습관이라고 들었고 낙담했습니다.
Scripts의 파일은 직접 실행되도록되어 있습니다 ( Scripts 의 init .py가 필요합니까?). 이 경우 -m 플래그로 CreateUser.py를 실행해야한다는 것을 읽었습니다. 나는 이것에 대한 몇 가지 변형을 시도했지만 CreateUser.py가 LDAPManager.py를 인식하도록 할 수 없습니다.
python -m user_management.Scripts.CreateUser