일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- get
- Algorithm
- javascript
- pymongo
- Project
- flask
- CRUD
- json
- CSS
- portfolio
- OOP
- requests
- beautifulsoup
- frontend
- atlas
- PYTHON
- backend
- java
- github
- flaskframework
- POST
- Crawling
- fetch
- NAS
- openapi
- mysql
- mongodb
- synology
- venv
- body
- Today
- Total
wisePocket
[Python] 가상환경 venv의 필요성 본문
[Python] 가상환경 venv의 필요성
ohnyong 2023. 7. 4. 21:10프로젝트마다 가상 환경을 생성하여 패키지를 관리하기 위함.
프로젝트마다 버전을 다른 것을 사용하다보면 상위 버전 또는 하위 버전에서 서로 지원하지 않는 라이브러리간 충돌이 발생 할 수 있다.
파이썬에서는 패키지를 설치할 때는 보통 pip라는 패키지 매니저를 사용하여 라이브러리를 추가한다.
자바의 maven과 같은 패키지 매니저이다. 노드의 npm이란것을 사용한다고 한다. 자바와 노드는 프로젝트 별로 패키지 설치를 지원하는 반면에(context.xml -> dependency 주입하고, maven update하여 의존성 링크된 라이브러리를 해당 프로젝트에 설치하던 환경 구축 부분과 동일한 것 같다.)
파이썬의 pip는 시스템 전역으로만 패키지를 설치할 수 있다고 한다.
파이썬 3.3 부터는 venv 모듈이 기본적으로 포함되어 있기 때문에 별도 외부 패키지 설치없이 파이썬만 설치되어 있으면 바로 가상 환경 구성이 가능하다.
1. venv 활성화
- 콘솔 창에서 다음과 같이 프로젝트에 찾아가서
- (VSCode 등 ide를 사용하는 경우 내장 탐색기로 프로젝트 폴더로 가서 내장 터미널을 사용해도 같은 결과)
$ cd <프로젝트 디렉터리>
- 해당 커맨드 입력하면 해당 폴더(프로젝트)을 가상 환경을 만들겠다는 것이다.
$ python3 -m venv .venv
2. gitignore 등록
참고로 가상 환경이 설정되면
venv라는 폴더가 생성되는데 1,000개 이상의 신규 파일이 추가된다. 하지만
git처럼 버전 관리 시스템에 푸시할 필요는 없기 때문에 git을 사용하고 있다면 gitignore에 등록해주면 좋다.
gitignore는 특히 팀 프로젝트 협업시 병합 충돌을 관리 할 수 있는 수단이기도 하다.
# # 로 시작하는 줄은 주석에 해당한다.
# 'file.ext' 이라는 이름의 파일을 ignore 처리한다
file.ext
# ignore 규칙을 정의하는 줄에 주석을 함께 섞어 쓰는 것은 허용되지 않는다
# 아래 줄은 'file.ext # not a comment' 라는 이름의 파일을 ignore 처리할 것이다
file.ext # not a comment
# 전체 경로를 통해 파일 ignore 처리하기
# 파일명만 기술된 규칙은 최상위 디렉토리뿐만 아니라 모든 서브디렉토리에 동일하게 적용된다
# 예) otherfile.ext 파일은 하부의 디렉토리 어디에 있던 모두 ignore 처리될 것이다
dir/otherdir/file.ext
otherfile.ext
# 디렉토리 전체를 ignore 처리하기
# 디렉토리 자체와 디렉토리 내의 모든 내용물들이 ignore 처리된다
bin/
gen/
# Glob 패턴 형식을 사용하여 특정 문자를 포함하는 경로를 ignore 처리할 수 있다
# 예를 들어, 아래의 규칙은 build/ 와 Build/ 두가지 경로 모두에 해당한다
[bB]uild/
# / 로 끝나지 않는 경로의 경우에는, 해당 규칙이 기술된 이름을 갖는 파일과 디렉토리 모두에 적용된다
# 따라서, 아래 예제는 `gen` 이라는 이름을 가진 파일들 뿐만 아니라
# 동일한 이름의(`gen`) 디렉토리 및 해당 디렉토리의 내용물까지 모두 ignore 처리하게 된다
bin
gen
# 파일을 확장자 별로 ignore 처리하기
# 아래 기술된 확장자를 갖는 현재 디렉토리와
# 모든 서브디렉토리 내의 파일들이 ignore 처리될 것이다
*.apk
*.class
# 특정 디렉토리 지정과 특정 확장자 지정 규칙을 혼합하여 사용하는 것도 가능하다
# 아래에 기술된 규칙이 ignore 처리할 파일들은
# 위에서 지정한 규칙들이 ignore 처리하는 파일들과 중복된다
java/*.apk
gen/*.class
# 최상위 디렉토리에 존재하는 파일을 ignore 처리하되,
# 서브디렉토리 내의 동일한 이름을 갖는 파일들은 제외하고 싶다면 `/` 를 앞에 붙인다
/*.apk
/*.class
# DirectoryA 라는 이름의 디렉토리가 저장소 내 어떤 위치에 존재하던
# 모두 ignore 처리하고 싶다면 ** 를 앞에 붙인다
# / 를 마지막에 붙이는 것을 잊지 말아야 한다
# 그렇지 않으면 DirectoryA 라는 이름의 디렉토리 뿐만 아니라 파일들까지 ignore 처리하게 된다
**/DirectoryA/
# 이 규칙은 다음 경로들을 ignore 처리할 것이다:
# DirectoryA/
# DirectoryB/DirectoryA/
# DirectoryC/DirectoryB/DirectoryA/
# 이 규칙은 DirectoryA 라는 이름의 파일을 ignore 처리하지는 않는다 (해당 파일이 어느 위치에 존재하든 무관)
# DirectoryA 라는 이름의 디렉토리 하부에 존재하는 DirectoryB 디렉토리를 ignore 처리하되
# 두 디렉토리 사이에 몇 단계의 다른 경로가 포함되어도 상관없이 ignore 하고 싶다면,
# 두 디렉토리 경로 사이에 ** 문자열을 포함시켜 규칙을 작성할 수 있다
DirectoryA/**/DirectoryB/
# 이 규칙은 다음 경로들을 ignore 처리할 것이다:
# DirectoryA/DirectoryB/
# DirectoryA/DirectoryQ/DirectoryB/
# DirectoryA/DirectoryQ/DirectoryW/DirectoryB/
# 위에서 이미 살펴 보았듯이, 특정 파일들을 한꺼번에 ignore 처리하리 위해서 규칙 명세에 와일드카드를 이용할 수 있다
# 이 때, '*' 하나를 단독으로 명시할 경우, .gitignore 까지 포함하여 폴더 내의 모든 파일들이 (의도치 않게) ignore 처리되게 된다
# 이렇듯 와일드카드를 사용하되 특정 파일은 ignore 처리하지 않으려면, ! 를 이용하여 예외 처리를 할 수 있다
# 이렇게 예외처리로 명시된 파일은 ignore 목록에서 제외될 것이다:
!.gitignore
# 파일 이름 중에 해시(#) 문자가 존재할 경우, 백슬래시를 escape 문자로 이용하여 표기할 수 있다
# (1.6.2.1 버전 이후부터 지원)
\#*#
3. 가상 환경 테스트
다시 1의 내용에서부터 연결하면
venv로 가상 환경을 만들었으면 터미널을 확인하면 다음처럼 (venv)가 커맨드라인 앞에 나타난다.
이후에 라이브러리를 설치하면
해당 폴더만 라이브러리가 설치된다.
이말은 신규 프로젝트를 만들면
또 가상환경을 만들고, 라이브러리를 설치해야된다는 말과 같다.
해당 스터디는 아래 깃을 통해 업데이트 되고 있습니다.
https://github.com/yzpocket/Sparta99training
GitHub - yzpocket/Sparta99training
Contribute to yzpocket/Sparta99training development by creating an account on GitHub.
github.com
'Python&Flask Tutorials, AWS EB > 3rd WEEK Python, Crawling, MongoDB' 카테고리의 다른 글
[Python] 파이썬 크롤링 with BeautifulSoup(bs4) - 2 (0) | 2023.07.04 |
---|---|
[Python] 파이썬 크롤링 with BeautifulSoup(bs4) - 1 (0) | 2023.07.04 |
[Python] 파이썬 라이브러리 첫 사용 'requests' (0) | 2023.07.04 |
[Python] Python 사용 기초 실습 (0) | 2023.07.03 |
[Python] Hello World again (0) | 2023.07.03 |