はじめに
pyenvのインストールに関する情報は溢れかえっていますが、ubuntuではsudoを使用する際にパスがsecure_pathで上書きされてしまい、pyenvを認識してくれなくなる問題の解決を含めて残します。
公式のGitHubリポジトリはこちら
環境
OS: Debian 9.0 stretch
Python: 3.6.3
更新
2019.01.29
apt-getをaptに変更しました
gitのinstall
まずはpyenvをinstallするためにgitを入れる必要があります。
(インストール中の(Y/n)はY(=Yesの意味)としてください)
sudo apt update
sudo apt install -y git
pyenvのinstall
githubからリポジトリをcloneします。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
その後、.profile(.bash_profile)へパスを追加します。(ところで→「.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの?」)
(初めての人向け)
/home/USERNAME
以下に.profileがあるかどうか一度 ls -al ~/
で確認しておくと無駄にはまらないで済むかもしれませんね。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.profile
これは1行目でPYENV_ROOTという環境変数を設定し, 2行目で環境変数PATHにPYENV_ROOT/binを追加する、という処理ですね。
ここで.profile(.bash_profile)を再度読み込むことで追記した設定を適用してください。
source ~/.profile
.profileを再度読み込みました。
もちろん、vimなど何かしらのエディタを使用して.profile(.bash_profile)を開き
sudo vim ~/.profile
以下を追記しても同じことです。
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
その後
which pyenv
を実行し
/home/USERNAME/.pyenv/bin/pyenv
のような結果が返えればOKです。
(ubuntuの場合)groupの追加とsudoersファイル編集
これは$sudo pyenv
時にPATHが引き継がれずにエラーとなる問題の解決です。
色々な解決法がありますが、以下が最も良さそうなので参照させてもらいました。
Debianでも同様な事象は発生するのですが、sudoなしでもpyenv install可能なので、以下はubuntuの場合のみの対応でよいと思います。
【Ubuntu】sudoする際にPATHをどう引き継ぐか
なお、USERNAME
部分は自分のユーザ名に変更してください。
sudo groupadd developer
sudo gpasswd --add USERNAME developer
sudo visudo
Defaults exempt_group="developer"
この後は再度sshログインをしなおすのが確実です。
pythonのinstall
その前に必要なツールをインストールします。
sudo apt install -y gcc make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
と、ここで一度、現在何をインストール可能なのか確認してみましょう。
pyenv install --list
ずらーっとインストール可能なものが羅列されます。
ここではPython3.6.3をinstallします。
(なお, ここでオプションをつけないとmod_wsgiがinstallできないので注意)
なお、ubuntuの場合はsudoをつけて実行してください
pyenv install 3.6.3
#後々にpythonパッケージとしてmod_wsgiをインストールする場合、下記のオプション付でインストールを行います
#env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.3
3.6.3がinstallされていることを確認
pyenv versions
を実行すると
* system
3.6.3 (set by /home/USER_NAME/.pyenv/version)
で3.6.3が追加されていることが確認できます。
pythonを変更し, pipを最新版に更新しておくとよいかと思います。
ちなみに、globalとlocalの違いはこちらを(→pyenvのpyenv local と pyenv globalの違い)。環境を分けるツールなので、基本的にはlocalを使用することが多いと思います。
またまたubuntuの場合にはsudoをつけてください。
pyenv global 3.6.3
pip install --upgrade pip
ついでにpyenv-virtualenvのインストール
pyenvに続いて、pyenv-virtualenvというプラグインもインストールします。
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
.profile(.bash_profile)への追記です。
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.profile
pyenvと同様に.profile(.bash_profile)を再度読み込むことで追記した設定を適用してください。
source ~/.profile
その後、新しい環境myenv
を作成してみます。
ubuntuではsudoです。
pyenv virtualenv 3.6.3 myenv
# なお、このようなオプションがあります
# --system-site-packages <- インストール済みモジュールを使用する
# --no-site-packages <- インストール済みモジュールを全て外した状態で仮想環境が作成される
# 例えば、既に3.6.3環境にインストールされているモジュールを引き継ぐ場合は
# pyenv virtualenv --system-site-packages 3.6.3 myenv
バージョンの一覧を確認することでmyenvが作成されていることがわかると思います。
pyenv versions
system
* 3.6.3 (set by /home/USERNAME/.pyenv/version)
3.6.3/envs/myenv
myenv