HOWTO · Python
Python의 가상 환경 나열
이 기사에서는 Python의 가상 환경과 이를 나열하는 몇 가지 명령에 대해 설명합니다.
이 페이지의 내용
virtualenvwrapper로 관리하는 환경은 인수 없이 lsvirtualenv 또는 workon을 사용해 나열할 수 있습니다. Conda 환경에는 conda env list를 사용하세요. 환경을 나열할 때 활성화할 필요는 없지만, 해당 관리 도구를 터미널에서 사용할 수 있어야 합니다.
Python에서 가상 환경 나열하기
컴퓨터의 모든 환경을 한 번에 나열하는 범용 Python 명령은 없습니다. 환경을 만들고 정리한 방식에 맞는 방법을 사용해야 합니다.
| 환경 도구 | 나열 방법 | 범위 |
|---|---|---|
| virtualenvwrapper | lsvirtualenv 또는 workon |
설정된 WORKON_HOME 디렉터리의 환경 |
| Conda | conda env list |
현재 Conda 설치에서 관리하는 환경 |
일반 venv 또는 virtualenv |
환경을 만든 디렉터리 확인 | 모든 환경을 모아 두는 공통 레지스트리 없음 |
가상 환경을 사용하면 프로젝트마다 별도의 Python 환경과 설치 패키지를 둘 수 있습니다. 예를 들어 Project1과 Project2에서 서로 다른 NumPy 버전을 사용하면 하나의 설치본을 반복해서 바꾸지 않아도 됩니다. 이렇게 하면 의존성 충돌을 줄일 수 있지만, 하나의 환경 안에 서로 호환되지 않는 패키지를 설치하는 일까지 막아 주지는 않습니다.
일반 venv 환경은 프로젝트 디렉터리에서 .venv 같은 폴더를 찾아 확인할 수 있습니다. pyvenv.cfg 파일은 환경을 찾는 데 유용한 표시지만, 파일이 있다는 사실만으로 환경이 여전히 작동한다고 단정할 수는 없습니다.
다음 자체 완결형 Python 예제는 임시 환경 두 개를 만들고 이름을 나열한 뒤 정리합니다. 검색 범위는 임시 상위 디렉터리뿐이며, project1과 project2를 각각 한 줄에 출력합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
from pathlib import Path
from tempfile import TemporaryDirectory
import venv
with TemporaryDirectory() as directory:
root = Path(directory)
for name in ("project1", "project2"):
venv.EnvBuilder(with_pip=False).create(root / name)
for folder in sorted(root.iterdir()):
if folder.is_dir() and (folder / "pyvenv.cfg").is_file():
print(folder.name)
project1
project2
임시 환경을 만들지 않고 직접 만든 환경을 확인하려면 해당 환경들이 들어 있는 상위 디렉터리를 사용하세요. 이처럼 표시 파일을 기준으로 찾는 방법은 venv 방식의 디렉터리에 해당합니다. Conda 환경에는 Conda의 목록 명령을 사용하세요.
virtualenvwrapper로 환경 나열하기
lsvirtualenv 명령은 virtualenv로 만든 환경을 정리하는 셸 도구 모음인 virtualenvwrapper에 포함되어 있습니다. virtualenv만 설치해서는 wrapper 명령을 사용할 수 없습니다.
Linux 또는 macOS에서 Bash를 설정하려면 공식 virtualenvwrapper 설치 및 셸 초기화 안내를 따르세요. 기본 절차는 다음과 같습니다.
- 필요한 경우 pip 설치를 허용하는 Python 설치본을 사용해
python3 -m pip install virtualenv virtualenvwrapper로 도구를 설치합니다. - 예를 들어
export WORKON_HOME="$HOME/.virtualenvs"로 환경을 둘 공통 상위 디렉터리를 지정한 다음,mkdir -p "$WORKON_HOME"으로 만듭니다. - 설치된
virtualenvwrapper.sh스크립트의 위치를 찾고, 실제 설치 경로로 바꾼source /actual/path/to/virtualenvwrapper.sh명령을 실행해 현재 셸에 불러옵니다. lsvirtualenv를 실행하거나 이름만 간단히 보려면lsvirtualenv -b를 실행합니다. 기존 환경을 나열하는 데 새 환경을 만들 필요는 없습니다. 관리 대상 환경을 새로 만들려면 필요할 때mkvirtualenv vEnv1을 사용합니다.
공식 명령 참조에서 lsvirtualenv와 목록 옵션, 그리고 환경을 나열하거나 활성화하는 workon을 확인할 수 있습니다.
이 설정 명령들은 설치된 도구와 호환되는 셸이 필요한 실행 전 안내입니다. 도구를 설치하는 것만으로 현재 셸이 초기화되지는 않습니다. 다음 세션에서도 사용할 수 있도록 하려면 디렉터리 설정과 스크립트를 불러오는 명령을 해당 셸의 시작 파일에 추가하세요. Windows 네이티브 포트는 설정 방법이 다르므로 이 Bash 절차가 명령 프롬프트나 PowerShell에도 적용된다고 가정하지 마세요.
명령을 사용할 수 없다면 설치 여부와 셸 초기화를 확인하세요. 명령은 실행되지만 환경이 표시되지 않는다면 WORKON_HOME을 살펴보세요. Bash에서는 printf '%s\n' "$WORKON_HOME"을 실행한 다음 ls -la "$WORKON_HOME"으로 설정된 디렉터리의 내용을 확인할 수 있습니다.
WORKON_HOME은 개별 환경 폴더가 아니라 환경 폴더들을 담고 있는 상위 디렉터리로 설정하세요. 기본 경로는 플랫폼, 포트, 설정에 따라 다르며 Windows 형식의 Envs 디렉터리가 어디서나 기본값인 것은 아닙니다. 이 변수를 바꾸면 wrapper가 확인하는 위치가 바뀝니다. 기존 환경을 옮기거나 다른 곳의 프로젝트 로컬 폴더를 찾아 주지는 않습니다.
Conda 환경 나열하기
conda로 환경을 만들었다면 Conda를 사용할 수 있는 터미널에서 conda env list를 실행하세요. 초기화된 셸이나 Anaconda Prompt를 사용할 수 있습니다. Conda는 Anaconda와 Miniconda 같은 배포판을 통해 사용할 수 있습니다.
conda info --envs와 conda info -e도 같은 환경 목록을 표시합니다. 공식 conda env list 참조와 conda info 옵션을 확인하세요. 목록에는 환경의 위치와 대체로 이름이 표시되며, 현재 활성 환경에는 별표가 붙습니다. 사용자 지정 경로에 만든 환경은 이름보다 경로로 식별될 수 있습니다. 정확한 이름과 위치는 설치 환경에 따라 다릅니다.
새 환경을 만들지 않고도 환경 목록을 확인할 수 있습니다. 새 프로젝트에 환경이 필요하다면 conda create --name vEnv2 python으로 Python이 포함된 이름 지정 환경을 만들 수 있습니다. 원하는 이름으로 바꾸세요. 이 명령은 실행되지 않은 안내이며, 패키지를 다운로드하고 확인을 요청할 수 있습니다.
Conda 목록 명령은 모든 venv 또는 virtualenvwrapper 환경을 검색하지 않습니다. 예상한 Conda 환경이 보이지 않으면 올바른 Conda 설치본과 사용자 계정을 사용 중인지 확인하세요. 명령 자체를 사용할 수 없다면 배포판의 프롬프트를 열거나 셸에서 Conda를 초기화한 뒤 다시 시도하세요. 여기서는 이 관리 도구 명령들을 실행하지 않았으므로 특정 세션의 출력 결과를 주장하지 않습니다.
workon으로 환경 나열하기
workon 명령도 virtualenvwrapper에 포함되어 있습니다. 앞서 설명한 wrapper 설정을 마친 뒤 인수 없이 workon을 입력하면 WORKON_HOME에 있는 환경을 나열합니다. 목록을 표시하는 동안 각 환경을 활성화하지는 않습니다.
이름을 추가하면 동작이 달라집니다. workon vEnv1은 현재 셸에서 해당 관리 환경을 활성화합니다. vEnv1을 목록에 있는 이름으로 바꾸세요. 이 활성화 명령은 실행되지 않은 안내이며, 기존 관리 환경이 필요합니다.
workon과 lsvirtualenv 모두에서 환경이 보이지 않는다면 환경을 다시 만들기 전에 두 명령이 공유하는 디렉터리 설정을 확인하세요. 임의의 프로젝트 디렉터리에서 virtualenv vEnv1로 만든 폴더는 자동으로 wrapper에 표시되지 않습니다. 실제로 사용한 관리자와 위치에 맞는 목록 방법을 선택하세요.