pipenv 사용법
pipenv 설치
$ pip3 install pipenv
가상환경 만들기 & 실행하기
가상환경을 만들 프로젝트 폴더에서 pipenv shell 를 실행하면 해당 폴더에 가상환경이 만들어 진다.
이미 만들어진 가상환경에 진입할때도 같은 명령어를 쓴다
가상환경에서 빠져나올떄는 exit를 실행한다
# /Users/jihoon/project1 이라는 폴더에 가상환경을 만들고 싶다면
$ cd /Users/jihoon/project1
$ pipenv shell
(project1) $ exit
$
패키지 설치하기
가상환경에 진입한 상태에서 pipenv를 사용하면된다.
(project1) $ pipenv install requests
venv는 프로젝트 폴더에 모든 패키지를 저장하지만
pipenv는 설치된 패키지들을 프로젝트 폴더(현재폴더)에 저장하지 않는다.
→ 프로젝트 폴더의 용량을 줄일 수가 있다.
아래 명령어를 실행하면 패키지 저장 경로를 보여준다
(project1) $ pipenv --venv
/Users/jihoon/.local/share/virtualenvs/project1-zD9xVTg1
패키지 삭제하기
삭제할때는 pipenv uninstall 를 실행한다.
(project1) $ pipenv uninstall requests
Pipfile & Pipfile.lock
가상환경을 만들고 나면 Pipfile 과 Pipfile.lock 파일이 생성된다.
Pipfile
- url : 패키지 다운받는 repository 주소
- dev-packages : auto test용 패키지 등 개발중에만 쓰는 패키지리스트.
- packakges : 어플리케이션을 실행할 때 필요한 패키지리스트
- requests = "*" : 설치할때 버전을 명시하지 않아서 * 로 표기됨. *은 최신버전을 뜻함.
- requires : 어플리케이션을 실행하기위한 파이썬 버전
[[source]]
url = "<https://pypi.org/simple>"
verify_ssl = true
name = "pypi"
[packages]
requests = "*"
[dev-packages]
[requires]
python_version = "3.9"
Pipfile.lock
- json 형태로 dependency 들이 버전정보와 함께 정리되어있음
- default 하위에 설치된 package, dependency 들 내용이 있음
- 아래 예시에서 certifi는 requests를 설치하면 같이 설치되는 dependency 들 중 하나
- 아래 예시에서 설치된 requests 의 버전은 2.27.1
"default": {
"certifi": {
"hashes": [
"sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
"sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"
],
"version": "==2021.10.8"
},
"charset-normalizer": {
"hashes": [
"sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597",
"sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"
],
"markers": "python_version >= '3'",
"version": "==2.0.12"
},
"idna": {
"hashes": [
"sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
"sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"
],
"markers": "python_version >= '3'",
"version": "==3.3"
},
"requests": {
"hashes": [
"sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61",
"sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"
],
"index": "pypi",
"version": "==2.27.1"
},
"urllib3": {
"hashes": [
"sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14",
"sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'",
"version": "==1.26.9"
}
},
다른 machine에 프로젝트 복사하고 똑같은 dependency 설치하기
프로젝트 폴더를 다른 machine에 복사하고 다음 명령어를 실행하면 자동으로 같은 패키지들을 설치한다.
패키지들이 저장된 폴더(pipenv --venv 결과 경로)를 삭제해도 아래 명령어를 실행하면 Pipfile에 있는 dependency들을 그대로 설치한다
$ pipenv install
Pipfile에는 requests = "*" 라고 되어있으므로 requests의 최신버전을 실행하게된다.
그러면 Pipfile.lock에 명시된 2.27.1보다 더 최신버전을 설치해서 버전이 달라질 수 있다.
Pipfile에 버전을 명시하거나, 아래 명령어로 Pipfile을 무시하고 Pipfile.lock 만 참조하여 dependency들을 설치할 수 있도록 할 수 있다.
$ pipenv install --ignore-pipfile
dependency 관리
dependency 확인하기
pipenv graph 으로 설치된 패키지와 그에 해당하는 dependency들을 확인할 수 있다.
- required: requests 2.27.1 이 필요로 하는 버전
- installed : 현재 설치된 버전
(project1) $ pipenv graph
requests==2.27.1
- certifi [required: >=2017.4.17, installed: 2021.10.8]
- charset-normalizer [required: ~=2.0.0, installed: 2.0.12]
- idna [required: >=2.5,<4, installed: 3.3]
- urllib3 [required: >=1.21.1,<1.27, installed: 1.26.9]
package 삭제
- package 를 삭제하면 Pipfile(.lock)이 업데이트 된다.
- dependency들은 삭제되지 않고 남아있다. dependency들이 requests이외에 어디 쓰이고 있을지 모르기 때문
- 이 dependency들은 프로젝트 폴더를 다른 machine에 옮겨서 pipenv install로 패키지를 설치할때 그대로 설치되지 않을 수 있다. pipfile(.lock) 에 포함되어있지 않기 때문
(project1) $ pipenv uninstall requests
pipenv uninstall requests
Uninstalling requests...
Found existing installation: requests 2.27.1
Uninstalling requests-2.27.1:
Successfully uninstalled requests-2.27.1
Removing requests from Pipfile...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (16c839)!
(project1) $ pipenv graph
certifi==2021.10.8
charset-normalizer==2.0.12
idna==3.3
urllib3==1.26.9
이전버전의 패키지를 설치했을때
위의 상황에 이어서 requests 2.10.0 버전을 설치하면. 현재 최신 dependency들이 설치되있는 상태이므로
예전버전의 requests 2.10.0 버전이 필요로하는 dependency 버전과 맞지 않다
(project1) $ pipenv install requests==2.10.0
Installing requests==2.10.*...
Adding requests to Pipfile's [packages]...
✔ Installation Succeeded
Pipfile.lock (16c839) out of date, updating to (d13a3c)...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (d13a3c)!
Installing dependencies from Pipfile.lock (d13a3c)...
🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
(project1) $ pipenv graph
certifi==2021.10.8
charset-normalizer==2.0.12
idna==3.3
requests==2.10.0
urllib3==1.26.9
최신 버전 패키지 설치하기
아래 명령어로 설치된 모든 패키지의 버전을 체크하고 최신버전으로 업데이트 한다
(project1) $ pipenv update --outdated
특정 패키지만 업데이트 하고 싶으면 패키지를 명시하면 된다.
(project1) $ pipenv update requests
여전히 Pipfile을 참고해서 update 하므로, Pipfile에 아래 처럼 버전이 예전버전으로 명시되어 있으면 업데이트를 하지 않는다.
[packages]
requests = "==2.10.*"
2.10.* 을 *로 바꾸고 재시도를 해야한다.
0 댓글