Ruby相当于virtualenv?

dbr*_*dbr 157 ruby python 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
Run Code Online (Sandbox Code Playgroud)

RubyGems有这样的东西吗?

Van*_*yen 78

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

  • ivanjovanovic.为什么你发现RVM比沙盒更好? (8认同)
  • 试过沙箱和RVM,并认为RVM是更好的解决方案. (5认同)

pje*_*pje 64

沙盒,RVM和rbenv都不管理应用程序的gem依赖项的版本.这个工具就是捆绑器.

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

  • 另外,我个人认为人们过度使用rbenv/rvm.如果你不是绝对需要在同一台机器上安装多个独立的ruby版本 - 你可能不会 - 不要使用rbenv/rvm.他们的"抽象"不是免费的; 我保证你必须花时间调试它们.我的建议:只需使用操作系统的软件包管理器安装ruby.最新的是最好的. (4认同)
  • 是的,这个答案目前具有误导性。从来自 Python 领域的人的角度来看,Ruby 的捆绑器 gem 的工作方式与“sudo pip install”完全相同,除非您运行详细命令。`bundle install` 并不**使用隔离位置,而是尝试通过一切必要的手段从 Gemfile 中安装 gem。这包括破坏系统 ruby​​。https://github.com/rubygems/rubygems/pull/5327 正在取得进展 (4认同)
  • 我想念什么吗?默认情况下,Bundler仍尝试在系统范围内安装软件包。 (2认同)
  • 在现代工作流程中,隔离环境几乎是非可选的。如果您依赖系统ruby和系统软件包管理器,则*否*可以确保您的安装可重复,并且在部署时会遇到麻烦。当然,您有时会陷入与安装怪物的战斗中。那也是一件好事。因为您在开发环境中解决了问题,所以您不必在实际环境中解决问题。重复一遍,如果您从未获得代码付款,请*永远不要使用系统环境。为了保持理智,请使用隔离的环境。 (2认同)
  • 当前推荐的使用bundle作为此答案的OP的方法需要在创建Gemfile之后和运行“bundle install”之前执行额外的步骤,即设置bundle在调用gem命令时将使用的路径:“bundle config set --”本地路径“供应商/捆绑包”。这将确保 gems 安装在本地目录中,并且不会干扰系统甚至用户环境,其行为与 python 的 venv、pipenv、virtualenvwrapper、poetry 等非常相似。 (2认同)

Xua*_*uan 18

似乎没人提到rbenv.

  • rbenv 是一个 ruby​​ 管理器,但它在包级别(相当于 virtualenv)本身并不提供能够提供虚拟环境的 gemset 管理器。 (4认同)

dyl*_*nfm 16

我想你会喜欢沙箱.

  • 神圣的废话,重写`$ HOME` ?! 宝石究竟需要什么_that_ for?可悲的是,这是我见过的最好的工作.即使捆绑器默认安装在系统ruby路径中. (9认同)
  • sandbox在4年内没有更新(最后一次提交是在2008年12月),RVM仍在积极开发中(最后一次提交是昨天) (6认同)

iai*_*ain 15

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

bundler install --binstubs --path vendor
Run Code Online (Sandbox Code Playgroud)

在项目的根目录中运行此命令将安装Gemfile中列出的gem,将libs放入./vendor,./bin并且所有requires 中的所有可执行文件(如果您使用bundle console或Bundler需要)将引用这些exes和libs.

适合我.

  • 这也是我所做的(使用“rbenv”,但那是另一个故事),因为它隔离了 gemset 和 ruby​​ 版本。系统范围内没有安装任何内容,每个项目都已明确声明其所有依赖项。提示:使用“捆绑配置路径供应商”永远不要忘记该参数。 (3认同)
  • 对于 macOS 上的小提示,如果您将路径命名为“vendor.noindex”,您的 Spotlight 搜索将不会因从供应商的 gem 索引的数据而混乱。 (2认同)

mpb*_*mpb 15

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

例如:

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc
Run Code Online (Sandbox Code Playgroud)