Pyenv не показывает все версии при использовании в качестве sudo - PullRequest
0 голосов
/ 25 мая 2018

Я установил 3.5.2 и 3.5.3 версию, используя pyenv.

# pyenv versions
* system (set by /usr/local/pyenv/version)
  3.5.2
  3.5.3

Но когда я запускаю эту команду как sudo (не вход в систему как root), она не дает мне все версии.

$ sudo /usr/local/bin/pyenv versions
* system (set by /root/.pyenv/version)

Я пытался установить путь PYENV_ROOT, но это также не работает.

$ export PYENV_ROOT=/usr/local/pyenv/
$ sudo /usr/local/pyenv/bin/pyenv versions
* system (set by /root/.pyenv/version)

У меня уже есть путь, установленный в .bash_profile в myuser

$ cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export PYENV_ROOT=/usr/local/pyenv/
export PATH="/usr/local/pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Также устанавливается в root user

$ sudo cat /root/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export PYENV_ROOT=/usr/local/pyenv/
export PATH="/usr/local/pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Я использую centos

$ cat /etc/issue
CentOS release 6.9 (Final)

1 Ответ

0 голосов
/ 30 июня 2018
$ export PYENV_ROOT=/usr/local/pyenv/
$ sudo /usr/local/pyenv/bin/pyenv versions

Это не работает, потому что PYENV_ROOT не будет передано в окружение в sudo.Попробуйте это:

$ sudo PYENV_ROOT=/usr/local/pyenv/ /usr/local/pyenv/bin/pyenv versions

или это:

$ export PYENV_ROOT=/usr/local/pyenv/
$ sudo -E /usr/local/pyenv/bin/pyenv versions

-E сделает переменные окружения переданными в pyenv.На справочной странице sudo:

 -E, --preserve-env
             Indicates to the security policy that the user wishes to preserve their existing environment variables.  The security policy may return an error if the user does not have permission to
             preserve the environment.

 --preserve-env=list
             Indicates to the security policy that the user wishes to add the comma-separated list of environment variables to those preserved from the user's environment.  The security policy may
             return an error if the user does not have permission to preserve the environment.

.bash_profile в корне не работает, потому что sudo не будет загружать его в этом случае.Вы можете сослаться на this , если вы предпочитаете писать конфигурацию в .bash_profile.

...