디렉터리/프로젝트 로컬 환경 변수를 설정하는 좋은 방법이 있습니까?

디렉터리/프로젝트 로컬 환경 변수를 설정하는 좋은 방법이 있습니까?

PATH저는 다양한 환경 변수(예: 다양한 버전의 clang실행 파일, PYTHONPATH여러 외부 모듈) 가 필요한 여러 프로젝트를 진행해 왔습니다 . 프로젝트 작업을 할 때마다 이러한 환경 변수를 직접 수정해야 합니다(예: .zshrc/ .bashrc및 변경 source). 가끔 잊어버리고 실수를 합니다.

이를 자동화하는 데 도움이 될 수 있는 방법/프로젝트가 있습니까?가상 환경파이썬에서는 어떻습니까?

답변1

특정 디렉터리에 대한 환경 변수를 설정하도록 설계된 성숙한 도구가 있습니다.

이 목적을 위해 설계된 다른 도구와 비교할 때,direnv그 중 최고입니다. 주요 이점 중 하나는 지원한다는 것입니다.제거하다디렉토리를 종료할 때 환경 변수를 변경하십시오.

direnv쉘 환경 전환기입니다. bash, zsh, tcsh, fish shell 및 elvish를 연결하여 로드하거나 로드하는 방법을 알고 있습니다.제거하다환경 변수는 현재 디렉터리에 따라 다릅니다. 이를 통해프로젝트별 환경~/.profile파일을 어지럽히 지 않고 변수를 정리합니다 .

direnv다른 유사한 도구와의 차이점은 무엇입니까?

  • direnvGo로 작성되었습니다.서둘러요Python으로 작성된 대응 항목과 비교
  • direnv지원하다제거하다특정 디렉터리를 종료할 때 환경 변수 사용
  • direnv많은 껍질로 덮여있다

유사한 프로젝트

  • 환경 모듈- 가장 오래된(좋은 의미에서) 환경 로딩 시스템 중 하나
  • 자동 환경- Light는 제거를 지원하지 않습니다. Python으로 작성하면 매우 느립니다.
  • zsh-autoenv- 풍부한 기능을 갖춘 autoenv와스마트 CD: 이벤트 입력/나가기, 중첩, 숨기기(Zsh에만 해당).
  • ~~아스다프~~, asdf는 동일한 실행 파일의 다른 버전을 전환하기 위한 플러그인 관리자입니다. 전혀 컨텍스트 전환기가 아닙니다.

답변2

add-zsh-hookzsh를 사용하면 이벤트를 호출하여 쉽게 수행할 수 있습니다 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나는 (작은 추가 기능을 통해) 쉘과 함께 사용하는데 정말 잘 작동합니다.

관련 정보