dotfiles/shell/source/pyenv.sh

114 lines
3.2 KiB
Bash

# https://github.com/pyenv/pyenv-installer
export PYENV_ROOT="$HOME/.pyenv"
# force run those command using pyenv python
alias pip="python3 -m pip"
alias pip3="python3 -m pip"
alias pipx="python3 -m pipx"
alias tox="python3 -m tox"
function pyenv.load
{
if [[ -d $PYENV_ROOT ]]; then
if [[ -f $PYENV_ROOT/bin/pyenv ]]; then
[[ $PATH =~ .*${PYENV_ROOT}.* ]] || path.prepend $PYENV_ROOT/bin
eval "$(pyenv init -)"
# https://github.com/pyenv/pyenv-virtualenv/issues/259#issuecomment-1096144748
eval "$(pyenv virtualenv-init - | sed s/precmd/chpwd/g)"
_pyenv_virtualenv_hook
fi
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
else
echo "pyenv not installed. > pyenv-update"
fi
}
[[ -d $PYENV_ROOT ]] && pyenv.load
function pyenv.help
{
echo "
# Install a specific python version + build virtualenv with it
$ apt-get install -y clang build-essential zlib1g-dev libffi-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev
$ pyenv install -l
# use clang compiler if it raise error
$ pyenv install 3.9.0 || CC=clang pyenv install 3.9.0
$ env PYTHON_CONFIGURE_OPTS='--enable-shared' pyenv install --verbose 3.9.13
$ pyenv virtualenv 3.9.0 nvim
# init working dir to autoload proper env
$ mkdir nvim && echo nvim > nvim/.python-version
$ pyenv versions
"
}
function pyenv.install
{
if [[ ! -f $PYENV_ROOT/bin/pyenv ]]; then
git clone https://github.com/pyenv/pyenv.git $PYENV_ROOT
git clone https://github.com/pyenv/pyenv-virtualenv.git $PYENV_ROOT/plugins/pyenv-virtualenv
else
(cd $PYENV_ROOT && git pull)
(cd $PYENV_ROOT/plugins/pyenv-virtualenv && git pull)
fi
}
function pyenv.update
{
pyenv.install
}
function pyenv.setup_python_version
{
[[ -z $VIRTUAL_ENV ]] && echo "VIRTUAL_ENV not set" && return
echo $(basename $VIRTUAL_ENV) > .python-version
}
function pyenv.setup_flake
{
project_root=$(utils.find_project_root .project)
[[ -z $project_root ]] && project_root=$(utils.find_project_root .git)
[[ -z $project_root ]] && echo "Project root not found" && return
echo '[flake8]
max-line-length = 120' >> $project_root/.flake8
}
function pyenv.setup_pyright
{
[[ -z $VIRTUAL_ENV ]] && echo "VIRTUAL_ENV not set" && return
VENV=$(basename $VIRTUAL_ENV)
VENVPATH=$(dirname $VIRTUAL_ENV)
echo '{
"venvPath": "VENVPATH",
"venv": "VENV",
"reportUnboundVariable": "information",
"reportOptionalMemberAccess": "information"
}' | sed "s,VENVPATH,$VENVPATH," | sed "s,VENV,$VENV," | jq > pyrightconfig.json
}
function pyenv.setup
{
[[ -z $VIRTUAL_ENV ]] && echo "VIRTUAL_ENV not set" && return
pyenv.setup_python_version
pyenv.setup_pyright
pyenv.setup_flake
}
function pyenv.activate {
pyenv activate $*
}
alias pya="pyenv.activate"
function _complete_pyenv_activate
{
local word=${COMP_WORDS[1]}
COMPREPLY=($(compgen -W "$(find $PYENV_ROOT/versions -maxdepth 1 -type l -exec basename {} \; | xargs)" -- ${word}))
}
complete -F _complete_pyenv_activate pyenv.activate
complete -F _complete_pyenv_activate pya