search
LoginSignup
152

More than 3 years have passed since last update.

posted at

updated at

pyenv と pyenv-virtualenv をインストールする

はじめに

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行目で環境変数PATHPYENV_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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
152