Установите PyEnv в Vagrantfile

У PyEnv нет отличного установщика, и требуется некоторая обработка после установки, чтобы получить его работать правильно (например, изменить .bashrc, чтобы добавить к $PATH и сделать два вызова pyenv). Мне интересно, как кто-нибудь смог установить PyEnv через Vagrantfile. Я хочу создать повторно используемый образ для разработки, чтобы мне не пришлось проходить процесс переустановки, если я уничтожу эту виртуальную машину.

Я попытался запустить установщик и внести рекомендуемые изменения в .bashrc, чтобы заставить pyenv работать, но когда я захожу в свой ящик Vagrant, pyenv не устанавливается. Я пытался переместить скрипт pyenv в /bin/pyenv, но его там нет, когда машина запускается. Как мне заставить это работать?

Для справки, вот сценарий, который я сейчас запускаю, который не может установить PyEnv на машину Vagrant во время шага подготовки Vagrant в Vagrantfile:

#! /usr/bin/env bash

# REQUIRES: curl, git

curl -L https://raw.githubusercontent.com/pyenv/pyenv-
installer/master/bin/pyenv-installer | bash

cat >> /home/ubuntu/.bashrc << 'EOF'

export PATH="$PATH:~/.pyenv/bin"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

EOF

exec $SHELL

И пытаюсь переместить pyenv под /bin:

#! /usr/bin/env bash

# REQUIRES: curl, git

curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
mv ~/.pyenv/bin/pyenv /bin/pyenv

cat >> /home/ubuntu/.bashrc << 'EOF'

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

EOF

exec $SHELL

Ни работы. Как мне это установить?


person Dagrooms    schedule 14.11.2017    source источник


Ответы (1)


Ваша проблема в том, что вы запускаете скрипт через подготовку оболочки Vagrant от имени пользователя root, поэтому обновление выполняется для вашего пользователя root. Когда вы подключаетесь к виртуальной машине по ssh, вы входите в систему со своим бродячим пользователем, поэтому она недоступна.

Когда вам нужно изменить это в вашем Vagrantfile, чтобы запустить скрипт, используя опцию privileged

config.vm.provision "shell", path: "xxx", privileged: false
person Frederic Henri    schedule 15.11.2017