새로운 QT 프로젝트를 깨끗하게 시작하려고 python의 virtual environment를 찾아보다가 카오스에 빠져버렸다. 대부분 Linux나 Mac의 쉘 환경을 기반으로 설명하고 그 환경에서 부드럽게 작동하기 때문에 윈도우즈에서 하려니 패닉상태.
첫번째 시도는 pyenv를 쓰라는 잘못된 가이드들로 시작했다. pyenv가 윈도우즈를 지원하지 않았고 pyenv-win이 있지만, 설치에 헤매이다가 python 공식문서의 언급을 보고 폐기.
버전 3.6부터 폐지: pyvenv는 파이썬 3.3 및 3.4 용 가상 환경을 만드는 데 권장되는 도구였으며, 파이썬 3.6 에서 폐지되었습니다.
버전 3.5에서 변경: 이제 가상 환경을 만들 때 venv를 사용하는 것이 좋습니다.
https://docs.python.org/ko/3/library/venv.html
다이렉트로 venv를 시도했다. MyProject란 폴더를 만들고 powershell을 띄워서,
PS F:\MyProject> python -m venv venv
폴더 안에 들어가보면 관련 파일들은 잘 생성되어 있다. 독립된 python 가상환경의 활성화, 비활성화는 이 폴더안의 activate, deactivate 스크립트를 실행하면 된다. 의문점 하나는 activate.bat이 있고, Activate.ps1 두개의 파일이 존재하는 것. bat은 cmd 창에서 실행하는 것인데, ps1은 무엇인가? 찾아보니 powershell script 이다. 나중에 알았지만, cmd와 powershell 작동이 상당히 다르니 주의. 어쨌든 powershell을 띄웠으니 ps1을 실행해봤다. 실행안됨. bat 파일을 실행해도 아무 반응 없음. 다음과 같은 에러를 마주할 것이다.
이 시스템에서 스크립트를 실행할 수 없으므로...
또다시 구글링. MS의 보안정책상, 스크립트 실행이 안되게 되어 있는 것이다. 두가지를 해줘야하는데, 1) powershell을 관리자 권한으로 실행. 2) 스크립트 실행 정책 변경. 관리자 권한으로 실행했다면, 다음의 명령어를 실행하자. 정책관련 내용은 MS 공식 문서를 참고. 검색중에 다음의 블로그 글( http://egloos.zum.com/mcchae/v/11334325 ) 도 참고했다.
PS F:\MyProject>Set-ExecutionPolicy RemoteSigned
실행 규칙 변경
실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말
항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다. 실행 정책을
변경하시겠습니까?
[Y] 예(Y) [A] 모두 예(A) [N] 아니요(N) [L] 모두 아니요(L) [S] 일시 중단(S) [?] 도움말 (기본값은 "N"): y
PS F:\MyProject>
이제 스크립트가 실행되고 프롬프트가 바뀌어 앞에 (venv)가 붙어있는걸 볼 수 있다. venv를 나갈 때는 그냥 deactivate 를 입력하면 빠져나간다.
(venv) PS F:\MyProject>deactivate
PS F:\MyProject>
한가지 추가로 알아야 할 것은, powershell은 cmd가 아니다. 나만 몰랐나… where python 같은 명령어가 작동하지 않는다. powershell에서 cmd 명령어를 쓰려면, 다음과 같이 쓰자.
PS F:\MyProject> cmd /c where python
F:\Program Files\python38\python.exe
C:\Users\batma\AppData\Local\Microsoft\WindowsApps\python.exe
PS F:\MyProject>
참고
– https://docs.python.org/ko/3/library/venv.html
– https://social.technet.microsoft.com/Forums/en-US/f36faadd-60e2-4dea-b7d5-1b4dd79fcd84/equivalent-of-where-in-powershell?forum=winserverpowershell
– https://www.youtube.com/watch?v=APOPm01BVrk
좀 더 정리가 잘된 사이트를 찾았다.
https://dojang.io/mod/page/view.php?id=2470
많이 헤맸는데, windows에 있는 linux subsystem에서 작업하는게 편할거 같다는 생각이 든다.