- venv
- conda
1. venv 사용 (Python 내장 모듈)
- 로컬 베이스
- 폴더
(1) 가상환경 설정: venv 폴더 생성
$ python -m venv .venv
이렇게 했더니 python 명령어를 인식하지 못 했다. 시스템 PATH에 파이썬 실행 파일이 등록되지 않아 인식하지 못 할 수 있다고 한다. 그래서 'python --version' 했을 때 잘 작동되었던 그 'python' 명령어로 접근하니 실행되었다.
(2) 가상환경 활성화
$ .venv/Scripts/activate (Windows) // source .venv/bin/activate (macOS/Linux)
그랬더니 이제는 보안 관련 권한 문제가 발생했다. 그래서 윈도우 기준 PowerShell을 관리자 권한으로 실행해 실행 정책을 변경해 주었다. 파이썬 터미널에서 접근했던 경로에 다음 명령어를 입력하고 'Y'로 허용해 주었더니 잘 되었다.
Set-ExecutionPolicy RemoteSigned
"RemoteSigned 정책은 인터넷에서 다운로드한 스크립트는 서명되어야 실행할 수 있지만, 로컬에서 생성한 스크립트(즉, 직접 만든 가상 환경의 활성화 스크립트)는 실행할 수 있도록 허용합니다. 이 정책은 대부분의 개발 환경에서 충분히 안전하고 널리 사용됩니다."
+ 가상 환경 진입 성공
사실상 2번의 명령어를 동일하게 입력하면 가상 환경이 실행되며 (.venv)이 뜬다.
2. conda 사용 (Miniconda)
- base라는 기본 환경 활성화
- conda deactivate로 빠져 나올 수 있음
- 기존의 yml(conda) 파일 읽어 가상환경 구축 cf. txt(venv)
environment.yml은 gitignore 같이 프로젝트 최상단 루트 위치에 저장한다. 나중에 충돌나면 추가된 라이브러리 내용만 반영하면 된다.
(1) 환경 새로 생성
$ conda env create -f environment.yml
environment.yml 파일의 name: 필드에 지정된 이름으로 새로운 conda 환경을 생성하고 필요한 모든 패키지를 설치한다.
-f: --file 새로운 환경을 만들 건데 그 환경에 대한 정보를 파일에서 읽어온다
뒤에는 경로 명시
(2) 환경 업데이트(기존의 environment.yml을 수정했을 경우)
$ conda env update -f environment.yml --prune
environment.yml 파일의 내용에 맞춰 업데이트한다. 더 이상 명시되지 않은 패키지들을 기존 환경에서 삭제한다.
(3) 환경 활성화
$ conda init
$ conda activate org_chart_chatbot_env
conda init을 하고 activate를 해도 no change로 conda가 이미 필요한 설정을 다 해뒀다는 안내가 뜨는 경우는 이는 현재 사용 중인 셸(터미널)에 설정된 내용이 아직 로드되지 않았기 때문이다.
$ source ~/miniconda3/etc/profile.d/conda.sh
source 명령어는 특정 스크립트 파일을 현재 셸 환경에서 직접 실행하도록 지시하는 명령어다. conda init을 하면 conda.sh와 같은 스크립트 파일이 conda 설치 경로에 생성되거나 업데이트되는데, 이 스크립트에 conda 환경을 활성화하는 데 필요한 PATH 설정 등을 포함하고 있다고 한다. 따라서 현재 열려 있는 터미널에서 바로 conda 설정을 적용하고 싶을 때 source 명령어를 사용해 해당 스크립트를 수동으로 로드하는 것이다.
+ 추가: source 명령어를 매번 실행하지 않고 activate만으로 해결하기
source 명령어를 수동으로 실행해야지 activate가 된다는 것은 conda 초기화 코드가 있지만 git bash가 시작될 때 그 코드를 읽지 못하고 있다는 것이다. 따라서 git bash가 시작될 때 읽을 코드(source)를 .bashrc 파일에 추가해 주면 된다. (참고로 이게 딱 유일한 방법이 아닌 게, conda가 설치될 때 시스템 환경변수에 등록되거나 자동으로 conda 초기화 스크립트를 찾아 실행하도록 설정될 때도 있다고 한다.) 내가 접근한 방법을 설명하자면 다음과 같다.
1. git bash 홈 디렉토리로 이동
$ cd ~
2. .bashrc 파일 있는지 확인
$ ls -a
없다면 파일 생성
$ touch ~/.bashrc
3. 내용 확인(nano 에디터 사용)
$ nano ~/.bashrc
4. 파일에 source 명령어 추가
$ source ~/miniconda3/etc/profile.d/conda.sh
명령어를 추가했으면 ctrl + O(Write out) > ctrl + X(Exit)으로 나간다.
그리고 git bash 터미널 창을 완전히 닫았다가 새로 열어서 activate만으로 실행되는지 확인한다.
나는 이 과정으로 해결했다.
+ 패키지 추가 설치 시 channel 확인하기
$ conda search 패키지이름
- https://anaconda.org에서 검색
명령어 입력도 가능하지만 사이트에서 검색하는 게 더 편했다.
+ 설치된 패키지 목록 확인
$ conda list
YAML (YAML Ain't Markup Language)
- 들여쓰기 통해 구조 정의
- 키: 값
- 리스트는 - 항목 형태로 표현
name: 생성될 Conda 환경 이름 지정
channels: 패키지를 다운로드할 Conda 채널 목록을 지정 (ex. conda-forge, defaults, pytorch)
dependencies: 프로젝트에 필요한 패키지 목록
가장 중요한 목적은 환경의 재현성 보장
+ 프로젝트 루트가 프로젝트 내 spring으로 잡혀서 같은 경로의 python 폴더 등이 안 보여요!
- 파일 탐색기를 열어 프로젝트에 python 폴더를 만들어 주었는데 프로젝트 루트 경로가 자꾸 spring으로 잡혀서 정말 이유를 알 수 없었다. close project로 recent projects에서 삭제 후 다시 프로젝트 루트로 다시 열어 주었을 때, 잠깐 python 폴더가 보였지만 다시 사라지고 spring으로 루트가 잡혔다. 근데 그때 알고보니 settings.gradle도 같이 들어 갔었는데 이게 문제가 될 줄은 몰랐다.
IntelliJ는 settings.gradle 파일을 발견하면 해당 파일이 있는 디렉토리를 Gradle 프로젝트의 루트로 강력하게 인식한다고 한다. 그래서 옮긴 후 다시 Gradle > build를 해 주었더니 보였다! 꼭 Gradle 재동기화를 해 주어야지 프로젝트 루트 경로가 제대로 잡혀서 보인다...settings.gradle의 쓰임새를 이제야 제대로 확인했다.
File > Project Structure > Modules 수정하는 데 1시간 걸렸다.
- settings.gradle에서 루트 프로젝트 이름을 중복 지정해 줘서 폴더 구조 수정하는 데도 애 먹었던 것으로 예상
- 이게 문제가 되면서 add starters도 실행이 안 됐다
- 프로젝트 이름 수정, add starters 해 주면서 의존성 추가, 폴더 구조에서 python, spring > src > java를 소스 폴더로 지정
실행환경 구축
여기까지 다 완료하고서 바보같이 실행환경을 구축하지 않았다. 즉 세팅만 해 놓고 실행을 안 했다. '파이썬 서버는 cursorAI에서 돌려야 하니까'란 생각으로 이전과 똑같이 독립적으로 실행하고서... 왜 여전히 IntelliJ 쪽 파이썬 코드가 돌아가지 생각했다. 궁극적으로는 IntelliJ만 활용해 스프링 서버와 파이썬 서버를 같이 돌려야한다.
File > Project Structure > SDKs에서 파이썬 인터프리터를 추가한다. 나는 conda 환경으로 했기 때문에 활성화해 놓은 것을 추가해 주면 되는데 IDE에서 env를 자동으로 감지하지 못 해서 아래 명령어를 통해 경로를 확인한 다음 직접 지정해서 추가한다.
위 경로에서 python.exe까지 선택해 주면 된다. (중간에 컴퓨터 환경이 바뀌어서 사진 상으로 경로 차이가 있다.)
Run > Edit Configurations에서 + 버튼으로 Python 서버를 추가한다. 파이썬 인터프리터는 만들어 둔 가상환경으로 설정하고 cursor에서처럼 명령어를 설정해 준다. 주의해야 할 점은 working directory 루트를 파이썬 코드가 담긴 루트 폴더로 잡아야 한다. 환경변수는 따로 설정해 주지 않았다.
그러면 두 개의 서버를 IntelliJ에서 돌릴 수 있게 된다. 확실히 에디터를 번갈아 켜지 않아도 되니까 편하다.
그리고 파이썬 패키지를 만들게 된다면 __init__.py 파일이 자동으로 생성되는 모습을 볼 수 있는데, 패키지에 포함된 디렉토리에 __init__.py 파일이 없다면 패키지로 인식되지 않는다고 한다. python3.3 버전부터는 없어도 인식할 수 있게 됐다는데 하위 호환을 위해 생성하는 것이 안전하다고 한다. 어차피 자동으로 생성되는 김에 나는 사용해 보기로 한다. 파일에 추가로 뭘 입력하지 않아도 된다.
05-3 패키지
파이썬에서 패키지(packages)란 관련 있는 모듈의 집합을 말한다. 패키지는 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해 준다. > 파이썬에서 모듈은 하나의…
wikidocs.net
'python' 카테고리의 다른 글
[python] numpy 및 matplotlib 간단 실습 (0) | 2025.04.13 |
---|---|
[python] 파이썬 기본 (9) - 클래스 및 전체 실습 (0) | 2025.04.04 |
[python] 파이썬 기본 (8) - 내장 함수 (0) | 2025.04.04 |
[python] 파이썬 기본 (7) - 함수 (0) | 2025.04.04 |
[python] 파이썬 기본 (6) - 반복문 (0) | 2025.04.04 |