当我通过 ssh 进入 vagrant box 时,如何自动激活 Python venv?

How can I activate a Python venv automatically when I ssh into a vagrant box?

在 Vagrant VM 运行 Ubuntu 16.04 中,我创建了一个 Python 3 虚拟环境,使用:

python3 -m venv /home/vagrant/venv

当我 vagrant ssh 时,我可以使用以下任一方式激活它:

source /home/vagrant/venv/bin/activate

. /home/vagrant/venv/bin/activate

在配置期间,我正在创建文件 /etc/profile.d/login-bash.sh:

cd /vagrant
. /home/vagrant/venv/bin/activate

当我 ssh 进入时,该文件是 运行 因为我从 /vagrant 共享目录开始,但第二行似乎没有做任何事情。

问题已解决。 ~/.profile 将在每次 ssh 登录时 运行:

config.vm.provision "shell", inline: 'echo ". /home/vagrant/venv/bin/activate" > ~/.profile', privileged: false

如果您在 Vagrantfile 中使用以下行,问题将得到解决:

config.vm.provision "shell", inline: 'echo ". /home/vagrant/venv/bin/activate" > ~/.profile', privileged: false

如果您需要激活 python 环境并将目录更改为 /vagrant,请在 Vagrantfile:

中使用以下行
config.vm.provision "shell", inline: 'echo ". /home/vagrant/venv/bin/activate && cd /vagrant" > ~/.profile', privileged: false

在一天结束时,你的 Vagrantfile 应该看起来像(加上你自己的配置):

Vagrant.configure("2") do |config|    
  config.vm.provision "shell", inline: 'echo ". /home/vagrant/venv/bin/activate && cd /vagrant" > ~/.profile', privileged: false
end

不要忘记在终端 运行 vagrant up --provision 使你的更改在 salve 之后生效 Vagrantfile