개인적으로 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 를 누른다. 



* Regular Expression Online 사이트
  자바스크립트나 파이썬 등에서 Regular Expression 을 이용해서 검색하거나 값을 추출 할 때 여러 테스트를 해가면서 테스트 하기 좋은 방법이다. 
Regular Expression Online이라고 구글에서 검색해서 찾아보자.

* json online parser 사이트
 JSON 형태의 데이터를 한 줄 한 줄 볼 수 있어 좋다. 
 json online parser 라고 구글에서 검색해서 찾아보자

* base64 decode online 사이트
 base 인코딩, 디코딩을 바로 확인 할 수 있다. 

* https://jsfiddle.net/
  이 사이트는 사이트 주소를 직접 넣었다. 그 만큼 이 사이트 자체가 좀 강력하다. javascript , html, css 를 테스트 해보기 좋은 사이트다. 다만 IE에서 안된다.

* https://caniuse.com/
 이 사이트는 특정 브라우저에서 해당 기능이 동작하는지 확인하는 용도로 많이 사용한다. 내 경우에서는 굳이 이사이트 들어와서 찾지 않고,  구글에서 can i use websocket  이런 식으로 검색하고 이 사이트가 맨 처음 나온다. 

vscode 로 msvc 2017 로 빌드하는 환경을 구축했다. 이게 의외로 좀 어려워서 아래에 정리한다. 참고한 문서는 https://code.visualstudio.com/docs/cpp/config-msvc이다. 

기본 환경 : 당연한 Visual  Visual Studio 2017 이 설치되어야 한다. 내 경우는 community 버전이다.
vscode 의 경우 확장 Microsoft C/C++ extension 이 설치되어야 한다. ( https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools )

1. batch 파일로 vscode 여는 환경 구축
 visual studio 컴파일러 동작시 여러 환경 변수가 설정되어야 한다. (참고 : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-options/how-to-set-environment-variables-for-the-visual-studio-command-line) 이 것을 쉽게 batch 파일로 할 수 있다. 이 파일이 VsDevCmd.bat 이라는 파일이다. 내 경우에는 이 파일이 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat 에 존재한다. 이 것은 각자 Visual Studio 2017  경로에 따라 다르거나 community 버전 인지 일반 구매 버전인지에 따라 다를 수 있다. 이 파일을 실행하고 나서 vscode 를 실행해야 한다. 이게 프로그램을 실행할 때마다 이렇게 한다는게 참 귀찮다. 따라서 이 것을 미리 batch 파일로 만들어 두면 편한다. 
 내 경우 아래와 같이 만들어 두었다.

call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"  -arch=x64
D:
cd D:\workspace\vscode2\hello_world
code .

-arch=x64 는 64bit 로 환경 설정하기 위해 설정되었다. 이 배치 파일이 C 드라이버이기 때문에 D에 접속 하려는  D: 이라고 필요하다. 그냥 cd 를 하면 접근할 수 없다.  code .  이라는 코드가 vscode 를 현재 디렉토리를 working directory 로 실행하는 명령어 이다. 당연이 hello_world 는 미리 폴더가 만들어 져야 한다.

2. helloworld.cpp
컴파일 하려는 파일은 helloworld.cpo 파일이다.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{

    vector<string> msg {"Hello", "C++", "World", "from", "VS Code!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}



3. vscode 빌드 환경 구축
프로젝트 디렉토리 안의 .vscode 내에 프로젝트별 환경을 설정할 수 있다. 설정해야 하는 파일은 아래와 같다. 

.vscode\c_cpp_properties.json  (compiler path and IntelliSense settings)

{
    "configurations": [
      {
        "name": "Win32",
        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
        "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
        "windowsSdkVersion": "10.0.17763.0",
        "intelliSenseMode": "msvc-x64",
        "cStandard": "c11",
        "cppStandard": "c++17"
      }
    ],
    "version": 4
  }

 

.vscode\tasks.json (build instructions) (실제로 build 하는 command 이다. )

{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "msvc build",
        "type": "shell",
        "command": "cl.exe",
        "args": ["/EHsc", "/Zi", "/Fe:", "helloworld.exe", "helloworld.cpp"],
        "group": {
          "kind": "build",
          "isDefault": true
        },
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": "$msCompile"
      }
    ]
  }


.vscode\launch.json (debugger settings)

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(msvc) Launch",
        "type": "cppvsdbg",
        "request": "launch",
        "program": "${workspaceFolder}/helloworld.exe",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false
      }
    ]
  }

 

4. 빌드하기
빌드를 하려는 위에서 설정한 tasks.json 의 msvc build 를 실행하면 된다. vscode 에서 task 를 실행하는 방법은 ctrl + shift + p  를 누르면 아래와 같은 창이 뜬다. 이 중 "작업: 빌드 작업 실행"을 선택하면 된다. 

여기에서는 가장 첫번째 항목이다.

혹시 이 다음에도 추가로 선택해야 하는 화면이 있다면 cl.exe 를 선택하기 바란다. 

4-1. 빌드 하다가 에러가 발생한다면 보통 batch 파일 설정이 잘못된 것이라는 의심이 든다. 특히 include 경로가 없다고 에러가 발생한다면 더더욱 해당 case 가 의심스럽다.
4-2. cl.exe 가 동작하다가 없다고 에러가 발생했다면 batch 파일 환경에서 cl.exe 가 실행되는지 확인 하기 바란다.

5. 단축키 설정하기
빌드 하는 환경이 단축키가 없어서 너무 불편하다. 이 경우에는 단축키를 설정하도록 한다. vscode 에서 단축키는 프로젝트 별로 설정하는 방법이 없다면 전체 단축키를 설정해야 한다. 
파일 -> 기본설정 -> 바로가기 키  를 누르면 설정할 수 있다. workbench.action.tasks.runTask 를 선택한 후 단축키를 설정할 수 있다. 해당 항목을 더블클릭하고 원하는 대로 단축키를 입력하면 설정할 수 있다. 내 경우에는 ctrl+alt+b  로 설정했다. 이 때 아래 그림에서 붉은 색 부분을 클릭하면 json 으로 수정할 수 있다.

keybindings.json 파일로 프로그램 전체 단축키이다. 

이 때 단순히 task 의 실행뿐만 아니라 task 중에서 특정 task 를 지정해서 실행할 수 있다. 

// 키 바인딩을 이 파일에 넣어서 기본값 재정의auto[]
[
    {
        "key": "ctrl+alt+b",
        "command": "workbench.action.tasks.runTask",
        "args": "msvc build"
    }
]

args 이름이 중요한데, 이 이름으 "msvc build" 로 되어 있다. 위에서 tasks.json 의 label 을 선택할 수 있다. 이 방식을 잘 활용하면 빌드 clean 이라는 task 를 만들고, 단축키로 buld clean 을 만들 수도 있다. 

6. 디버깅 하기
위에서 이미 launch.json 파일을 만들었기 때문에 단축키 F5 를 눌러서 하면된다.



몇가지 추가 설정이 필요할 것 같다. 뭔가 release 버전으로 build 한다던지, 임시파일이나 실행파일이 따로 output 폴더로 지정되어야 한다든지의 작업이 추가로 설정이 필요할 것 같다. 어쩌면 좀 복잡한 프로그램은 그냥, Visual Studio 를 사용하는게 답일지도 모르겠다. gcc 를 이용한 경우 vscode 가 이점이 있을 것 같은데, msvc 라면 그냥 visual studio 가 더 편할 것 같다.