python-在Vagrant设置期间更新.bashrc和环境变量

我正在使用Vagrant设置一个带有python,pip,virtualenv,virtualenvwrapper和一些要求的盒子.设置外壳程序脚本将the required lines for virtualenvwrapper添加到.bashrc.它进行了非常基本的检查,以确保它们还不存在,从而不会在每项设置中都重复它们:

if ! grep -Fq "WORKON_HOME" /home/vagrant/.bashrc; then
    echo 'export WORKON_HOME=/home/vagrant/.virtualenvs' >> /home/vagrant/.bashrc
    echo 'export PROJECT_HOME=/home/vagrant/Devel' >> /home/vagrant/.bashrc
    echo 'source /usr/local/bin/virtualenvwrapper.sh' >> /home/vagrant/.bashrc

    source /home/vagrant/.bashrc
fi

这似乎很好;设置完成后,这些行位于.bashrc中,我可以ssh到框中并使用virtualenvwrapper.

但是,virtualenvwrapper在配置期间不起作用.在以上部分之后,此下一步将检查pip要求文件并尝试使用virtualenvwrapper安装:

if [[ -f /vagrant/requirements.txt ]]; then
    mkvirtualenv 'myvirtualenv' -r /vagrant/requirements.txt
fi

但这会产生:

==> default: /tmp/vagrant-shell: line 50: mkvirtualenv: command not found

如果我尝试从该Shell脚本中回显$WORKON_HOME,则不会显示任何内容.

我缺少那些可用的环境变量,因此virtualenvwrapper将运行吗?

更新:进一步尝试…似乎在我的shell脚本中执行源/home/vagrant/.bashrc没有影响-我可以在.bashrc文件中放入echo“ hello”,并且在配置期间不会输出(但是是在登录时是否运行源代码/home/vagrant/.bashrc.

我还尝试了在shell脚本中使用su -c“ source /home/vagrant/.bashrc”流浪汉,但这没有什么不同.

更新2:删除了$BASHRC_PATH变量,该变量使问题感到困惑.

更新3:在another question中,我得到了为什么源/home/vagrant/.bashrc无法正常工作的答案:.bashrc文件的第一部分阻止了它以“非交互方式”运行时无法执行任何操作.

解决方法:

Vagrant脚本供应商将以root身份运行,因此其主目录(〜)将为/ root.在脚本中,如果您定义BASHRC_PATH = / home / vagrant,那么我相信您的步骤将起作用:追加到/home/vagrant/.bashrc,然后从中进行采购.

更新:

抓紧我先前的想法^^,因为BASHRC_PATH已正确设置.

或者,我们可以使用.profile或.bash_profile.这是一个简化的示例,它设置环境变量FOO,使其在供应期间和ssh登录后可用:

流浪文件

Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise32"

  $prov_script = <<SCRIPT
if ! grep -q "export FOO" /home/vagrant/.profile; then
  sudo echo "export FOO=bar" >> /home/vagrant/.profile
  echo "before source, FOO=$FOO"
  source /home/vagrant/.profile
  echo "after source, FOO=$FOO"
fi
SCRIPT

  config.vm.provision "shell", inline: $prov_script
end

结果

$vagrant up
...
==> default: Running provisioner: shell...
    default: Running: inline script
==> default: before source, FOO=
==> default: after source, FOO=bar
$vagrant ssh -c 'echo $FOO'
bar
$vagrant ssh -c 'tail -n 1 ~/.profile'
export FOO=bar
上一篇:Centos7 安装使用virtualenvwrapper


下一篇:windows虚拟环境