Existe algo semelhante ao utilitário virtualenv do Python ?
Basicamente, ele permite que você instale pacotes Python em um ambiente em área restrita, para easy_install django
não entrar no diretório de pacotes de sites em todo o sistema, mas no diretório virtualenv-created.
Por exemplo:
$ 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
Existe algo parecido com isto para RubyGems?
python
ruby
virtualenv
dbr
fonte
fonte
Nem o sandbox, o RVM nem o rbenv gerenciam as versões das dependências de gemas do seu aplicativo. A ferramenta para isso é o empacotador .
bundle install
para instalar versões explícitas dessas dependências em um local isoladobundle exec
para executar seu aplicativofonte
Ninguém parece ter mencionado rbenv .
fonte
Eu acho que você vai gostar de sandbox .
fonte
$HOME
?! Para que diabos as gemas precisam disso ? O triste é que é a melhor coisa que eu já vi no trabalho. Até o empacotador padroniza a instalação no caminho ruby do sistema.Mencionarei a maneira como faço isso com o Bundler (que eu uso com o RVM - RVM para gerenciar os rubis e um conjunto padrão de gemas globais, o Bundler para lidar com gemas específicas do projeto)
A execução deste comando na raiz de um projeto instalará as gemas listadas no seu Gemfile, colocará as bibliotecas
./vendor
e todos os executáveis em./bin
e todos osrequire
s (se você usarbundle console
ou o Bundler exigir) farão referência a esses exes e bibliotecas.Funciona para mim.
fonte
vendor.noindex
o Spotlight pesquisa não será cheio de dados indexados a partir das gemas vendidas.rbenv
, mas isso é outra história), uma vez que isola o gemset e a versão ruby. Nada é instalado em todo o sistema e todo projeto tem todas as suas dependências bem declaradas. Dica: usebundle config path vendor
para nunca esquecer esse argumento.Se você precisar instalar apenas gemas como não raiz, tente definir a
GEM_HOME
variável de ambiente. Então apenas corragem
.Por exemplo:
fonte
export GEM_HOME=$HOME/.local/gems
GEM_HOME=$HOME/.local
e compartilhar a mesma.bin
pasta. Nesse caso, não precisamos atualizar nossa$PATH
variável.~/.bashrc
e pronto). +1Eu recomendo direnv . É um alternador de ambiente para o shell.
Antes de cada prompt, ele verifica a existência de um arquivo ".envrc" nos diretórios atual e pai. Se o arquivo existir (e autorizado), ele será carregado em um sub-shell bash e todas as variáveis exportadas serão capturadas pelo direnv e disponibilizadas no shell atual.
Aqui está como usar o direnv com o ruby-install
+ instalação do ruby
Adicione isso ao
~/.direnvrc
Instale o ruby-install (
brew install ruby-install
) e instale um monte de rubis.E faça alguns links simbólicos por conveniência:
E finalmente em qualquer projeto
.envrc
:use ruby 2.0
Isso colocará todas as gemas no
.direnv/ruby
diretório do projeto (facilita a abertura das gemas). o empacotador colocará binários de wrapper.direnv/bin
(não maisbundle exec
!).+ rbenv
Também é possível usar o rbenv adicionando o
use rbenv
comando em qualquer.envrc
arquivo. Isso ativará o rbenv, que por sua vez colocará os invólucros de rubi no PATH.Observe que não é necessário instalar o rbenv no .bashrc ou no .zshrc para que isso funcione.
+ RVM
Aqui está o .envrc mais complicado que eu uso em projetos ruby:
rvm é usado para selecionar a versão correta do ruby para você
Os comandos de layout definem automaticamente algumas das variáveis de ambiente usuais. Por enquanto, apenas o layout ruby existe. O que ele faz é definir a variável de ambiente GEM_HOME e seu diretório bin para o seu caminho. Como depende da versão ruby, certifique-se de chamá-la após "rvm". Como cada diretório de layout ruby possui seu próprio GEM_HOME, você não precisa usar os gemsets do rvm.
PATH_add precede e expande o caminho relativo fornecido. Nesse caso, eu uso isso para separar os binstubs do bundler dos meus próprios scripts bin com
bundle install --binstubs .direnv/bundler-bin
Se você quiser descobrir exatamente o que esses comandos fazem, por enquanto: cat
direnv stdlib
| Menosfonte
Mineshaft é um projeto em que trabalho há algum tempo e continuo trabalhando no desenvolvimento.
Ele oferece a capacidade de criar ambientes virtuais semelhantes ao funcionamento do virtualenv e também pode instalar o Ruby globalmente.
fonte