환경설정 꼬이는건 이제 그만! anyenv 소개

최현섭
None
Published in
7 min readAug 1, 2019

안녕하세요. Humanscape Software Engineer David 입니다.

프로젝트를 여러개 하다보면 여러 프로그래밍 언어를 설치하게되고, 프로젝트 마다 버전이 달라 관리가 안되고, 버전 별 설치경로도 달라 환경설정이 꼬이곤 하는데요, 문제지점이 명확하지 않아 오랜시간 고생하기도합니다.

오늘 소개하는 anyenv(https://anyenv.github.io)는 리눅스 환경에서 언어별 버전 관리 설정을 쉽게 해주는 오픈소스 프로젝트입니다.

그림과 같이 nodenv(node.js), pyenv(python), rbenv(ruby) 등 언어 별 존재하는 버전 관리 도구 모두를 관리하는 anyenv가 존재한다고 생각해주시면 됩니다.

  1. git을 통한 설치 (homebrew를 통한 설치를 원하시면 click!)
$ git clone https://github.com/anyenv/anyenv ~/.anyenv
  • bash의 경우
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
  • Zsh의 경우
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.zshrc
  • Zsh의 경우 .zprofile에 환경변수 세팅을 해주어야 하는 것으로 알고 있었는데 메뉴얼에서 .zshrc를 추천해서 조금 찾아본 내용도 공유합니다.

의견1) 따라서, 전역 환경을 위해서 환경변수는 .zshenv 에 넣기로 한다.

의견2) 따라서, 전역 환경을 위해서 환경변수는 .zprofile 에 넣기로 한다.

의견3) 일반적인 개인용으로는 일반적으로 사용자의 .zshrc 파일을 편집하여 개인적인 환경 설정

의견4) 일반적으로 ~ / .zshrc에서 $ PATH를 내보내 겠지만 zshall 매뉴얼 페이지, 특히 “STARTUP / SHUTDOWN FILES”섹션을 읽을 가치가 있습니다. .zshrc는 대화 형 쉘로 읽혀집니다. 당신의 필요에 부합하지 않는다. 당신이 호출 한 모든 zsh 쉘 (대화식이든 아니든, 로그인이든 아니든 모두)에 대해 $ PATH를 원한다면 .zshenv 가 더 좋은 옵션이다.

의견이 너무 많고 각기 달라서 조금 더 공부가 필요해보입니다.

.zshenv -> .zprofile -> .zshrc -> .zlogin

각각의 역할은 아래와 같다고 합니다.

  • zshenv: 사용자 환경 변수 설정에 사용됩니다. 쉘은 출력을 생성하거나 쉘이 tty에 연결되어 있다고 가정하는 명령을 포함해서는 안됩니다. 이 파일은 항상 원본이됩니다.
  • zprofile: 기본적으로 .zlogrc가 .zlogin과 동일하지만 .zshrc가 직접적으로 소스 화되기 전에 소스화된 것을 제외하고는 .zlogin과 기본적으로 동일합니다. zsh 문서에 따르면 “.zprofile은 ksh 팬을위한 .zlogin ‘대신 사용할 수 있습니다. 두 파일은 함께 사용하도록되어 있지 않지만 필요한 경우 확실히 수행 할 수 있습니다.”
  • zshrc: 대화식 쉘 구성을위한 것입니다. 대화 형 쉘의 옵션은 setopt 및 unsetopt 명령을 사용하여 설정합니다. 또한 쉘 모듈을로드하고, 내역 옵션을 설정하고, 프롬프트를 변경하고, 설정 및 완료 등을 수행 할 수 있습니다. 대화식 셸에서만 사용되는 변수도 설정합니다
  • zlogin: 로그인 쉘의 시작에서 제공됩니다. 이 파일은 종종 startx를 사용하여 X를 시작하는 데 사용됩니다. 일부 시스템은 부팅 할 때 X를 시작하므로이 파일이 항상 유용하지는 않습니다.
  • zlogout: 때때로 단말기를 지우고 재설정하는 데 사용됩니다.

2. 초기 설정

$ ~/.anyenv/bin/anyenv init
  • 간혹 디렉토리가 없으면 아래와 같은 에러가 발생할 수 있습니다.
ANYENV_DEFINITION_ROOT(/Users/{username}/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
> anyenv install --init
  • 그럴땐 아래 명령어로 디렉토리를 초기화 할 수 있습니다.
$ anyenv install --init

3. 사용법

사용법은 간단합니다. 아래와 같이 사용가능한 env를 검색해줍니다.

Renv ~ swiftenv까지 다양한 env를 지원하는걸 볼 수 있습니다.

$ anyenv install --list

설치하고자 하는 언어의 env를 아래와 같이 설치해줍니다.

// env 설치$ anyenv install rbenv
$ anyenv install pyenv
$ anyenv install nodenv
$ exec $SHELL -l
// version 설치$ rbenv install ...
$ pyenv install ...
$ nodenv install ...

예제

b_project

그림의 b_project를 보시면 $ ndenv versions 명령어를 통해 설치된 버전을 확인합니다. 앞에 *표가 되어있는 버전을 해당 프로젝트에서 사용하고 있습니다. 전역으로 설정되어있는 10.15.1 버전으로 설정되어 있는 것을 확인할 수 있습니다.

a_project

그림의 a_project를 보시면 처음에 버전을 찍어보면 10.15.1인데 아래 명령어를 통해 8.12.0 버전으로 바꾸어주는 모습입니다.

$ndenv local 8.12.0

이후 버전을 찍어보면 8.12.0 버전으로 세팅이 됩니다.

ndenv local [version]  // 해당 디렉토리에 버전 설정
ndenv global [version] // 전역 버전 설정

그림과 예제에서 사용한 ndenv는 anyenv에서 아직 지원하지만 현재 Deprecated 상태로 nodenv 사용을 권장하고 있습니다.

2018.12.27 업데이트 된 ndenv README.md

Node.js 와 같은 방식으로 anyenv가 지원하는 모든 언어의 환경설정이 가능합니다.

감사합니다.

Get to know us better!
Join our official channels below.

Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_io
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io

--

--