Рубиновый эквивалент virtualenv?
-
20-08-2019 - |
Вопрос
Есть ли что-то похожее на утилиту 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?
Решение
РВМ работает ближе к тому, как работает virtualenv, поскольку позволяет вам изолировать различные версии ruby и их драгоценные камни и т.д.
Другие советы
Ни sandbox, ни RVM, ни rbenv не управляют версиями зависимостей gem вашего приложения.Инструментом для этого является упаковщик.
- используйте Gemfile Файл Gemfile в качестве объявления зависимости вашего приложения
- использование
bundle install
для установки явных версий этих зависимостей в изолированное местоположение - использование
bundle exec
чтобы запустить ваше приложение
Кажется, никто не упоминал rbenv.
Я думаю, тебе понравится песочница.
Если вам нужно устанавливать gems только от имени, не являющегося root, попробуйте установить GEM_HOME
переменная среды.Тогда просто беги gem
.
Например:
$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
Я упомяну, как я делаю это с помощью Bundler (который я использую с RVM - RVM для управления rubies и набором глобальных драгоценных камней по умолчанию, Bundler для обработки драгоценных камней, специфичных для проекта)
bundler install --binstubs --path vendor
Выполнение этой команды в корневом каталоге проекта приведет к установке драгоценных камней, перечисленных из вашего Gemfile, помещению библиотек в ./vendor
, и любые исполняемые файлы в ./bin
и все require
s (если вы используете bundle console
или требуется пакетник) будет ссылаться на эти exes и библиотеки.
Работает на меня.
Я рекомендую диренв.Это переключатель среды для оболочки.
Перед каждым запросом он проверяет наличие файла ".envrc" в текущем и родительском каталогах.Если файл существует (и авторизован), он загружается во вложенную оболочку bash, и все экспортированные переменные затем фиксируются direnv, а затем становятся доступными текущей оболочке.
Вот как использовать direnv с ruby-установить
+ ruby-установить
Добавьте это к ~/.direnvrc
use_ruby() {
local ruby_root=$HOME/.rubies/$1
load_prefix "$ruby_root"
layout_ruby
}
Установить ruby-установить (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
каталог (упрощает открытие драгоценных камней).bundler поместит двоичные файлы-оболочки в .direnv/bin
(не более bundle exec
!).
+ rbenv
Также можно использовать rbenv, добавив use rbenv
команда в любом .envrc
файл.Это активирует rbenv, который, в свою очередь, поместит ruby-оболочки в PATH.
Обратите внимание, что для этого нет необходимости устанавливать rbenv в .bashrc или .zshrc.
+ РВМ
Вот самый сложный .envrc , который я использую в проектах ruby:
rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin
rvm используется для выбора подходящей для вас версии ruby
команды компоновки автоматически устанавливают некоторые из обычных переменных окружения.На данный момент существует только макет ruby.Что он делает, так это устанавливает переменную окружения GEM_HOME и ее каталог bin в ваш path.Поскольку это зависит от версии ruby, обязательно вызывайте его после "rvm".Поскольку у каждого каталога компоновки ruby есть свой собственный GEM_HOME, вам не нужно использовать наборы драгоценных камней rvm.
PATH_add добавляет и расширяет заданный относительный путь.В этом случае я использую это, чтобы отделить bundler binstubs от моих собственных bin-скриптов с bundle install --binstubs .direnv/bundler-bin
Если вы хотите узнать, что именно делают эти команды, на данный момент:кошка direnv stdlib
| меньше
Шахтный Ствол это проект, над которым я работаю уже некоторое время и продолжаю разработку.
Он предлагает возможность как создавать виртуальные среды, аналогичные тому, как работает virtualenv, так и устанавливать Ruby глобально.