Python 모듈 실행시 ModuleNotFoundError 처리
pyCharm에서는 그냥 되던게, Visual Studio Code에서는 안되네요.
작업디렉토리에 있는 Main.py가 아닌, 아래 모듈에서 실행을 하면 프로젝트의 다른 모듈을 못찾아서 ModuleNotFoundError가 납니다. 원인은 모듈 검색 경로에 working directory 를 못찾아서 발생하는 거라고 합니다.
하위 경로의 모듈을 실행하려면, 파이썬은 모듈검색 과정에서 working Directory를 추가해줘야 한다. (3번 참조)
참고로, 모듈 검색과정은 sys.modules, build-in moudels, sys.path 순서로 진행되고, 실행위치는 sys.path에 포함된다.
- 참조 visual studio code Docs : https://code.visualstudio.com/docs
1. 현재환경
- anaconda로 가상환경 사용
- python : 3.9 (32bit) - 아나콘다로 가상환경을 사용중
2. 실행 및 디버그 수행 - F5 (Ctrl + Shift + D) 해결방법 (빠른 실행은 3.번을 읽어주세요)
1) visual studio code에서, Ctrl + Shift + P 누른후, python Select Interpreter를 가상환경으로 변경한다.
2) Ctrl + Shift + `를 누르고, 새 터미널을 생성한다. 새 터미널 우측 에 [+]옆 아래 화살표를 누르면,
메뉴가 나오는데, "기본 프로필 선택" 선택한다. 이때, Command + Prompt를 선택한다.
기본 설정인, PowerShell에서는 실핼 때, 아나콘다 가상환경이 설정환경으로 변경이 되지 않았다.
다행히 기본 Command + Prompt 로 수행하면, 정상처리가 된다.
3) Ctrl + Shift + D를 누르고, "실행 및 디버그"에서 launch.json파일을 만들고,
기본 설정에 아래와 같이 env 설정을 추가한다.
4) F5(디버깅 시작) or Ctrl + F5(디버깅없이 시작)
그런데.... 매번 이러니까... 느림.....
# .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: 메인",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"PYTHONPATH": "${workspaceFolder}"
},
"justMyCode": true
}
]
}
3. Run Code, .... 수행 - F5 (Ctrl + Alt + D) 해결방법
2.번 방법은 수행이 느리고, pyCharm보다 왜 느릴까 하다가 다시 방법을 찾아봄.
Code Runner 를 깔면, py파일 우측 상단에 ▷화살표가 표시되는데, Run Code, Run Python File, ... 표시됨.
실행이 여기 저기 있다보니 햇갈림. Run Code 는 Code 터미널이 별도로 수행이 되고 있고, 환경을 잡아 주면 Code 수행 터미널에서 수행이 됨. 그래서 Run Code 환경을 추가함.
1, 2) 2.번의 1), 2) 까지는 동일함.
3) Ctrl + P를 누르면, setting.json 설정환경을 수정할 수 있습니다. setting.json에서 아래 아래 환경을 추가합니다.
아래 환경을 추가하면, terminal에서 작업폴더가 PYTHONPATH에 자동으로 추가됩니다.
그리고, 2.번 launch.json 파일의 PYTHONPATH 설정해도 됩니다.
다른 OS는 terminal.integrated.env.linux, terminal.integrated.env.osx 참조하세요.
"terminal.integrated.env.windows": {
"PYTHONPATH": "${workspaceFolder}"
}
4) Run Code 시, conda activate가 cmd 초기에 늦게 수행이 되서 처음에 오류나 발생해서, .vscode/settings.json파일을 만들고 기본 Command를 추가한 후 기본으로 설정함. (2.2) 번을 다시 변경함). 이렇게 하면 cmd 수행 시 바로 conda activate 가 되고, 수행을 한다.
# .vscode/setting.json
{
"terminal.integrated.profiles.windows": {
"Cmd-Conda": {
"path": ["cmd.exe"],
"args": ["/K","C:\\Users\\아이디\\Anaconda3\\Scripts\\activate.bat", "system_trading_py39_32"]
}
},
"terminal.integrated.defaultProfile.windows": "Cmd-Conda"
}
5) ▷화살표를 누르거나, Ctrl + Alt + N으로 수행한다. 런처보다는 빠르게 수행인된다.
ps. Run Code는 잘 되는데, Run Python File 수행은 오류가 발생... 아, 이건 그냥 "실행 및 디버그"로 수행하는 걸로.