Рубиновый эквивалент virtualenv? - PullRequest
153 голосов
/ 28 января 2009

Есть ли что-то похожее на утилиту Python virtualenv ?

В основном это позволяет вам устанавливать пакеты Python в изолированную среду, поэтому easy_install django не входит в общесистемный каталог site-packages, он будет идти в каталог, созданный 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?

Ответы [ 8 ]

75 голосов
/ 27 сентября 2010

RVM работает ближе к тому, как работает virtualenv, так как он позволяет помещать в песочницу разные версии ruby ​​и их гемы и т. Д.

62 голосов
/ 30 сентября 2012

Ни песочница, RVM, ни rbenv не управляют версиями гем-зависимостей вашего приложения. Инструмент для этого - bundler .

  • используйте Gemfile в качестве объявления зависимости вашего приложения
  • используйте bundle install для установки явных версий этих зависимостей в изолированном месте
  • используйте bundle exec для запуска приложения
17 голосов
/ 30 сентября 2012

Кажется, никто не упомянул rbenv .

16 голосов
/ 28 января 2009

Думаю, вам понравится песочница .

13 голосов
/ 02 июля 2013

Если вам нужно только установить гемы без полномочий root, попробуйте установить переменную окружения GEM_HOME. Тогда просто запустите gem.

Например:

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
11 голосов
/ 09 ноября 2012

Я упомяну способ, которым я делаю это с Bundler (который я использую с RVM - RVM для управления рубинами и набором глобальных драгоценных камней по умолчанию, Bundler для обработки драгоценных камней, специфичных для проекта)

bundler install --binstubs --path vendor

Выполнение этой команды в корне проекта установит гемы, перечисленные в вашем Gemfile, поместит библиотеки в ./vendor, а все исполняемые файлы в ./bin и все require s (если вы используете bundle console или Bundler требует) будет ссылаться на эти exes и libs.

У меня работает.

4 голосов
/ 20 ноября 2015

Я рекомендую direnv . Это переключатель среды для оболочки.

Перед каждым приглашением проверяется наличие файла ".envrc" в текущем и родительском каталогах. Если файл существует (и авторизован), он загружается в под-оболочку bash, и все экспортированные переменные затем записываются в direnv и затем делают доступной текущую оболочку.

Вот как использовать direnv с ruby-install

+ ruby-install

Добавьте это к ~/.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

Это поместит все драгоценные камни в каталог проекта .direnv/ruby (облегчает открытие драгоценных камней). Bancler поместит двоичные файлы оболочки в .direnv/bin (не более bundle exec!).

+ rbenv

Также возможно использовать rbenv, добавив команду use rbenv в любой файл .envrc. Это активирует rbenv, который, в свою очередь, поместит оболочки ruby ​​в PATH.

Обратите внимание, что для этого не нужно устанавливать rbenv в .bashrc или .zshrc.

+ RVM

Вот наиболее сложный .envrc, который я использую в проектах ruby:

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

rvm используется для выбора правильной версии ruby ​​для вас

Команды компоновки автоматически устанавливают некоторые обычные переменные среды. Пока существует только рубиновый макет. Он устанавливает переменную среды GEM_HOME и ее каталог bin по вашему пути. Поскольку это зависит от версии ruby, обязательно вызывайте ее после «rvm». Так как каждый каталог макетов ruby ​​имеет свой собственный GEM_HOME, вам не нужно использовать наборы гемов rvm.

PATH_add добавляет и расширяет заданный относительный путь. В этом случае я использую это для отделения binstubs-пакетов от моих собственных сценариев bin с bundle install --binstubs .direnv/bundler-bin

Если вы хотите узнать, что именно делают эти команды, сейчас: cat direnv stdlib | меньше

0 голосов
/ 07 декабря 2018

Mineshaft - это проект, над которым я работал в течение некоторого времени и продолжаю работу по разработке.

Он предлагает возможность как создавать виртуальные среды, схожие с тем, как работает virtualenv, так и глобальную установку Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...