2015-01-25 12 views
9

하스켈 뉴비와 파이썬 남자가 여기 있습니다.cabal 샌드 박스 init가 virtualenv처럼 PATH를 변경하지 않는 이유는 무엇입니까?

여기에 내용이 누락되었을 수 있다고 생각하지만 Yesod's quickstart을 보면 앞에 패키지를 설치하고 앞에 넣으십시오. 나는 다른 곳에서도 같은 패턴을 보았다. 질문 :

  1. 내가 뭔가를 잃어버린거야? 이것은 cabal 샌드 박스를 사용하는 진정한 방법입니까?
  2. sandbox에 yesod-bin을 설치할 수없는 이유는 무엇입니까?
  3. 일부 프로젝트에서 다른 버전의 yesod-bin을 사용하면 어떻게됩니까?
  4. .cabal-sandbox/bin 안에 바이너리를 설치하는 라이브러리가있는 경우 왜 cabal sandbox init이 샌드 박스 버전과 일치하도록 PATH를 변경하지 않습니까?

미리 감사드립니다.

답변

8
  1. 예, 샌드 박스 사용 방법입니다.

    cabal sandbox init은 설치 한 패키지를 추적 할 파일/디렉토리를 만듭니다.

    cabal install some_package은 해당 패키지를 샌드 박스에 설치합니다.

  2. yesod-bin을 샌드 박스에 설치할 수 있습니다. 정말 필요하지 않기 때문에

  3. 읽기 점

  4. cabal sandbox init 2, 경로를 변경하지 않습니다. .bash_profilePATH=.cabal-sandbox/bin:$PATH을 추가하십시오.

    virtual-env와 달리 샌드 박스를 '활성화'또는 '비활성화'할 필요가 없습니다. 디렉토리에 cd을 입력하면 자동으로 활성화됩니다.

    cabal 샌드 박스에서 발견 한 유일한 단점은 샌드 박스를 사용하기 위해서는 루트 디렉토리에 있어야한다는 것입니다. 즉, 하위 디렉토리에있는 경우 cabal install some_package을 실행하면 레벨이 올라간 샌드 박스에 설치되지 않고 cabal 구성 방법에 따라 전역 또는 사용자 데이터베이스에 설치됩니다.

+0

더 나은. 고맙습니다! –

+1

cabal 샌드 박스의 루트 디렉토리에 있지 않은 경우, cabal을 올바른 설정 파일 인'cabal --config = \ cabal.sandbox.config '로 지정하여 해당 샌드 박스에서 계속 작업 할 수 있습니다. – user2407038

6

cabal exec을 사용하면 샌드 박스의 컨텍스트에서 프로그램을 실행할 수 있습니다. 샌드 박스의 bin 폴더를 포함하도록 경로를 변경합니다. 샌드 박스 안에 cabal exec printenv을 실행하면이 파일을 볼 수 있습니다.

cabal의 최신 버전을 사용하면 .cabal 개의 파일없이 폴더에 샌드 박스를 만들 수 있습니다. cabal sandbox init을 실행하면 cabal install에 필요한 종속성 만 허용 할 수 있습니다.

다른 버전의 yesod-bin을 사용하려면 다른 샌드 박스에 설치 한 다음 각각에 cabal exec yesod-bin을 호출하십시오.

(추가 팁 : cabal exec gchi 샌드 박스의 내용을 알고 ghci을 만드는 유용한 명령입니다.) 내가 생각했던 것보다