【发布时间】:2015-06-16 15:40:30
【问题描述】:
我正在使用 Vagrant 设置一个带有 python、pip、virtualenv、virtualenvwrapper 和一些要求的盒子。配置 shell 脚本将 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 脚本中执行 source /home/vagrant/.bashrc 没有效果 - 我可以将 echo "hello" 放入 .bashrc 文件中,但事实并非如此配置期间的输出(但如果我在登录时运行source /home/vagrant/.bashrc。
我也在 shell 脚本中尝试过su -c "source /home/vagrant/.bashrc" vagrant,但没有什么不同。
更新 2:删除了 $BASHRC_PATH 变量,这使问题变得混乱。
更新 3: 在 another question 我得到了关于为什么 source /home/vagrant/.bashrc 不起作用的答案:.bashrc 文件的第一部分阻止它在运行“不以这种方式交互”。
【问题讨论】:
-
我不知道为什么这被否决了……我做错了什么?
标签: python shell vagrant virtualenvwrapper