![디렉터리/프로젝트 로컬 환경 변수를 설정하는 좋은 방법이 있습니까?](https://linux55.com/image/5729/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%2F%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%20%EB%A1%9C%EC%BB%AC%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EC%A2%8B%EC%9D%80%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
PATH
저는 다양한 환경 변수(예: 다양한 버전의 clang
실행 파일, PYTHONPATH
여러 외부 모듈) 가 필요한 여러 프로젝트를 진행해 왔습니다 . 프로젝트 작업을 할 때마다 이러한 환경 변수를 직접 수정해야 합니다(예: .zshrc
/ .bashrc
및 변경 source
). 가끔 잊어버리고 실수를 합니다.
이를 자동화하는 데 도움이 될 수 있는 방법/프로젝트가 있습니까?가상 환경파이썬에서는 어떻습니까?
답변1
특정 디렉터리에 대한 환경 변수를 설정하도록 설계된 성숙한 도구가 있습니다.
이 목적을 위해 설계된 다른 도구와 비교할 때,direnv
그 중 최고입니다. 주요 이점 중 하나는 지원한다는 것입니다.제거하다디렉토리를 종료할 때 환경 변수를 변경하십시오.
direnv
쉘 환경 전환기입니다. bash, zsh, tcsh, fish shell 및 elvish를 연결하여 로드하거나 로드하는 방법을 알고 있습니다.제거하다환경 변수는 현재 디렉터리에 따라 다릅니다. 이를 통해프로젝트별 환경~/.profile
파일을 어지럽히 지 않고 변수를 정리합니다 .
direnv
다른 유사한 도구와의 차이점은 무엇입니까?
direnv
Go로 작성되었습니다.서둘러요Python으로 작성된 대응 항목과 비교direnv
지원하다제거하다특정 디렉터리를 종료할 때 환경 변수 사용direnv
많은 껍질로 덮여있다
유사한 프로젝트
- 환경 모듈- 가장 오래된(좋은 의미에서) 환경 로딩 시스템 중 하나
- 자동 환경- Light는 제거를 지원하지 않습니다. Python으로 작성하면 매우 느립니다.
- zsh-autoenv- 풍부한 기능을 갖춘 autoenv와스마트 CD: 이벤트 입력/나가기, 중첩, 숨기기(Zsh에만 해당).
- ~~아스다프~~, asdf는 동일한 실행 파일의 다른 버전을 전환하기 위한 플러그인 관리자입니다. 전혀 컨텍스트 전환기가 아닙니다.
답변2
add-zsh-hook
zsh를 사용하면 이벤트를 호출하여 쉽게 수행할 수 있습니다 chpwd
.
env_on_chdir () {
case $PWD in
/home/user/path/to/dir )
export GO111MODULE=on;
;;
/home/user/other/dir )
export NO_COLOR=true;
;;
* )
# change background, when entering any other directory
export GO111MODULE=off;
unset NO_COLOR;
;;
esac
}
# add env_on_chdir to chpwd_functions
add-zsh-hook chpwd env_on_chdir
자세한 내용은 다음을 참조하세요.https://www.refining-linux.org/archives/42-ZSH-Gem-8-Hook-function-chpwd.html.
답변3
예, 관리가 너무 많고 개인 소지품이 너무 많습니다.
항상 사용할 수 있도록 플랫폼에 적합한 이름 범위를 확보하는 데 대부분의 노력을 기울이는 것이 좋습니다. PYTHONPATH는 좋은 예입니다. Ruby 프로젝트에서 이를 재사용하고 싶지 않을 것입니다. .bashrc
더 쉬운 유지 관리를 위해 주석을 사용하여 그룹을 그룹화하고 레이블을 지정할 수 있습니다.
이렇게 하는 것이 항상 가능한 것은 아닙니다. 충돌이 있는 경우(또한 개별 파일을 사용하는 대신 편집이 필요함) 프레임워크별 설정 파일이 필요한 경우가 있습니다. 한 가지 방법은 별칭을 설정하여 다음과 같이 실행하는 것입니다.
예를 들어
alias pp='. ~/pp.setup' # For using Python
alias rb='. /rb.setup' # For using Ruby
변수를 사용/설정하고 전달된 인수로만 전환하거나 최신이 아닌 콘텐츠로만 전환하는 "전환기"와 유사한 함수를 만들 수도 있습니다.
답변4
당신은 그것을 사용할 수 있습니다디렌프디렉터리 변경 시 환경 변수를 로드합니다. 홈페이지에서:
direnv는 쉘 환경 전환기입니다. 현재 디렉토리를 기반으로 환경 변수를 로드하거나 언로드하기 위해 bash, zsh, tcsh, fish shell 및 elvish를 연결하는 방법을 알고 있습니다. 이를 통해 ~/.profile 파일을 복잡하게 만들지 않고도 프로젝트별 환경 변수를 사용할 수 있습니다.
xonsh
나는 (작은 추가 기능을 통해) 쉘과 함께 사용하는데 정말 잘 작동합니다.