개인적으로 eclipse + pydev 환경을 가장 선호하지만 가벼운 환경으로 세팅하기 위해서는 vscode 에서 개발환경을 구축하는 것도 꽤 괜찮다고 생각한다. (회사에서는 아주 오래전 부터 eclipse + pydev 를 사용해서 flask 로 개발하고 있다. )
vscode 를 이용해서 파이썬 환경을 세팅할 때마다 순서를 잊어버려 블로그에 정리한다.
세팅하는 환경 기준은 windows 10, python3.7.4, vscode March 2020 (version 1.44) 이다.
virtualenv환경설정
- cmd 로 콘솔창을 열고 가상 환경을 만들고 싶은 곳으로 이동한다.
cd C:\tools\python37_64\py_envs
- 파이썬 실행파일 fullpath 를 이용해 vtest 라는 가상환경을 생성한다.
C:\tools\python36_64\python.exe -m venv ./vtest
- 가상환경 실행
.\vtest\Scripts\activate.bat
- pip 업데이트
python -m pip install --upgrade pip
- pylint 설치
pip install pylint
- pytest 설치
pip install pytest
VSCODE 설정
-
vscode 에서 필요한 확장 프로그램
-
settings.json 설정
- python.pythonPath 경로대로 virtualenv 를 설정하기 위해서는 ctrl+shitf+P 를 누른 후, python select interprenter 를 선택한 후 해당 경로대로 python 을 선택하면 된다. python.pythonPath 를 넣지않고 하면 해당 경로 자체가 뜨지 않는다.
{
// virtualenv 내 파이썬 경로
"python.pythonPath": "C:\\tools\\python37_64\\py_envs\\vtest\\Scripts\\python.exe",
// vurtalenv 경로
"python.venvPath": "C:\\tools\\python37_64\\py_envs\\vtest",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
// which 나 where 를 이용해서 실제 pylint 경로를 찾는다.
"python.linting.pylintPath": "C:\\tools\\python37_64\\py_envs\\vtest\\Scripts\\pylint.exe",
// python code lint 옵션
// 해당 경로를 .vscode 폴더내 파일로 잡는다.
"python.linting.pylintArgs": [
"--rcfile",
"${workspaceRoot}\\.vscode\\pylint.config"
],
// vscode testing 옵션
"python.testing.pytestArgs": [
".","-s"
],
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false
}
- pylint.config
- 위 파일에서 "python.linting.pylintArgs" 을 설정한 경로가 이 파일이다.
[MESSAGES CONTROL]
#C0111 Missing docstring
#C0103 Invalid constant name
#C0301 Line too long
#C0303 trailing whitespace
#C0325:Unnecessary parens after u'print' keyword
#W0621 : Redefining name 'something' from outer scope (line #)
#W0212 : Access to a protected member %s of a client class
#W0703 : Catching too general exception Exception
disable=C0111,C0103,C0303,C0301,C0325,W0621,W0212,W0703
- launch.json
- run 과 debug 할 때의 환경 설정
{
// IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
// 기존 특성에 대한 설명을 보려면 가리킵니다.
// 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
"version": "0.2.0",
"configurations": [
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
},
{
"name": "Integrated Terminal/Console",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "",
"console": "integratedTerminal",
"env": {},
"envFile": "${workspaceRoot}/.env",
},
]
}
샘플코드
- main.py
def hello(world):
# 아래 aa 변수 pylint 에러발생, Unused variable 'aa'pylint(unused-variable)
aa = 1
print("Hello " + world)
if __name__ == "__main__":
hello("world")
# 아래 줄에 빈 엔터가 없으면 Final newline missingpylint(missing-final-newline)
pylint 가 정상 동작한다면 물결표의 error, warning 표시가 발생해야 한다.
정상적으로 launch.json 가 적용되면 디버깅 또는 실행탭에서 Python 으로 선택해서 실행하면 정상적으로 Hello world 가 출력된다.
- tests/test_main.py(pytest 용, 경로명과 파일이름과 method 명에 test 가 꼭 들어가야 한다. )
# clac/__init__.py 내용이 없기 파일만 존재
# calc/func.py
def add(a, b):
return a+b
# tests/test_main.py
import sys
import os
myPath = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, myPath + '/../')
from clac.func import add
def test_add():
assert add(1, 2) == 3
ctrl+shitf+P 를 누른 후 Python Debug All Test 선택 하면 테스트가 됨, 아니면 화면 하단 Run Tests 를 누른다.