You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vagrant配置Pyenv后第二阶段脚本无法识别pyenv命令求助

问题:Vagrant Provision脚本中Pyenv命令找不到,手动SSH后可正常使用

问题描述

使用Vagrant创建Ubuntu虚拟机,通过两个Shell脚本配置Pyenv:

  • 第一个脚本one.sh完成Pyenv安装,并将环境变量配置写入~/.bashrc
  • 第二个脚本two.sh执行pyenv相关命令时,提示pyenv: command not found
  • 但通过vagrant ssh手动登录虚拟机后,pyenv命令可正常执行
  • 尝试为第一个脚本设置reset和reboot选项,问题仍未解决

相关配置文件

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.provision "shell", path: "one.sh", privileged: false
  config.vm.provision "shell", path: "two.sh", privileged: false
end

one.sh

#!/bin/bash
# Install PyEnv
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec "$SHELL"

two.sh

#!/bin/bash
# install python build deps
sudo apt update && sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

pyenv install 3.10
ten=$(pyenv latest 3.10)
pyenv global $ten

# Install Poetry 
curl -sSL https://install.python-poetry.org | python3.10 -
export PATH="/home/vagrant/.local/bin:$PATH"

# Install Nox
python3.10 -m pip install --user --upgrade nox

执行命令:vagrant up --provider=hyperv

原因分析

Vagrant的Shell Provision脚本默认以非交互式Bash会话执行,而~/.bashrc仅在交互式Shell会话中才会自动加载。第一个脚本里的exec "$SHELL"仅能让当前脚本会话加载Pyenv配置,第二个脚本是全新的非交互式会话,无法继承该环境变量,因此找不到pyenv命令。

解决方案

在第二个脚本开头手动加载Pyenv的环境变量配置,无需依赖~/.bashrc的自动加载逻辑。修改后的two.sh如下:

#!/bin/bash
# 手动加载Pyenv配置,确保非交互式会话能识别pyenv命令
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# install python build deps
sudo apt update && sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

pyenv install 3.10
ten=$(pyenv latest 3.10)
pyenv global $ten

# Install Poetry 
curl -sSL https://install.python-poetry.org | python3.10 -
export PATH="/home/vagrant/.local/bin:$PATH"

# Install Nox
python3.10 -m pip install --user --upgrade nox

其他可选方案

  • 将两个脚本合并为一个,让Pyenv配置和后续命令在同一个Shell会话中执行
  • 将Pyenv配置写入~/.profile(部分系统的非交互式登录Shell会加载该文件),但不如手动加载配置可靠

内容的提问来源于stack exchange,提问作者PJ Simpo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:34