virtualenv에 해당하는 루비?


165

Python 유틸리티 virtualenv 와 비슷한 것이 있습니까?

기본적으로 Python 패키지를 샌드 박스 환경에 설치할 수 있으므로 easy_install django시스템 전체 사이트 패키지 디렉토리에 들어 가지 않고 virtualenv가 만든 디렉토리에 있습니다.

예를 들면 다음과 같습니다.

$ virtualenv test
New python executable in test/bin/python
Installing setuptools...cd .........done.
$ cd test/
$ source bin/activate
(test)$ easy_install tvnamer
Searching for tvnamer
Best match: tvnamer 0.5.1
Processing tvnamer-0.5.1-py2.5.egg
Adding tvnamer 0.5.1 to easy-install.pth file
Installing tvnamer script to /Users/dbr/test/bin

Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.egg
Processing dependencies for tvnamer
Finished processing dependencies for tvnamer
(test)$ which tvnamer 
/Users/dbr/test/bin/tvnamer

RubyGems에 이와 같은 것이 있습니까?

답변:


84

RVM 은 다른 루비 버전과 보석 등을 샌드 박스 할 수 있기 때문에 virtualenv 작동 방식에 더 가깝습니다.


5
샌드 박스와 RVM을 모두 시도하고 RVM이 훨씬 더 나은 솔루션이라고 생각하십시오.
ivanjovanovic

9
이반 조 바노비치. 샌드 박스보다 RVM이 더 좋은 이유는 무엇입니까?
pwan

67

샌드 박스, RVM 또는 rbenv는 앱의 gem 종속성 버전을 관리하지 않습니다. 이를위한 도구는 bundler 입니다.

  • 응용 프로그램의 종속성 선언 으로 Gemfile 을 사용하십시오.
  • bundle install이러한 종속성의 명시 적 버전을 격리 된 위치에 설치 하는 데 사용
  • bundle exec응용 프로그램을 실행 하는 데 사용

6
또한 개인적으로 사람들은 rbenv / rvm을 과도하게 사용한다고 생각합니다. 동일한 머신에 여러 개의 분리 된 루비 버전이 필요하지 않을 경우 rbenv / rvm을 사용하지 마십시오. 그들의 "추상"은 무료로 오지 않습니다. 언젠가 그것들을 디버깅하는 데 시간을 소비해야 할 것입니다. 내 충고 : 운영 체제의 패키지 관리자와 함께 루비를 설치하십시오. 최신이 최고입니다.
pje

6
뭔가 빠졌습니까? 번 들러는 여전히 기본적으로 패키지 시스템 전체를 설치하려고합니다.
detly

6
격리 된 환경은 현대 작업 흐름에서 거의 비 선택적입니다. 이 시스템 루비와 시스템 패키지 관리자에 의존하는 경우, 당신은 NO가 당신의 설치 횟수가 반복 될 것입니다 보장과 얼굴을 물린 것 그게 전부는 배포 시간을 온다. 중 물론 당신은 가끔 설치 괴물과 싸우고 속도가 느려 것입니다. 그것도 좋은 것입니다. 개발 환경에서 문제를 해결하므로 실제 환경에서 문제를 해결할 필요가 없습니다. 코드 비용을 지불 하는 경우 시스템 환경을 절대 사용 하지 마십시오 . 위생을 위해 격리 된 환경을 사용하십시오.
Shayne

19

아무도 rbenv를 언급하지 않은 것 같습니다 .


rbenv는 루비 관리자이지만 패키지 수준 (virtuenv와 동일)에서는 기본적으로 가상 환경을 제공 할 수있는 gemset 관리자를 제공하지 않습니다.
yekta

16

샌드 박스 를 좋아할 것 같습니다 .


9
이런 헛소리 $HOME? 보석에 필요한 것은 무엇입니까 ? 안타깝게도 그게 내가 본 일 중 최고의 것입니다. 번 들러조차도 시스템 루비 경로에 기본적으로 설치됩니다.
Chris R

6
샌드 박스는 ~ 4 년 내에 업데이트되지 않았으며 (마지막 커밋은 2008 년 12 월에 이루어짐) RVM은 여전히 ​​활발한 개발 중입니다 (마지막 커밋은 어제)
dbr

16

Bundler를 사용 하여이 작업을 수행하는 방법에 대해 언급합니다 (RVM과 함께 루비와 기본 전역 보석 세트를 관리하는 RVM, 프로젝트 별 보석을 처리하는 Bundler)

bundler install --binstubs --path vendor

프로젝트의 루트에서이 명령을 실행하면 Gemfile에 나열된 gem을 설치하고 libs를 넣고 ./vendor모든 실행 파일을 ./bin모든 requires 에 넣습니다 (사용하는 경우)bundle console 하거나 번 들러가 필요한 경우)이이 exe와 lib를 참조합니다.

나를 위해 작동합니다.


macOS에있는 사람들을위한 유용한 팁입니다. vendor.noindexSpotlight 검색 경로 가 공급 업체 보석에서 색인 된 데이터로 어지럽히 지 않는 이름을 지정하면 말입니다 .
iain

1
이것은 rbenv보석 세트와 루비 버전을 분리하기 때문에 (와 함께 하지만 다른 이야기입니다) 것입니다. 시스템 전체에 설치되는 것은 없으며 모든 프로젝트에는 모든 종속성이 잘 선언되어 있습니다. 팁 : bundle config path vendor그 주장을 잊지 마십시오.
nandilugio

15

root가 아닌 것으로 gem을 설치해야하는 경우 GEM_HOME환경 변수를 설정하십시오 . 그런 다음 실행하십시오 gem.

예를 들면 다음과 같습니다.

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc

대박! OSX에서 해당 폴더는 숨겨져 있습니다.export GEM_HOME=$HOME/.local/gems
Bruno

1
GEM_HOME=$HOME/.local같은 .bin폴더를 공유 하도록 사용 하기 가 더 쉬울 수 있습니다 . 이 경우 $PATH변수 를 업데이트 할 필요가 없습니다 .
Bruno


지금까지 가장 깨끗한 무 종속 접근 방식은 업데이트 할 때 서로 충돌하지 않는 도구를 설치하는 데 아직 보았습니다 (남은 것은 별명을 추가 ~/.bashrc하고 완료 한 것입니다). +1
역설

4

direnv를 추천 합니다 . 쉘의 환경 전환기입니다.

각 프롬프트 전에 현재 및 상위 디렉토리에 ".envrc"파일이 있는지 확인합니다. 파일이 존재하고 권한이 부여 된 경우, 파일은 bash 서브 쉘에로드되고 내 보낸 모든 변수는 direnv에 의해 캡처 된 다음 현재 쉘을 사용할 수있게됩니다.

다음은 루비 설치와 함께 direnv를 사용하는 방법입니다

+ 루비 설치

에 이것을 추가하십시오 ~/.direnvrc

use_ruby() {
  local ruby_root=$HOME/.rubies/$1
  load_prefix "$ruby_root"
  layout_ruby
}

ruby-install ( brew install ruby-install)을 설치하고 많은 루비를 설치하십시오.

ruby-install ruby 1.9.3
ruby-install ruby 2.0.0
ruby-install ruby 2.2.0

그리고 편의를 위해 두 개의 심볼릭 링크를 만드십시오.

ln -s .rubies/1.9 ruby-1.9.3-p*
ln -s .rubies/2.0 ruby-2.0.0
ln -s .rubies/2.2 ruby-2.2.0

그리고 마지막으로 모든 프로젝트에서 .envrc:

use ruby 2.0

이렇게하면 모든 gem이 프로젝트의 .direnv/ruby디렉토리에 놓입니다 (보석을 쉽게 열 수 있습니다). 번 들러는 래퍼 바이너리를 넣지 .direnv/bin않습니다 (더 이상 bundle exec!).

+ rbenv

rbenv를 사용하여 use rbenv명령을 추가 할 수도 있습니다..envrc파일에 . 그러면 rbenv가 활성화되어 루비 래퍼가 PATH에 배치됩니다.

이것이 작동하기 위해 rbenv를 .bashrc 또는 .zshrc에 설치할 필요는 없습니다.

+ RVM

루비 프로젝트에서 사용하는 가장 복잡한 .envrc는 다음과 같습니다.

rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin

rvm은 적합한 루비 버전을 선택하는 데 사용됩니다

레이아웃 명령은 일반적인 환경 변수 중 일부를 자동으로 설정합니다. 현재는 루비 레이아웃 만 존재합니다. 그것이하는 일은 GEM_HOME 환경 변수와 경로의 bin 디렉토리입니다. 루비 버전에 의존하기 때문에 "rvm"다음에 호출해야합니다. 각 루비 레이아웃 디렉토리에는 자체 GEM_HOME이 있으므로 rvm의 gemset을 사용할 필요가 없습니다.

PATH_add는 주어진 상대 경로를 앞에 추가하고 확장합니다. 이 경우 번들로 binstub을 내 bin 스크립트와 분리하는 데 사용합니다.bundle install --binstubs .direnv/bundler-bin

해당 명령이 정확히 수행하는 작업을 찾으려면 다음과 같이하십시오. cat direnv stdlib| 적게


2
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다. - 검토에서
jezrael

@ jezrael 귀하의 의견에 감사드립니다!
Shin Kim

1
슈퍼, 문제 없습니다.
jezrael

1

Mineshaft 는 한동안 작업 해왔고 개발 작업을 계속하고있는 프로젝트입니다.

또한 virtualenv의 작동 방식과 유사한 가상 환경을 생성 할 수 있으며 루비를 전체적으로 설치할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.