【问题标题】:How can I activate a Python venv automatically when I ssh into a vagrant box?当我 ssh 进入 vagrant box 时,如何自动激活 Python venv?
【发布时间】:2017-05-30 11:27:12
【问题描述】:

在运行 Ubuntu 16.04 的 Vagrant VM 中,我使用以下方法创建了 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 共享目录开始,但第二行似乎没有做任何事情。

【问题讨论】:

  • 您在 ssh 到服务器时运行的 shell 与配置期间使用的 shell 不同。你确定venv没有被激活吗?
  • 这就是我在/etc/profile.d/ 中创建文件的原因 - 我认为此目录中的文件在登录时运行?我知道这很有效,因为第一行按预期运行
  • 如果你已经在使用虚拟机,为什么不跳过虚拟环境,根据需要配置VM的Python安装呢?
  • 我更喜欢将 Python 项目与操作系统隔离
  • 也许 profile.d 中有其他脚本在 login-bash.sh 之后被读取,它会覆盖您的 venv 设置的路径?

标签: python bash ubuntu vagrant python-venv


【解决方案1】:

如果您在 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

后生效

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 2019-04-09
      • 2018-09-11
      • 1970-01-01
      • 2021-06-13
      • 2017-12-26
      • 2016-04-09
      • 2021-10-23
      • 1970-01-01
      相关资源
      最近更新 更多