Python 가상환경 - venv
python -m venv /path/to/venv
source /path/to/venv/bin/activate
pip freeze > requirements.txt
freeze 명령어는 현재 venv(혹은 파이썬 기본 인터프리터)에 설치되어 있는 라이브러리의 이름과 버전을 따로 추출하는 명령어
뒤에 `> requirements.txt`를 붙이면, 해당 결과를 requirements.txt에 저장
pip install -r requirements.txt
rm -rf ./venv
12.2. 가상 환경 만들기
가상 환경을 만들고 관리하는 데 사용되는 모듈은 venv
라고 합니다. venv
는 보통 여러분이 사용할 수 있는 최신 버전의 파이썬을 설치합니다. 시스템에 여러 버전의 파이썬이 있는 경우, python3
또는 원하는 버전을 실행하여 특정 파이썬 버전을 선택할 수 있습니다.
가상 환경을 만들려면, 원하는 디렉터리를 결정하고, venv
모듈을 스크립트로 실행하는데 디렉터리 경로를 명령행 인자로 전달합니다:
python3 -m venv tutorial-env
This will create the tutorial-env
directory if it doesn’t exist, and also create directories inside it containing a copy of the Python interpreter and various supporting files.
가상 환경의 일반적인 디렉터리 위치는 .venv
입니다. 이 이름은 디렉터리가 보통 셸에서 숨겨져 있도록 하므로, 디렉터리가 존재하는 이유를 설명하는 이름을 제공하면서도 방해받지 않습니다. 또한 일부 툴링(tooling)이 지원하는 .env
환경 변수 정의 파일과의 충돌을 방지합니다.
가상 환경을 만들었으면, 가상 환경을 활성화할 수 있습니다.
윈도우에서 이렇게 실행합니다:
tutorial-env\Scripts\activate.bat
Unix 또는 MacOS에서 이렇게 실행합니다:
source tutorial-env/bin/activate
(이 스크립트는 bash 셸을 위해 작성된 것으로, csh 또는 fish 셸을 사용하는 경우에는, 대신 activate.csh
와 activate.fish
스크립트를 사용해야 합니다.)
가상 환경을 활성화하면, 셸의 프롬프트가 변경되어 사용 중인 가상 환경을 보여주고, 환경을 수정하여 python
을 실행하면 특정 버전의 파이썬이 실행되도록 합니다. 예를 들어:
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>
12.3. pip로 패키지 관리하기
You can install, upgrade, and remove packages using a program called pip. By default pip
will install packages from the Python Package Index, <https://pypi.org>. You can browse the Python Package Index by going to it in your web browser.
pip
has a number of subcommands: 《install》, 《uninstall》, 《freeze》, etc. (Consult the 파이썬 모듈 설치하기 guide for complete documentation for pip
.)
패키지 이름을 지정하여 최신 버전의 패키지를 설치할 수 있습니다:
(tutorial-env) $ python -m pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
패키지 이름 뒤에 ==
과 버전 번호를 붙여 특정 버전의 패키지를 설치할 수도 있습니다:
(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
이 명령을 다시 실행하면, pip
는 요청한 버전이 이미 설치되어 있음을 알리고, 아무것도 하지 않습니다. 다른 버전 번호를 지정해서 그 버전을 얻거나 pip install --upgrade
를 실행하여 패키지를 최신 버전으로 업그레이드할 수 있습니다:
(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
pip uninstall
다음에 하나 이상의 패키지 이름이 오면 가상 환경에서 패키지가 제거됩니다.
pip show
는 특정 패키지에 대한 정보를 표시합니다:
(tutorial-env) $ pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
pip list
는 가상 환경에 설치된 모든 패키지를 표시합니다:
(tutorial-env) $ pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
pip freeze
는 설치된 패키지의 비슷한 목록을 만들지만, pip install
이 기대하는 형식을 사용합니다. 일반적인 규칙은 이 목록을 requirements.txt
파일에 넣는 것입니다:
(tutorial-env) $ pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
requirements.txt
는 버전 제어에 커밋되어 응용 프로그램 일부로 제공될 수 있습니다. 사용자는 install -r
로 모든 필요한 패키지를 설치할 수 있습니다:
(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0