개발환경 : 코드를 작성할 때나 실행할 때 영향을 주는 요소들
1. 운영체제
2. 텍스트 에디터나 IDE
3. 특정 언어 버전
4. 프레임워크, 라이브러리, 패키지 + 버전
5. 컴퓨터 사양

동료에게 공유할때 개발환경 일치시켜서 보내야하고,
때로는 내가 하는 여러 프로젝트마다 개발환경을 다르게 해서 작업해야할 수도 있다.
파이썬 환경 : 파이썬 버전 + 파이쎤 패키지
IDE 없이 파이썬 실행시키기
1. PowerShell에서 원하는 위치로 가서,
2. 새로 subl 파일 만들고,
3. 켜지는 subl에 파이썬 코드 넣고 저장,
4. 다시 PowerShell에서 phython 커멘드로 해당 subl을 불러오면 아래에 실행됨

python 인터렉티브 모드 =반응형 모드
파이썬 파일을 별도로 만들지 않고 PowerShell에서 바로 파이썬을 줄단위로 실행시키는 방법
python만 프롬프트에 쓰고 엔터하면 실행됨
특징: print를 넣지 않아도 값을 보여줌
for, if처럼 여러 줄로 만들어지는 코드도 가능. 다음 내려가는 줄로 엔터하면 ...가 나온다. 진짜 for나 if문을 종료하고 싶을때는 ...에서 아무 코드 넣지 않고 한번더 엔터하면 값이 나옴.
인터렉티브를 종료하는 방법은 quit()를 넣으면 됨. 단, 다시 인터렉티브 모드를 실행시켰을때 이전 기록이 살아있지 않음!!
큰 프로젝트보다 작은 단위 코드를 실험해볼때 좋음.

파이썬 인터프리터
파이썬 인터프리터란 파이썬 코드를 머신코드로 통역해주는 프로그램.
파이썬 언어와 파이썬 인터프리터는 각각, 그리고 합쳐서 그냥 파이썬이라고 부른다.
파이썬 인터프리터는 코드를 위에서 아래로 한줄씩 번역시켜주고, 실행까지 해준다.

파이썬 인터프리터 안에서 실제로 일어나는 일
hello_world.py 라는 파일에 print('Hello World') 라는 코드가 있고, 실행시킨다고 하겠습니다.사실 파이썬 인터프리터는 코드를 바로 머신 코드로 바꾸지 않고요. 먼저 코드 전체를 bytecode라는 머신 코드와는 다른 중간 단계의 코드로 바꿔줍니다. 이 단계를 컴파일이라고 표현하기도 하는데요. 이렇게 해서 바뀐 코드는 파일 이름 뒤에 .pyc 확장자 명이 붙고 (hello_world.pyc 나 유사한 형식), pycache라는 폴더에 저장됩니다. 이때 문법 확인 등 단순 검사를 통과하지 못하면 오류가 나고 bytecode가 만들어지지 않습니다.
그 다음에 인터프리터 안에 있는 파이썬 가상 머신(pvm/python virtual machine)이란 하위 프로그램이 파이썬 코드가 아니라 이 bytecode를 한 줄씩 보며, 머신 코드로 다시 바꿔줍니다. 한 줄을 바꿀 때마다 바로바로 실행시키죠.
위 코드에 대한 bytecode를 풀어서 보여드리면 이렇게 되는데요. 파이썬 가상 머신이 이해할 수 있는, 조금 더 머신 코드에 가까운 형태입니다. (실제로는 사람이 읽을 수 없는 형태로 저장됩니다)
컴파일러 vs 인터프리터
프로그래밍 언어들은 흔히 두 가지로 분류합니다. 컴파일러 언어와 인터프리터 언어인데요.
파이썬은 인터프리터 언어입니다.
컴파일러 언어들은 코드를 바로 컴퓨터가 이해할 수 있는 머신 코드로 '번역'합니다. 코드 전체를 다른 언어로 바꾸는 걸 컴파일이라고 부르죠. 그리고 이렇게 컴파일된 코드를 미리 만들어놓으면 이것만 사용해서 프로그램을 돌릴 수 있습니다. 가장 대표적인 컴파일러 언어가 C와 C++ 같은 언어입니다.
인터프리터 언어들은 컴퓨터가 바로 이해할 수 있는 실행 코드를 만드는 게 아니라, 중간 매개체, 인터프리터를 사용해서 코드를 '통역'합니다. 파이썬에서는 파이썬 가상 머신이 이 역할을 합니다.
사실 파이썬의 경우 컴파일러와 인터프리터의 특징을 어느 정도씩 다 갖고 있습니다. 위에서 얘기했듯이 파이썬은 먼저 코드를 bytecode로 컴파일합니다. 하지만 이 파일은 머신 코드가 아니죠. 이 중간 단계의 코드를 파이썬 가상 머신이 한 줄씩 머신 코드로 통역해서 실행시킵니다. 단계가 두 개로 나눠지긴 하지만, 저희가 파이썬 코드 실행시킬 때는 한 단계처럼 느껴집니다.
컴파일러 언어들은 컴파일 하는 단계와 컴파일된 파일을 따로 실행시키는 단계, 두 개로 나눠져있고 인터프리터 언어들은 보통 한 단계로 코드를 실행할 수 있습니다.
일반적으로 컴파일러 언어로 작성한 코드들이 더 빠르게 실행이 됩니다. 컴파일러 언어들은 이미 컴퓨터가 바로 이해할 수 있는 실행 파일을 만들어주기 때문이죠. 비유를 하자면 영어로 된 글을 한글로 바꿔서 읽을 때 이미 한글로 번역된 글을 읽는 거랑, 영어로된 글을 한 줄씩 한글로 통역해가며 읽는 거랑 글을 읽는 속도가 차이가 날 수밖에 없겠죠?
프로그래밍 언어를 항상 컴파일러나 인터프리터 언어로 항상 나눠야 되거나 엄청 명확하게 나눠지는 건 아닙니다. 하지만 굳이 나눌 때는 코드를 실행시킬 때, 이미 머신 코드로 컴파일된 파일을 그대로 사용/실행 할 수 있으면 컴파일러 언어, 실행시키는 와중에 줄 단위로 한 번 더 머신 코드로 바꿔야 하면 인터프리터 언어라고 하죠.
PEP = Python Enhancement Proposal = 개발자들이 파이썬에서 개선하고 싶은 것을 담아 올리는 파이썬 개선 제안 문서. 파이썬 핵심 개발자들이 이를 보고 어떤 것을 개선할지 논의한다.
python major.minor.micro 파이썬 버전 표기법 및 구분
예) python 3.8.2
major 버전 : 이전 버전과 호환이 안맞을 정도로 큰 변화, 가장 최신 major를 써야함
minor 버전: 새로운 기능이 더해진 버전으로, 이전 버전의 코드를 가져와서 최신 minor 버전에서 실행해도 대부분 오류 없이 실행된다. 주로 1년에 한번 출시
micro 버전: 버그를 수정해서 출시. 가장 최신 micro 버전 사용 권장. 주로 2달에 한번 출시
즉, 권장되는 버전은 : major = 가장 최신 / minor =가장 최신에서 한버전 낮게 / micro = minor에서 가장 최신
새로운 버전의 파이썬을 사용하려면 새로운 버전의 인터프리터를 사용해야함
파이썬에서 버전 확인하는 방법

다양한 버전의 파이썬 다운로드 하기
https://www.python.org/downloads/windows/
여기서 원하는 버전을 다운로드 및 설치
설치시 Add Python (버전) to PATH 라는 선택지에 선택해야 powershell에서 가장 최신에 설치한 버전으로 자동 적용됨

지금 사용하고 있는 minor 버전의 micro 보다 더 낮은 micro버전을 다운받으려고 하면 오류남
컴퓨터가 파이썬 인터프리터를 찾는 법
PATH : 컴퓨터가 커멘드에 해당하는 프로그램들을 검색하는 경로들로 문자열로 변수를 사용한다. python이라는 프로그램을 path에서 찾을 땐 같은 이름의 python들 중 가장 왼쪽에 있는 디렉토리를 선택하게 된다. python 인터프리터를 다운로드할 때 Add to Python PATH를 선택하면 지금 설치한 버전이 자동으로 적용되는 이유도 PATH에서 가장 왼쪽에 위치시키기 때문.

Path을 찾아보면 아래와 같고 이를 도식화하면 아래와 같다. 첫번째 숫자는 macro-micro버전을, 뒤의 숫자는 몇 바이트의 다운로드 파일인지를 말해준다.


해당 PATH의 디렉토리를 하나 열어서 리스트를 보면 아래와 같은데 python의 확장명은 exe. = 윈도우에서 실행할 수 있다는 뜻이고. python과 항상 따라다니는 script는 파이썬 인터프리터와 관련된 프로그램들이 저장된다.

설치된 다른 버전의 파이썬 인터프리터 사용하기
1. 제어판>시스템>시스템 환경 변수 편집
2. 시스템 속성 > 고급 > 제일 하단 환경변수
3. 환경변수들 중 Path를 파란색으로 선택 > 편집
4. 사용하고 싶은 버전을 찾는다. python.exe와 script 2개가 있다. 둘다 제일 위로 올린다.
5. 확인 확인 확인
6. power shell에서 확인하기

어떤 경로에 있는 파이썬을 사용하는지 보고 싶으면
gcm = get commend 사용
gcm python | fl > 실행

패키지 다운로드는 pip에서!
IDE없이 pip 사용하기
pip의 버전을 확인하는 방법 & 최신 버전으로 업그래이드 하는 방법

pip으로 패키지 다운로드하는 방법 & pip에 깔린 모든 패키지 확인하는 방법

(패키지 이름 뒤에 ==1.1.1 버전을 써주면 해당 버전으로 다운됨)
pip으로 패키지 삭제하기

파이썬 인터프리터와 pip의 구조


파이썬 인터렉트 모드에서 어떤 site package를 사용하는지 알아보기

파이썬 버전 바꿀때 주의: path에서 두가지 \Python312\python.exe와 \Python312\Scripts\pip.exe 모두 순서를 올려줘야함
A버전 파이썬을 사용할때 다운로드된 패키지는 해당 버전 Script 폴더에 저장되기에 B버전으로 전환했을때 이미 다운로드 패키지를 다시 다운로드해야한다!
그러므로 A버전, B버전 디렉토리 마다 각각 별도의 환경인 것이다
그리고 A, B, C... 다양한 버전으로 구성된 한 컴퓨터 안의 전체 파이썬 환경을 "글로벌 환경"이라고 부른다

py는 각 파이썬 버전 디렉토리에 저장된 인터프리터가 아니라, 파이썬 론쳐 (python launcher) 라는 프로그램입니다. 파이썬 인터프리터, 지금 같은 경우 각 파이썬 버전 경로에 있는 python.exe 파일을 PATH를 통해서가 아니라 직접 찾아서 실행시켜주는 프로그램이죠. 윈도우즈 인스톨러를 사용해서 파이썬을 다운받으면 자동으로 같이 설치됩니다. 윈도우즈 파이썬 론처(py)는 윈도우즈 환경에서만 사용할 수 있다.
py 커맨드는 PATH의 가장 앞에 있는 인터프리터가 아닌, 가장 "적합한" 파이썬 인터프리터를 찾아서 실행시킵니다. 기본적으로는 py 가 컴퓨터에서 찾을 수 있는 인터프리터 중 가장 높은 버전이 사용되죠.
py커맨드 뒤에 파일을 넘겨서 실행시키면 되고요. 인터렉티브 모드를 실행키시고 싶을 때는 파일 이름을 따로 넘기지 않고 그냥 py 커맨드를 실행시키면 됩니다.
py 커맨드는 PATH 변수를 통해 파이썬 인터프리터를 탐색하지 않기 때문에 파이썬 인스톨러를 설치할 때 PATH에 추가하지 않아도 됩니다.사실 PATH를 직접 수정하는 건 생각보다 위험한 작업일 수도 있는데요. 저희는 그냥 뭘 추가하고, 순서를 바꿔주기만 했잖아요? 근데 실수로 굉장히 중요하고 핵심적인 경로를 PATH에서 지우고 이걸 다시 추가하는 방법을 모른다면 전에 사용했던 중요한 커맨드들을 더 이상 사용할 수 없게 되겠죠? py 를 사용하면 이런 위험성을 배제할 수 있습니다.
py 사용하기

py로 특정 파이썬 버전 가져오기 & py로 가져올 수 있는 모든 버전 확인하기

py로 pip 사용하기
py 커맨드를 사용하면 pip 을 커맨드로 사용할 수 없습니다. py 커맨드가 사용하는 인터프리터와, pip 커맨드에 연결된 인터프리터가 서로 다를 수 있기 때문이죠. 항상 py 커맨드 인터프리터의 pip 을 사용하고 싶을 때는 이렇게 -m 을 통해서 해야됩니다.

조금 응용하면 특정 파이썬 버전 인터프리터의 pip을 특정지어서 사용할 수도 있습니다.
py -3.7 -m pip list
글로벌 환경을 사용하는 건 권장하지 않는다
이유 1: 여러 프로젝트 a, b, c에서 서로 다른 패키지들을 사용하는데, 어떤 프로젝트에 어떤 패키지가 사용했는지 알기 어려워진다. 일을 하다보면 동료가 a프로젝트에 사용한 패키지 공유해줘! 라고 할 수 없는데 이럴때 불편!
이유 2: 패키지는 하나의 환경에서 하나의 버전만 설치할 수 있는데, 프로젝트별로 사용하는 패키지의 버전이 다를 경우...!!
가장 이상적인 파이썬 사용법은, 한 프로젝트마다 하나의 분리된 환경을 사용해 이를 동료들과 공유하는 것이다
이렇게 프로젝트별로 고립시켜 만드는 환경을 "가상환경"이라고 한다
프로젝트별마다 하나의 환경 폴더를 만들고, 그 안에 파이썬 인터프리터, pip, site-packages 디렉토리를 만들어 관리한다. 그리고 프로젝트마다 해당 파이썬 환경의 path 순서를 앞으로 가져와서 사용하는 것! 이걸 직접하진 않고 가상환경 관리 도구들을 사용한다.
virtualelnv : 전세계 50%가 사용하는 가상환경도구 사용하기
1. 설치하기

가상환경 프로젝트 디렉토리 만들기 #아래는 바탕화면에 폴더를 만든 커멘드

해당 디렉토리에서 가상환경 만들기
1) virtualenv --python=(사용하고자하는 버전의 path) (프로젝트의 가상환경 명)
이때 글로벌환경에 설치된 버전만 사용할 수 있고, 특정 버전 path를 넣지 않으면 현재 기본으로 사용되는 버전으로 만들어진다. 가상환경명은 주로 프로젝트명 뒤에 _env 넣기 추천!
2) start. 를 누르면 프로젝트 디렉토리가 열리며 가상환경을 위한 디렉토리들과 패키지들이 잘 설치된 것을 확인할 수 있다. 여기서 특이한 점은, python.exe(인터프리터)가 Scripts에 들어있다! pip도 Scripts에 있고, 패키지들은 Lib에 저장되어있다!

글로벌환경이 아닌 가상환경 인터프리터를 사용하라고 컴퓨터에 명령하기
가상환경 인터프리터를 실행시키는 코드는 Script 안의 Activate에 있음. 이를 실행시켜주면 된다. 단, 이때 권한이슈로 에러가 뜰 수 있어서 이를 해결해야한다. (Set-ExecutionPolicy Unrestricted -Scope Process)

가상환경으로 작동되게 되면 프롬프트 앞 ()에 가상환경 디렉토리 이름이 적히게 된다!!

pip으로 가상환경 내 패키지들 설치하기
(항상 그 전에 pip 가장 최신화 : pip install --upgrade pip)

다 쓰고 이 가상환경에서 나가는 방법: deactivate

가상환경 삭제하기
python -m venv data_science_env
가상환경 공유하기
1) 가상환경을 공유해주는 개발자 입장
- pip freeze는 list와 다르게 기본 패키지를 제외하고 사용자가 직접 설치한 패키지와 그 버전을 정리해준다.
- pip freeze를 requirement.txt로 만들어서 공유하는게 파이썬 개발자들의 국룰!

2) 가상환경을 공유받은 개발자 입장
- requirements.txt를 프로젝트 디렉토리에 두고, pip install -r .\requirements.txt 를 실행하면 해당 텍스트 파일에 저장된 패키지들이 모두 자동으로 설치됨

env 폴더 자체를 공유하는 방법도 있지만... 파이썬 패키지 용량들이 어마어마하게 크기때문에 매우 비효율적이다.
파이참에서 가상환경 만들기
file > New Project > Interpreter type > Custome enviroment

가장 위에 Location에서는 프로젝트 디렉토리 경로를 설정할 수 있습니다. 파이참은 기본적으로 모든 프로젝트를 ~/PycharmProjects/에 저장하기 때문에 특별히 다른 경로에 프로젝트를 만들고 싶지 않는 이상 그냥 하이라이트 된 부분의 이름에 프로젝트 이름을 입력하시면 됩니다.
Python Interpreter: 라는 섹션이 있는데요. 바로 여기서 프로젝트를 만들 때마다 그 프로젝트를 위한 가상 환경을 만들 수 있습니다. 프로젝트만의 새로운 가상 환경을 만들어서 사용하고 싶으면 New environment using을 선택하시면 되고요. 이미 컴퓨터에 있는 다른 가상 환경을 그냥 가지고 와서 사용하고 싶으시면 Previously configured interpreter를 선택하시면 됩니다.
저희가 이번 토픽에서 배운 Virtualenv뿐만 아니라, Pipenv, 그리고 Conda를 사용해서 가상 환경을 만들 수 있습니다.
Location이 있는데요. 여기서 가상 환경 디렉토리의 경로를 설정할 수 있습니다. 따로 설정하지 않으면 프로젝트 디렉토리 안에 venv라는 이름의 가상 환경이 생성됩니다. 이걸 바꾸고 싶으시면 클릭하신 후 이름 또는 경로를 수정할 수 있습니다.
Base Python은 이 가상환경에서 쓰고 싶은 파이썬 버전을 선택해주면 됩니다.
선택사항 2개:
Inherhit global site-packages를 선택하면 새로운 가상 환경에서 Base Python 인터프리터에 연결된 pip으로 설치된 패지키들을 모두 복사해서 새로운 가상 환경에 추가해줍니다.
Make available to all projects를 선택하면 다른 프로젝트에서 이제 만들 새로운 가상 환경을 사용할 수 있게 만들어줍니다.
Create a main.py welcome script 선택하고 만들기!
파이참에서 만든 가상환경 확인하기
좌측 하단의 Terminal 기능으로 echo env:$PATH, gcm python | fl , gcm pip | fl 실행해서 각각이 경로 위치가 가상환경 안 인것을 확인!

Terminal에서 원하는 패키지들 설치하고 작업 시작!
프로젝트 진행 도중에 가상 환경 만들기/바꾸기
File >Setting > Project: projectName> Python Interpreter > Add interpreter에서 새로운 가상환경 만들어주기. 다만 Location은 이미 사용하고 있는 가상 환경과는 다른 경로로 만들어주세요.

만든 후 Settings —> Project: projectName —> Python Interpreter에서 사용하는 인터프리터를 venv_2 가상 환경의 인터프리터로 바꿔줍니다.
단에 ok를 클릭하면 프로젝트 내에서 사용하는 가상 환경이 바뀝니다. echo env:$PATH, gcm python | fl 를 실행시키면 사용하는 파이썬 인터프리터가 바뀐 걸 확인할 수 있습니다.
필수는 아니지만 더 이상 전에 사용하던 venv 가상 환경을 사용하지 않을 거기 때문에 지워주시는 게 좋습니다.