mamba / micromamba 요약 정리

mamba 와 conda 는 서로 교체 가능한 파이썬 패키지 매니저이다.

mamba는 conda와 같은 사용방법과 동일한 환경을 이어받은 패키지 관리자 이다. conda & mamba 명령을 서로 거의 동일하게 사용할 수 있다. conda 의 패키지 채널을 그대로 사용할 수 있다.

1
2
3
mamba install ...
mamba create -n ... -c ... ...
mamba list

여기서는 micromamba를 사용해보려고 한다.

micromamba 는 mamba의 소규모 버전으로 독립적 실행 파일이다. 다만 mamba 와 micromamba는 환경 구성이 좀 다르다. micromamba는 mamba와 다르게 MAMBA_ROOT_PREFIX 환경 변수를 기준으로 패키지 관리가 시작되고 환경이 생성된다.

  1. 설치
  2. micromamba 사용
  3. 가상환경 사용
  4. Repoquery 명령
  5. Uninstall
  6. 참고

1. micromamba 설치

https://mamba.readthedocs.io/en/latest/installation/micromamba-installation.html

Linux, macOS, or Git Bash on Windows install with:

1
"${SHELL}" <(curl -L micro.mamba.pm/install.sh)

Windows 에서 설치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PS> Invoke-Expression ((Invoke-WebRequest -Uri https://micro.mamba.pm/install.ps1).Content)
Downloading micromamba from https://github.com/mamba-org/micromamba-releases/releases/latest/download/micromamba-win-64
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 9280k 100 9280k 0 0 3355k 0 0:00:02 0:00:02 --:--:-- 10.8M

Installing micromamba to C:\Users\student\AppData\Local\micromamba

Adding C:\Users\student\AppData\Local\micromamba\micromamba.exe to PATH

Do you want to initialize micromamba for the shell activate command? (Y/n): y
Enter the path to the micromamba prefix (default: C:\Users\student\micromamba):
Initializing micromamba in C:\Users\student\micromamba
C:\Users\student\AppData\Local\micromamba\micromamba.exe
The following argument was not expected: -p
Run with --help for more information.

Update

1
PS> micromamba self-update

특정 버전으로 업데이트도 가능하다.

1
PS> micromamba self-update --version 1.4.6

micromamba 도움말.

1
PS> micromamba --help

2. micromamba 사용

micromamba의 가상환경은 micromamba activate /path/to/env 같이 활성화 시키는데, MAMBA_ROOT_PREFIX 환경변수를 기준으로 micromamba activate env 같이 사용할 수 있다.

현재 사용할 수 있는 환경을 출력.

1
2
3
4
5
PS> micromamba env list
Name Active Path
--------------------------------------------------------------
base C:\Users\student\micromamba
C:\Users\student\miniconda3\envs\myenv

micromamba 명령으로 대부분의 conda 명령을 동일하게 실행할 수 있다.

1
2
3
4
5
6
7
8
9
10
micromamba info                          # 현재 micromamba 환경정보

# 설치한 패키지 목록
micromamba list ananconda # Anaconda 정보
micromamba list python # python 패키지 정보

# upgrade
micromamba update pip # pip upgrade
micromamba update pip=25.0 # pip upgrade to 25.0
micromamba update conda # conda upgrade

3. 가상환경 사용

-n 옵션으로 가상환경을 지정하고 생성/수정/삭제를 할 수 있고, 더불어 패키지를 함께 관리할 수 있다.

가상환경 생성

가상환경과 패키지를 함께 설치한다.

1
PS> mamba create -n myenv <list of packages>

가상환경에 python 버전을 지정할 수 있다.

1
PS> micromamba create -n myenv python=3.12

가상환경에 설치 채널을 지정해 설치할 수 있다. 아래는 conda-forge 채널 이용

1
PS> micromamba create -n myenv jupyterlab -c conda-forge python=3.12
1
2
# 가상환경 목록
PS> micromamba env list

가상환경 활성화

가상환경은 가상환경 이름을 주어 활성화 한다.

1
2
PS> micromamba activate myenv
(myenv) PS C:\Users\student>

혹은 가상환경이 있는 위치의 절대경로를 주어 활성화 할 수 있다.

1
PS> micromamba activate /path/to/myenv

run 명령은 가상환경을 사용해서 특정 스크립트/명령를 직접 실행할 수 있다.

1
PS> micromamba run -n myenv mycommand

가상환경 myenv 의 서버 목록을 출력

1
2
3
4
5
(myenv) PS> micromamba run -n myenv jupyter server list
Currently running servers:
http://localhost:8888/?token=317c9380f9c3ed4ab6f836a7ffbc789497728820e9c60f47 :: D:\Jupyter_Hub
http://localhost:8585/ :: D:\Jupyter_Hub
http://desktop-goyangi:8686/ :: D:\Jupyter_Hub

사용중인 가상환경 비활성화

1
2
(myenv) PS> micromamba deactivate
PS>

모듈/패키지 설치

micromamba 명령을 사용해 모듈과 패키지를 설치 채널을 지정해서 설치할 수 있다.

활성화 myenv 가상환경에서 matplotlib 패키지를 설치한다.

1
2
3
4
5
6
7
(myenv) PS>micromamba install matplotlib -c conda-forge
Pinned packages:
- python=3.12
Transaction
Prefix: C:\Users\student\micromamba\envs\myenv
...

비활성 상태에서 myenv 가상환경에 패키지를 설치한다.

1
2
3
4
5
6
PS> micromamba -n myenv install matplotlib
Pinned packages:
- python=3.12

Transaction
Prefix: C:\Users\student\micromamba\envs\myenv

가상환경 업데이트

특정 가상환경을 모두 업데이트

1
micromamba update -n myenv --all

환경의 모든 패키지를 덥데이트 하려면

1
micromamba update --all

가상환경 제거

설치한 가상환경을 지운다

1
2
3
PS> micromamba env remove -n myenv --all
...
Proceed ([y]/n)? y

4. Repoquery 명령

mamba 는 새로운 패키지 검색 명령으로 repoquery 명령을 선보이고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 설치 가능한 모든 python 패키지 목록
$ micromamba repoquery search python

# 설치 가능한 python=버전 패키지 목록
$ micromamba repoquery search "python>=3.11"

# 설치 가능한 jupyterlab 버전 패키지 목록
$ micromamba repoquery search "jupyterlab>=4.0"


# 현재 환경의 jupyterlab 에 연관된 의존성 패키지 목록
$ micromamba repoquery depends jupyterlab

# 현재 환경의 jupyterlab 에 연관된 모든 의존성 세부 목록
$ micromamba repoquery depends jupyterlab --recursive

패키지 연관 의존성을 트리형식으로 출력할 수 있다.

1
2
3
4
5
6
7
8
# 현재 환경의 jupyterlab 에 연관된 의존성 패키지의 트리 목록
$ micromamba repoquery depends -t jupyterlab
jupyterlab[4.3.4]
├─ jupyter-lsp[2.2.0]
│ ├─ python already visited
│ └─ jupyter_server[2.15.0]
│ ├─ python already visited

And you can ask for the inverse, which packages depend on some other package (e.g. ipython) using whoneeds.

1
2
3
4
5
6
7
8
$ micromamba repoquery whoneeds ipython

Name Version Build Depends Channel
-------------------------------------------------------------------
jupyter_console 6.4.3 pyhd3eb1b0_0 ipython pkgs/main
ipykernel 6.9.1 py39haa95532_0 ipython >=7.23.1 pkgs/main
ipywidgets 7.6.5 pyhd3eb1b0_1 ipython >=4.0.0 pkgs/main
With the -t,--tree flag, you can get the same information in a tree.

트리 형식 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ mamba repoquery whoneeds -t ipython

ipython[8.2.0]
├─ jupyter_console[6.4.3]
│ └─ jupyter[1.0.0]
├─ ipykernel[6.9.1]
│ ├─ notebook[6.4.8]
│ │ ├─ widgetsnbextension[3.5.2]
│ │ │ └─ ipywidgets[7.6.5]
│ │ │ └─ jupyter already visited
│ │ └─ jupyter already visited
│ ├─ jupyter_console already visited
│ ├─ ipywidgets already visited
│ ├─ jupyter already visited
│ └─ qtconsole[5.3.0]
│ └─ jupyter already visited
└─ ipywidgets already visited

5. Uninstall, Windows

Micromamba는 Windows 11에서 다음과 같은 방법으로 삭제할 수 있습니다.

  1. micromamba 설치 디렉토리 삭제:

micromamba가 설치된 디렉토리를 찾습니다. 일반적으로 C:\Users<사용자 이름>.local\bin 또는 C:\micromamba에 설치됩니다.
해당 디렉토리를 삭제합니다.

  1. 환경 변수에서 micromamba 경로 제거:

Windows 검색 창에서 “환경 변수”를 검색하고 “시스템 환경 변수 편집”을 엽니다.
“시스템 속성” 창에서 “환경 변수” 버튼을 클릭합니다.
“시스템 변수” 섹션에서 “Path” 변수를 선택하고 “편집” 버튼을 클릭합니다.
micromamba가 설치된 디렉토리 경로가 있는지 확인하고, 있다면 해당 경로를 삭제합니다.
“확인” 버튼을 클릭하여 변경 사항을 저장합니다.

  1. micromamba 관련 파일 삭제:

C:\Users<사용자 이름>.condarc 파일을 삭제합니다. (존재하는 경우)
C:\Users<사용자 이름>.mambarc 파일을 삭제합니다. (존재하는 경우)

C:\Users<사용자 이름>\AppData\Local\micromamba (존재하는 경우)

  1. (선택 사항) micromamba 설치 시 생성된 바로가기 삭제:

micromamba 설치 시 생성된 바로가기가 있다면 삭제합니다.

  1. (선택 사항) micromamba와 관련된 가상 환경 삭제:

micromamba를 사용하여 생성한 가상 환경이 있다면 해당 디렉토리를 삭제합니다. 가상 환경은 일반적으로 C:\Users<사용자 이름>.micromamba\envs 디렉토리에 저장됩니다.


참고

pip/conda Proxy 사용하기

회사 등에서 방화벽을 사용하는 경우 pip / conda 저장소에서 패키지 설치가 안되는 경우가 있다. 또한 방화벽 안에서 설치할 경우 SSL verification error 에러 발생으로 설치가 안되기도 한다. 이런 경우 직접 pip 혹은 conda 설치가 안되는 경우에 프락시 지정을 해서 사용이 가능하다.

conda proxy

.condarc 파일과 conda 명령 옵션으로 사용할 수 있다.

.condarc 파일

사용자 홈디렉토리 .condarc 파일에 proxy 구성을 한다.

파일에 proxy_servers 구성해 사용한다.

1
2
3
proxy_servers:
http: http://IP_ADDRESS:8080
https: https://IP_ADDRESS:8080

ssl_verify: SSL verification error

방화벽 때문에 파이썬 패키지를 설치할 때 SSL 인증 오류(SSL verification error)가 생겨 곤란할 때가 있다. 만약 프락시 인증서가 필요하면 pip 인증서를 추가하면 ssl verification 에러를 피할 수 있다.

1
2
3
4
proxy_servers:
http: http://IP_ADDRESS:8080
https: https://IP_ADDRESS:8080
ssl_verify: %programdata%\pip\dscert.crt

conda --set 옵션 사용

설정 파일 대신 conda 명령에서 --set 옵션을 사용하면 설정 파일을 편집해서 저장이 된다.

1
conda config --set [설정내용]

다음은 ssl_verify 에 pip 인증서를 추가하거나 False 로 제외하고 사용하고 있다.

1
conda config --set ssl_verify False

명령에서 즉시 사용할 때는 --add 옵션을 사용한다.


pip proxy

pip 명령은 명려에서 옵션 pip proxy 옵션을 사용하거나 설정 파일 pip.ini 로 구성할 수 있다.

pip.ini

pip는 사용자 구성에서 아래 같이

  • 윈도우: %HOMEPATH%\pip\pip.ini
  • 리눅스/맥: $HOME/.pip/pip.conf

trusted-host 를 구성해 준다.

1
2
3
4
5
6
[global]
proxy=http://IP_ADDRESS:8080
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org

ssl cert

SSL 의 경우 cert 옵션을 사용할 수 있다.

1
2
3
4
5
6
[global]
cert=C:\Users\user\pip\cert.crt
proxy=http://IP_ADDRESS:8080
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org

pip 명령 사용

명령으로 직접 proxy 를 지정할 수 있다.

1
pip install --proxy https://{proxy}:{port} {BINARY}

다음 같인 trusted-host 등도 지정 할 수 있다.

1
pip install --upgrade --proxy https://IP_ADDRESS:8080 --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org matplotlib numpy openpyxl xlrd xlwt pandas

pyenv 와 Anaconda 병행 사용

PyEnv + Anaconda

개발환경은

  • Ubuntu 16.04 or later
  • Windows 7 or later
  • macOS 10.12.6 (Sierra) or later (no GPU support)
  • Raspbian 9.0 or later

pyenv 와 pyenv-virtualenv 기반으로 Anaconda 를 사용하려고 한다. pyenv로 배포본을 관리를 하고, pyenv-virtualenv와 conda 환경의 가상환경을 이용한다.

  1. pyenv-Anaconda 환경
  • ananconda 와 miniconda
  1. anaconda & miniconda 복합환경

1. pyenv - Anaconda 설치

설치할 anaconda 버전을 확이한다.

1
$ pyenv install -l |grep anaconda

anaconda 를 설치한다 - 시간이 많이 걸린다.

1
2
3
4
$ pyenv install anaconda3-5.3.1
Downloading Anaconda3-5.3.1-MacOSX-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh
...

anaconda3-5.3.1 버전을 전역에서 사용하도록 한다.

1
$ pyenv global anaconda3-5.3.1

global로 지정하고 버전을 확인해 보면

1
2
3
4
$ pyenv versions
system
3.8.1
* anaconda3-5.3.1 (set by /Users/qkboo/.pyenv/version)

일반적으로 Anaconda 만을 사용한다면 설치후 사용자 쉘 환경에서 conda 를 사용하기 위해서 환경변수를 초기화 해야 하는데 다음 명령으로 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ conda init bash
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/condabin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda-env
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/activate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/deactivate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/fish/conf.d/conda.fish
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/Conda.psm1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/conda-hook.ps1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/xontrib/conda.xsh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.csh
modified /Users/qkboo/.bash_profile

==> For changes to take effect, close and re-open your current shell. <==

위 명령은 아래 환경 변수가 작용해서 conda 의 가상환경을 다루는 쉘 스크립을 실행해 준다.

1
2
3
4
5
NACONDA_HOME=/Users/who/anaconda3
PATH=$PATH:$ANACONDA_HOME/bin

export ANACONDA_HOME
export PATH

쉘을 다시 열면 쉘 프롬프트가 변경된다.

1
(base) qkboo@ ~$

pyenv 기반 Anaconda 사용

그런데 pyenv 에서 다른 배포본과 Ananconda 를 같이 사용한다면 conda 초기 환경이 아주 불편할 수 있어서 아래 같이 conda 가상환경 시작을 불가능하게 해야 한다.

init conda, the following command write scripts into your shell init file automatically

1
2
3
4
conda init

# disable init of env "base"
conda config --set auto_activate_base false

보통 conda init 를 해주면 쉘 스크립의 마지막 위치에 삽입된다. 그러므로 .bash_profile 에 있는 pyenv 초기화가 항상 마지막에 실행되도록 하자.

1

pyenv 와 anaconda 환경의 전환 정리

Examples of managing virtual environments.

1
2
3
4
5
6
# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`
1
2
3
4
5
# virtual environments from conda
conda create -n new-env python=3.6
conda env list
conda activate new-env
conda deactivate
1

1

anaconda 패키지와 환경관리를 할 수 있는 conda 명령어 몇가지를 소개

1
2
3
4
5
6
7
8
9
10
11
// 아나콘다의 버전 확인
conda --version

// 아나콘다 버전 업데이트
conda update conda

// 설치된 패키지 리스트
conda list

// conda 통해 설치 가능한 패키지 검색
conda search "tensorflow"

conda에서 개발 준비하기

Anaconda 설치가 완료되면 conda 명령으로 TensorFlow를 사용할 환경을 구성하고 사용해 보자.

가상환경 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ conda create -n tensorflow_env

...

The following packages will be downloaded:

package | build
---------------------------|-----------------
pip-20.0.2 | py37_1 1.9 MB
tensorboard-2.0.0 | pyhb38c66f_1 3.3 MB
...

The following NEW packages will be INSTALLED:

_tflow_select: 2.3.0-mkl
...

Proceed ([y]/n)?

또한 python= 인자로 파이썬 버전을 지정할 수 있다.

1
$ conda create -n tensorflow python=3.8

현재 생성한 가상환경을 확인해 보자,

1
2
3
4
5
(base)$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/anaconda3-5.3.1
deep-learning /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep-learning

새로만든 conda 가상환경을 활성화 한다.

1
2
$ conda activate tensorflow_env
(tensorflow_env) qkboo@ ~$

가상환경에서 Jupyter Notebook 을 설치한다.

jupyter notebook 설치

활성화한 가상환경에서 Jupyter Notebook 을 설치한다.

1
(tensorflow_env)$ conda install jupyter notebook

필요시 nb-extension 설치

1
2
3
4
5
6
7
8
9
10
(tensorflow_env)$ conda install -c anaconda-nb-extensions nb_conda
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

environment location: /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep_learning

added / updated specs:
- nb_conda

2. anaconda & miniconda 복합환경

현재 시스템에 pyenv로 파이썬 환경이 anaconda, miniconda 그리고 python 3.9 등이 중복되어 설치되어 있다. pyenv 가 중심이 되어 conda 를 다루기 위해서 miniconda 를 우선으로 구성되어 있다. shell 스크립트 부분이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/qkboo/.pyenv/versions/miniconda3-latest/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh" ]; then
. "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh"
else
export PATH="/Users/qkboo/.pyenv/versions/miniconda3-latest/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<

# Pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

현재 pyenv 로 설치한 파이썬 환경을 살펴보면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
qkboo@ ~$ pyenv versions
system
3.8.1
* 3.8.7 (set by /Users/qkboo/.pyenv/version)
3.8.7/envs/opencv4
3.8.7/envs/tf2_build
3.9.1
anaconda3-5.3.1
anaconda3-5.3.1/envs/opencv3
anaconda3-5.3.1/envs/opencv4
anaconda3-5.3.1/envs/py27
miniconda3-latest
miniconda3-latest/envs/deep_learning
miniconda3-latest/envs/django3
miniconda3-latest/envs/tf24_cpu
miniconda3-latest/envs/tf2_p37
miniconda3-latest/envs/tkinter
opencv4
tf2_build

conda 툴을 사용하는 anaconda, miniconda 가 혼재된 환경에서 pyenv로 가상환경을 즉시 활성화 시키면 conda 명령 실행에 혼선을 일으킨다. 예를 들어 위의 가상환경 anaconda3-5.3.1/envs/opencv4 을 pyenv로 활성화 하고 python, conda 명령을 실행해 보면

1
2
3
4
5
~$ pyenv shell opencv4
~$ pyenv version
opencv4 (set by PYENV_VERSION environment variable)
~$ which python
/Users/qkboo/.pyenv/shims/python

가상환경의 python 위치를 확인해 보고, conda 명령을 찾아 보자,

1
2
3
4
5
6
7
8
9
~$ pyenv which python
/Users/qkboo/.pyenv/versions/opencv4/bin/python

$ pyenv which conda
pyenv: conda: command not found

The `conda' command exists in these Python versions:
anaconda3-5.3.1
miniconda3-latest

pyenv 환경 아래 2개의 conda 때문에 혼선이 나타난다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 하고, conda 를 확인해 보면 명확하게 해당 파이썬 환경의 anaconda 의 가상환경을 가르키지만! conda env 명령의 결과는 다르게 나타낸다.
anaconda 뒤에 minicond를 설치해서 miniconda 가상환경이 우선으로 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
~$ pyenv shell anaconda3-5.3.1
~$ pyenv which conda
/Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
~$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/miniconda3-latest
deep_learning /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/deep_learning
django3 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/django3
tf24_cpu /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf24_cpu
tf2_p37 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf2_p37
tkinter /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tkinter

그래서 가상환경 활성화시 가상환경 디렉토리를 지정해서 사용하자!

그래서 anaconda 와 miniconda 환경을 활성화 시키려면 shell, local, system 명령을 통해 설치된 파이썬 환경을 활성화 하고, 해당 파이썬 환경에서 가상환경을 다루는 것이 좋다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 실제 가상환경 위치를 지정해서 활성화 한다.

1
2
~$ conda activate .pyenv/versions/anaconda3-5.3.1/envs/opencv4/
(opencv4) ~$