1. Window Python 사용
Window에서 PS(PowerShell) or CMD에서 python치면 매번 , Microsoft Store의 Python 자동으로 실행이되어 제대로 동작이 안되는데,
이부분을 설정을 아래와 같이 변경해주자.
솔직히 Window에서는 Python을 잘 사용하고 싶지 않지만, 어쩔 수 없이 사용해야 하므로 아래와 같이 변경을 해주도록하자.
- 시작 -> 앱 실행 별칭 관리 (자동설치 메세지 끄기)
앱 실행별칭관리로 검색하면 쉽게 찾음
앱 설치 관리자(python)-> 끔 변경 우선 CMD 나 Power Shell 에서 python 을 치면, 설치하라고 자동 Message가 나오는데,
앱 실행 별칭관리에서 이를 끄자
만약, Window 용 Python으로 venv 형식으로 관리하고 싶다면, 아래 Mircrosoft 창에서 설치진행
Window에서 Python입력하면 Microsoft Store 창 열리는이유
1.1 Window Python 설치방법 및 종류
상위 Microsoft Store를 통해서 설치를 해도 되며, 아래의 사이트에서 직접 다운받아 설치를 진행해도 상관 없다.
- Python Site Download (현재 두가지로 제공)
- Embeddable Package : Window의 기본 PATH에 설정되지 않아 기본적으로 찾지 못함
- Installer Package : Window PATH가 설정되어 기본 Python 동작
상위에서 다시 32bit or 64bit version 나뉘어짐 (기본 64bit)
- Window Python 전체 설치방법
상위 사이트의 2개 와 이외에도 Window 10/11의 Microsoft Store도 설치가능하며, Window 경우는 Python 설치가 좀 복잡하다.
- Embeddable Package : Portable로 아무 위치에 설치하여 실행가능하지만, PATH는 본인이 설정해야하며 venv 처럼 독자적으로 운영가능
- Installer Package: Window 의 설치버전으로 Program File 에서 설치되어지며, 독자적으로 각각 사용하고자 하면, venv 이용
- Microsoft Store Package: Window 에서 제공하는 Microsoft Store 설치버전이며, 상위 Installer Package 와 PATH(주의)가 다르며 MS가 가장권장
- 이외 기타 방법: nuget.exe 설치방법, cywin기반 설치, WSL ubuntu 설치 등 생략!
Window에서 Python 사용하기
Microsoft Store에서 제공하는 Python도 존재확인
Nuget 설치방법
1.2 Embeddable Package for Window
Python Embeddable Package는 PATH 설정되어 있지 않아, 항상 Python을 찾지 못하므로 PATH를 설정하거나, 직접 python.exe를 찾아야 한다.
- Embeddable Package 압축해제 후 설정
처음 설치할 경우, Installer Package는 pip가 다 있으므로 괜찮지만, Embeddeable Package는 내부에 존재하지 않아 get-pip.py 를 이용하여 아래와 같이 pip를 설치진행
- get-pip pip 설치
- PATH 설정
- 설정완료 및 사용방법
설치방법 Manual
A. Embeddable Package (pip 설치방법)
- download get-pip.py
- PATH 설정 (옵션)
PS C:\User\jhlee > cd D:\Tools\python\python-3.9.13-embed-amd64
PS D:\Tools\python\python-3.9.13-embed-amd64> ./python ./get-pip.py //인터넷으로 download 후 저장한 후 (https://bootstrap.pypa.io/get-pip.py)
문제가 발생할 경우, 아래와 같이 임시적으로 PATH추가 (pip 못찾음)
//아래 둘중 하나 PATH 설정 앞으로 넣던가 or 뒤로 넣던가, 처음 한번만 아래에서 파일추가하고, 아래에서 파일에 추가 PS D:\Tools\python\python-3.9.13-embed-amd64> $Env:Path += ";D:\Tools\python\python-3.9.13-embed-amd64\Scripts" or PS D:\Tools\python\python-3.9.13-embed-amd64> $Env:Path = "D:\Tools\python\python-3.9.13-embed-amd64\Scripts;$Env:Path"
상위 설정한 후에 pip 설치되어진 것을 Scripts에서 확인가능하며, python.exe가 pip 찾도록 PATH를 수정해준다.
D:\Tools\python\python-3.9.13-embed-amd64\python39._pth 파일 수정
Embededable Python이 실행 될 경우,
아래와 같이 PATH추가하면, pip 설치된 package를 이곳에서 찾으며 아래와 같이 절대 PATH
python39.zip . D:\Tools\python\python-3.9.13-embed-amd64\Scripts D:\Tools\python\python-3.9.13-embed-amd64\Lib D:\Tools\python\python-3.9.13-embed-amd64\Lib\site-packages # Uncomment to run site.main() automatically #import site
- Lib/site-packages : Python Module들이 설치되어지는 장소
- pip 기반으로 설치하면 이 곳에 설치되어짐
- pip list 와 이름을 비교하여 찾으면 됨
- Scripts: 보통 Python Module or Package를 설치 할 경우, 실행되는 파일
- venv 의 activate도 이곳에 존재
- pip 이곳에 존재
- 이외 package 추가할 때마다 실행파일도 추가되어짐
참고자료 및 Data
C. Embeddable Package 사용방법
상위와 같이 설정 후 pip 기반으로 이외의 Python package 설치진행
사용방법은 PATH에 설정이 안되어있기에, PATH를 설정하고 사용하거나, 직접 절대 PATH로 이용하자.
- 사용방법-A PATH 설정 후 사용 (python.exe 찾기위해서)
Embeddable Package를 설치를 하면 항상 PATH 설정을 해야 하므로, bat or ps1으로 만들어두도록하자.
귀찮다면 아예 Window에서 시스템설정에서 변경을 해도 될 것 같은데, 이 부분은 나는 하고싶지가 않다.
PS D:\Tools> $Env:Path += ";D:\Tools\python\python-3.9.13-embed-amd64 //아래와 같이 python 찾기 위해 PATH추가 PS D:\Tools> $Env:Path += ";D:\Tools\python\python-3.9.13-embed-amd64\Scripts //아래와 같이 pip 찾기 위해 PATH추가 or PS D:\Tools> $Env:Path = "D:\Tools\python\python-3.9.13-embed-amd64;$Env:Path" PS D:\Tools> $Env:Path = "D:\Tools\python\python-3.9.13-embed-amd64\Scripts;$Env:Path"
상위 두개의 차이는 PATH의 위치 맨 뒤 or 맨 앞으로 간다.
- 사용방법-B python.exe 직접사용
상위 PATH 설정 필요 없이 python.exe를 찾을 경우, pip의 는 아래와 같이 사용.
PS D:\Tools> D:\Tools\python\python-3.9.13-embed-amd64\python.exe -m pip list PS D:\Tools> D:\Tools\python\python-3.9.13-embed-amd64\python.exe -m pip install package
단점이있는데, Window용이라서 제한적이라서 tk or tkinter의 경우는 Embeddable Package으로는 안되는 것 같다.
GUI를 사용할거면, Installer Package or Microsoft Sotre Package 을 사용하시길
Embeddeable 할 경우, Window Python의 tk/tkinter 문제
1.3 Installer Package for Window
Python Installer Package는 PATH 설정 자동설정되므로, Powershell을 실행할 경우, pip 와 python을 자동으로 찾는다.
그러므로, 가급적 virtualenv 즉, venv 기반으로 독자적으로 구축해서 사용하자
- 설치방법
- Add Python xx to PATH 선택 (PATH 추가)
- Optional Features
- pip/Document/ 기타 GUI?
- 설치사항 확인
설치전에 기존에 설치되어있는지 확인하자
설정->앱->설치된 앱
- 삭제방법
설정->앱->설치된 앱 (제거)
가능하다면 python -m venv py310_venv 이런식으로 virtualenv기반으로 사용하자
다만 주의 해야 할 것이 Python을 여러개 설치할 경우, PATH에 다 Python이 들어가므로, 좀 복잡해지며,
PATH를 나중에 직접 Control 할 경우도발생한다.
- Installer Version PATH
일반적으로 상위 Installer로 설치했을 경우, PATH이며 이를 알아두도록하자.
C:\Users\jhlee\AppData\Local\Programs\Python\Python38\python.exe
1.4 Microsoft Store Package for Window
Microsoft가 가장권하는 방식이며, 지금 좀 별로일지 몰라도, 나중에 점차 Power Shell 처럼 괜찮을 것 같음( Power Shell 지금도 수시로 변경됨)
Microsoft Store 안에도 Python을 제공하며, 자동으로 PATH 설정이 되어진다.
주의해야 할 것은 , 상위 Installer Package 중 둘 중 하나만 설치하자.
더불어, 역시 가급적 virtualenv 즉, venv 기반으로 독자적으로 구축해서 사용하자
Microsoft Windows Python 개발환경설정
- 설치방법(Microsoft에서 권장)
기본적으로 Microsoft가 권하는 방식이므로, Powershell에서 python 치면, 나온다.
기타 설정방법
- 시작-> 앱실행 별칭관리 (상위참조)
python.exe 끔 변경했다면, Power Shell에서 python.exe는 볼수가 없으므로, 이를 원상복귀하자.
이 설치와 설정과 같이 움직이므로 이 부분 다시확인
- 설치사항 확인
검색 -> Microsoft Sotre -> python 검색
현재설치되어짐 반드시 확인
or
설정->앱->설치된 앱
- PowerShell 설치확인 및 위치확인 (상위 Install Package도 동일)
PS C:\User\jhlee> gcm python // Linux 의 which command와 거의 동일
CommandType Name Version Source
----------- ---- ------- ------
Application python.exe 0.0.0.0 C:\Users\jhlee\AppData\Local\Microsoft\WindowsApps\python.exe
PS C:\User\jhlee> gcm pip
CommandType Name Version Source
----------- ---- ------- ------
Application pip.exe 0.0.0.0 C:\Users\jhlee\AppData\Local\Microsoft\WindowsApps\pip.exe
- PowerShell 에서 venv이용
PS C:\User\jhlee\test> pip install virtualenv // virtualevn 설치하여 venv 사용 PS C:\User\jhlee\test> python -m venv ../tool_py310_env // venv 설정 진행 (이름은 목적에 맞게기억하기쉽도록) PS C:\User\jhlee\test> ..\tool_py310_env\Scripts\Activate.ps1 // venv 활성화 (tool_py310_env) PS C:\User\jhlee\test> pip list // venv기반으로 이용 및 pip 설치확인 (tkinter 기본제공) (tool_py310_env) PS C:\User\jhlee\test> pip install -r requirement // venv기반으로 pip 설치
기본으로 Python Module을 lib/site-packages 에서 찾기 때문에 이 곳에 없으면 확장을 해주자.
venv 사용법
- 삭제방법
설정->앱->설치된 앱 (제거)
- Microsoft Store Version PATH
Python in Microsoft Store (상위 Installer Package PATH가 다름)
C:\Users\jhlee\AppData\Local\Microsoft\WindowsApps\python3.10.exe
1.5 Window 의 PATH 우선순위 변경
Python 종류가 여러개 설치되어 있다면, PATH 설정변경하여, 실행되는 Python 우선순위를 변경하자
너무 복잡하면, 가급적 지우는게 마음이 편하다.
나의 경우, 가급적 PATH에 추가하는 것 보다, 별도의 PATH 설정 Script를 만들어서 이를 확장해서 사용하는 것이 편하다.
- Window PATH 길이제한
- PYTHONPATH
실행중인 동안 sys.path 변수를 사용하여, 이 디렉토리에서 검색되어 모듈을 가져온다고 한다.
각 설치방식마다 조금씩 다르므로 주의
PS C:\User\jhlee\test> python // Python 실행 점검 .... >>> import sys >>> print (sys.path) // Python 실행해서 PATH확인, 보통 lib/site-packages 에 기본연결 >>> import tkinter >>> tkinter._test() // Python tkinter 동작확인
- Window의 PowerShell의 Path 설정법
Powershell에서 cd 혹은 tree 비롯하여 Linux에서 사용하는 command들이 되므로 각각 다 테스트를 해보도록 하자.
PS C:\User\jhlee> gcm python // Linux 의 which command와 거의 동일한 것 같다. CommandType Name Version Source ----------- ---- ------- ------ Application python.exe 3.8.101... C:\Users\jhlee\AppData\Local\Programs\... PS C:\Users\jhlee> $Env:userprofile //Window Userprofile 환경변수 (CMD으 경우 %userprofile%) C:\Users\jhlee PS C:\Users\jhlee> $env:Path // 현재 본인의 PATH를 확인 (CMD의 경우 %PATH% 이용 ) C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\PuTTY\;C:\Users\jhlee\AppData\Local\Programs\Python\Python38\Scripts\;C:\Users\jhlee\AppData\Local\Programs\Python\Python38\;C:\Users\jhlee\AppData\Local\Microsoft\WindowsApps;;C:\Users\jhlee\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\Bandizip\;C:\Program Files\LLVM\bin
아래와 같이 Embeddable 도 같이 추가
PS C:\Users\jhlee> $Env:Path += ";D:\Tools\python\python-3.9.13-embed-amd64" // PATH의 뒤에다 추가 (python 중복될 경우, 뒤에 추가했으므로, 우선순위가 낮다)
PS C:\Users\jhlee> $Env:Path = "D:\Tools\python\python-3.9.13-embed-amd64;$Env:Path" // PATH의 앞에다 추가 (python 중복될 경우, 뒤에 추가했으므로, 우선순위가 높다)
PS C:\Users\jhlee> $newtemp += "D:\Tools;" // Linux 처럼 Shell 변수사용 PS C:\Users\jhlee> echo $newtemp F:\Tools; PS C:\Users\jhlee> Set-Item -Path Env:Path -Value ( $newtemp + $Env:Path ) // PATH의 앞에다 추가
- Installer Version 과 Microsoft Sotre Version PATH가 꼬이는 경우
상위설명 했듯이 두개의 Version은 PATH가 다르며, 가급적 한개를 선택해서 사용하자
나의 경우, 기존에 설치된 Python을 지워서 해결했으나, 두개를 다 사용해야 하는 경우 발생한다면, PATH로 조절을 하자.
2. ESP32의 CMD 와 PowerShell 설정
ESP32의 경우 기본이 Python venv 기반으로 설치되어 있어, 이를 활성화 하려면, activate를 해줘야한다.
ESP-IDF를 설치했다면, 이 관련된 위치에서 아래와 같이 export를 이용하여 ESP-IDF 설정가능하다.
- ESP-IDF 설정
- venv activate
- export 개발환경
- ESP-IDF CMD로 실행할 경우
- ESP32 Python 의 venv를 activate (ESP-IDF 관련 Python venv로 설치되어짐)
- ESP-IDF export 진행
%userprofile%\.espressif\python_env\idf4.2_py3.8_env\Scripts\activate.bat %userprofile%\esp\esp-idf\export.bat
- ESP-IDF Powershell 실행할 경우
동일하지만, 상위보다 기능이 부족하게 지원이 되므로, 가급적 CMD로 사용추천
$Env:userprofile\.espressif\python_env\idf4.2_py3.8_env\Scripts\activate.ps1 $Env:userprofile\esp\esp-idf\export.ps1
- ESP-IDF PowerShell 실행확인
C:\Users\jhlee\.espressif\python_env\idf4.2_py3.8_env\Scripts\activate.ps1 //venv enable or $Env:userprofile\.espressif\python_env\idf4.2_py3.8_env\Scripts\activate.ps1 //venv enable 이지만 tab을 한번 눌러주면 상위로 변경 (idf4.2_py3.8_env) PS C:\Users\jhlee> (idf4.2_py3.8_env) PS C:\Users\jhlee> C:\Users\jhlee\esp\esp-idf\export.ps1 //ESP-IDF 환경 or (idf4.2_py3.8_env) PS C:\Users\jhlee> $Env:userprofile\esp\esp-idf\export.ps1 //ESP-IDF 환경, tab을 한번 눌러주면 상위로 변경
esp에서는 idf.py/esptool.py 이외 다양한 기능을 제공하는데, CMD/PowerShell에서 차이가 좀 있다.
2.1 ESP32 PowerShell 설정 변경방법
본인이 직접 PowerShell 환경을 좀 더 개선하고 싶다면, 아래와 같이 해보도록하자.
- ESP32 의 관련설정 문제사항
venv activate만 진행하면 path는 아래가 맨 앞으로만 추가되며 python만 지원되며
ESP32의 전체개발환경에서 필요한 것을 모두 지원해주지 못한다.
C:\Users\jhlee\.espressif\python_env\idf4.2_py3.8_env/Scripts;
- ESP32의 PowerShell export.ps1 확인
PS C:\xxx > cat C:\Users\jhlee\esp\esp-idf\export.ps1 Added to PATH ------------- C:\Users\jhlee\esp\esp-idf\components\esptool_py\esptool C:\Users\jhlee\esp\esp-idf\components\app_update C:\Users\jhlee\esp\esp-idf\components\espcoredump C:\Users\jhlee\esp\esp-idf\components\partition_table C:\Users\jhlee\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin C:\Users\jhlee\.espressif\tools\xtensa-esp32s2-elf\esp-2020r3-8.4.0\xtensa-esp32s2-elf\bin C:\Users\jhlee\.espressif\tools\esp32ulp-elf\2.28.51-esp-20191205\esp32ulp-elf-binutils\bin C:\Users\jhlee\.espressif\tools\esp32s2ulp-elf\2.28.51-esp-20191205\esp32s2ulp-elf-binutils\bin C:\Users\jhlee\.espressif\tools\cmake\3.16.4\bin C:\Users\jhlee\.espressif\tools\openocd-esp32\v0.10.0-esp32-20200709\openocd-esp32\bin C:\Users\jhlee\.espressif\tools\ninja\1.10.0\ C:\Users\jhlee\.espressif\tools\idf-exe\1.0.1\ C:\Users\jhlee\.espressif\tools\ccache\3.7\ C:\Users\jhlee\.espressif\tools\dfu-util\0.9\dfu-util-0.9-win64 C:\Users\jhlee\.espressif\python_env\idf4.2_py3.8_env\Scripts C:\Users\jhlee\esp\esp-idf\tools %PATH% Checking if Python packages are up to date... Python requirements from C:\Users\jhlee\esp\esp-idf\requirements.txt are satisfied. Done! You can now compile ESP-IDF projects. Go to the project directory and run: idf.py build
- Python export.ps1 대신 직접추가방식변경
추후 Powershell에서 변경할 일이 있다면 이 방식으로 하도록하자
$newtemp = "$Env:userprofile\esp\esp-idf\components\esptool_py\esptool;" $newtemp += "$Env:userprofile\esp\esp-idf\components\app_update;" $newtemp += "$Env:userprofile\esp\esp-idf\components\espcoredump;" $newtemp += "$Env:userprofile\esp\esp-idf\components\partition_table;" $newtemp += "$Env:userprofile\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin;" $newtemp += "$Env:userprofile\.espressif\tools\xtensa-esp32s2-elf\esp-2020r3-8.4.0\xtensa-esp32s2-elf\bin;" $newtemp += "$Env:userprofile\.espressif\tools\esp32ulp-elf\2.28.51-esp-20191205\esp32ulp-elf-binutils\bin;" $newtemp += "$Env:userprofile\.espressif\tools\esp32s2ulp-elf\2.28.51-esp-20191205\esp32s2ulp-elf-binutils\bin;" $newtemp += "$Env:userprofile\.espressif\tools\cmake\3.16.4\bin;" $newtemp += "$Env:userprofile\.espressif\tools\openocd-esp32\v0.10.0-esp32-20200709\openocd-esp32\bin;" $newtemp += "$Env:userprofile\.espressif\tools\ninja\1.10.0;" $newtemp += "$Env:userprofile\.espressif\tools\idf-exe\1.0.1;" $newtemp += "$Env:userprofile\.espressif\tools\ccache\3.7;" $newtemp += "$Env:userprofile\.espressif\tools\dfu-util\0.9\dfu-util-0.9-win64;" $newtemp += "$Env:userprofile\.espressif\python_env\idf4.2_py3.8_env\Scripts;" $newtemp += "$Env:userprofile\esp\esp-idf\tools;" $newtemp += "$Env:userprofile\.espressif\tools\idf-git\2.30.1\cmd;" echo $newtemp Set-Item -Path Env:Path -Value ( $newtemp + $Env:Path ) $Env:Path
pip 와 python은 상위 venv안에 Scripts에 있으므로 이부분만 PATH 넣으면 되는데, PATH 앞에 넣어야,
우선적으로 다른 Python 보다 먼저 실행되어진다.
- Python Path 설정
3. PowerShell 의 Linux Command 호환 및 세부설정
Linux에서 많이 사용되어지는 Command들이 Power Shell에서 이제 제공되어지므로 PowerShell Script에 넣어 작성하자.
다양한 Command들이 지원가능하며, 파이프를 비롯하여 기초적인것은 동작 되어진다.
Path로 \ 에서 / 로도 호환 동작 과 tee를 비롯하여, redirection도 지원가능하다.
주의해야 할 것은 옵션이 다르며, 사용법이 조금씩다르므로 주의하도록하며, 업그레이드 될때마다 이게 조금씩 변경되어진다. (주의)
설마 이전 버전하고 계속 호환성을 유지하겠지~
- Power Shell 에서 제공하는 Linux Command 의 예 (이외 기타등등)
- ls
- cat
- tee
- echo ( write-host를 좀 더 권장)
- cp
- rm
- findstr (grep 대신)
- mkdir
- cd
- tar
- ....
- Pipe 기본사용 및 Tee 사용방법
- ls | findstr README*
- cat ./build.bat
- cat ./build.bat | tee log.txt
- tar -cvf test.tar test0.txt text1.text
Linux만큼 Pipe 기반으로 tee를 이용하여 잘 동작이 안되어지는 것 같다. 점차 나아지겠지~
- Window Power Shell Script 사용법
재미있는 것은 MS에서도 PS(Power Shell)을 Linux 의 Shell 처럼 비슷하게 지원해주려고 하고 있다.
(혹시나 해서 , Linux Command 여러번 사용하는데, 의외로 많이 지원해준다)
- PowerShell 의 Terminal 색상조절
Power Shell에서 아래의 색상조절이 안되어서 다른 곳에서 방법을 찾았다.
다만 Power Shell에서 echo 명령어로는 아무리 해봐도 색상조절 되지 않는 것 같다.
PS C:\xxx > write-host "hello world" -foregroundcolor "red" hello world PS C:\xxx > write-host "hello world" -foregroundcolor "yellow" //-ForegroundColor $fgcolor -BackgroundColor $bgcolor hello world PS C:\xxx > $colors = [enum]::GetValues([System.ConsoleColor]) //지원되는 Color 및 색상비교를 해볼수 있어 너무 좋다 (Linux 처럼 소리도 되는 지는 추후) Foreach ($bgcolor in $colors){ Foreach ($fgcolor in $colors) { Write-Host "$fgcolor|" -ForegroundColor $fgcolor -BackgroundColor $bgcolor -NoNewLine } Write-Host " on $bgcolor" }
PowerShell Terminal Color
- PowerShell 의 Redirection 정보
Linux 처럼 Rediection이 가능하지만 조금 정보가 다른 것 같다. (e.g. 1> , 2>>)
- Power Shell Script Function
Function 기능도 제공하므로 좀 복잡하게 구성하고자 할경우 사용하자
- PowerShell 관련 전체 Manual
아래에서 전체 Manual을 한번 보도록 하자
Cmdlet 이 중요한 것 같은데, 아직 개념을 잘 모르겠으며, 원격기능도 제공해준다.
나의 경우, Bash와 공통분모를 찾아 관련부분만 넣어 사용하려고 한다.