Ruby相当于virtualenv?

时间:2009-01-28 09:24:14

标签: python ruby virtualenv

是否有类似于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 个答案:

答案 0 :(得分:75)

RVM更接近virtualenv的工作原理,因为它可以让你对不同的红宝石版本和它们的宝石进行沙盒等。

答案 1 :(得分:62)

沙盒,RVM和rbenv都不管理应用程序的gem依赖项的版本。该工具是bundler

  • 使用Gemfile作为您的应用程序的依赖声明
  • 使用bundle install将这些依赖项的显式版本安装到隔离的位置
  • 使用bundle exec来运行您的应用

答案 2 :(得分:17)

似乎没有人提到rbenv

答案 3 :(得分:16)

我想你会喜欢sandbox

答案 4 :(得分:13)

如果您只需要将gem作为非root用户安装,请尝试设置GEM_HOME环境变量。然后运行gem

例如:

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

答案 5 :(得分:11)

我将提到我使用Bundler进行此操作的方式(我使用RVM - RVM来管理rubies和一组默认的全局宝石,Bundler来处理项目特定的宝石)

bundler install --binstubs --path vendor

在项目的根目录中运行此命令将安装Gemfile中列出的gem,将lib放在./vendor中,以及./binrequire中的所有可执行文件(如果你使用bundle console或Bundler需要的)会引用这些exes和libs。

适合我。

答案 6 :(得分:4)

我建议direnv。它是shell的环境切换器。

在每次提示之前,它会检查是否存在" .envrc"当前目录和父目录中的文件。如果该文件存在(并且已授权),则将其加载到bash子shell中,然后由direnv捕获所有导出的变量,然后使其可用于当前shell。

以下是how to use 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目录下(使开放的宝石更容易)。 bundler会将包装器二进制文件放在.direnv/bin中(不再是bundle exec!)。

+ rbenv

通过在任何use rbenv文件中添加.envrc命令,也可以使用rbenv。这将激活rbenv,而rbenv又会将ruby包装器放入PATH中。

请注意,没有必要在.bashrc或.zshrc中安装rbenv以使其正常工作。

+ RVM

这是我在ruby项目中使用的最复杂的.envrc:

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

rvm用于为您选择正确的红宝石版本

布局命令自动设置一些常用的环境变量。目前只存在ruby布局。它的作用是将GEM_HOME环境变量及其bin目录设置为您的路径。因为它取决于ruby版本,所以请务必在" rvm"之后调用它。由于每个ruby布局目录都有自己的GEM_HOME,因此您不需要使用rvm的gemsets。

PATH_add会预先添加并扩展给定的相对路径。在这种情况下,我使用它将bundler binstubs与我自己的bin脚本隔离bundle install --binstubs .direnv/bundler-bin

如果你想知道这些命令到底做了什么,目前:cat direnv stdlib |少

答案 7 :(得分:0)

Mineshaft是一个我已经从事一段时间的项目,并将继续进行开发。

它提供了创建类似于virtualenv工作原理的虚拟环境的功能,并且还可以全局安装Ruby。