Heavy Watal

Pythonインストール

標準・公式

MacやLinuxならシステムの一部として /usr/bin/python が既にインストールされているので、 何もしなくても使えっちゃ使える。 でも大概そこに入ってるのは古い2.7とかなので、 ちゃんと使える3.xを使いたければ python.jp/環境構築ガイド に従って最新版を入れるのが簡単。

pyenv

管理者権限なしでホーム以下にインストールするには pyenv が便利。

  1. HomebrewGit を使ってpyenvをインストール:

    brew install pyenv
    # or
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    mkdir -p ~/.pyenv/cache
  2. Pythonのインストール先を決める環境変数 PYENV_ROOT を公式推奨の ~/.pyenv に設定し、 ついでにPATHも追加しておく。 シェルの設定ファイル (e.g., ~/.bashrc) に次のように追記:

    export PYENV_ROOT=${HOME}/.pyenv
    PATH=${PYENV_ROOT}/bin:$PATH
    PATH=${PYENV_ROOT}/versions/$(pyenv global)/bin:$PATH
    export PATH

    pyenv shellpyenv local を使ってPythonのバージョンを頻繁に切り替える場合は、 公式の説明どおりに eval "$(pyenv init -)" を設定してshimsを使う方法のほうがいいかもしれないけど、 そうでなければこのようにPATHだけ設定するほうが単純で、 起動時間も短くなる。

  3. シェルを再起動して設定を反映し、 目当てのバージョンを探してインストール:

    exec $SHELL -l
    pyenv install -l | less
    pyenv install 3.7.3
  4. インストールしたものを常に使うように設定:

    pyenv global 3.7.3
    exec $SHELL -l
  5. pip のパスを確認し、パッケージを入れる:

    which pip3
    pip3 install -U setuptools pip wheel
    pip3 install -r /path/to/requirements.txt

    よく使うパッケージは requirements.txt の形でまとめておくと楽。

既知の問題

Anaconda

Scientificな用途で使いたい場合は Numpy/Scipy などの主要パッケージもまとめて面倒みてくれる Anaconda を使うという選択肢もある。 GUIのインストーラでもいいし、Homebrewでもいける:

brew cask install anaconda
export PATH=/usr/local/anaconda3/bin:"$PATH"

ただしPATH上でシステムコマンド(curlなど)を上書きしちゃうヤンチャな面もあるので、 それが気になる人はpyenv越しに入れることで汚染を防げる。 全部入りに抵抗がある場合は pyenv install miniconda3-latest から小さくスタートすることも可能。 パッケージ管理では pip の代わりに非公式の conda を使うことになる。

環境変数

https://docs.python.org/3/using/cmdline.html#environment-variables

シェルの設定ファイル(~/.zshrc とか)で export しておく。 一時的に無効したいときは python -E で起動。

PYTHONPATH

import の探索パス (sys.path) の先頭付近に場所を追加できる。 例えば自分で書いたモジュールやパッケージの置き場所を指定しておけば、 いつでも優先的に import できるようになる。

PYTHONUSERBASE

pip installsetup.py install における --user オプションの目的地を指定できる。 デフォルトでは ${HOME}/.local 。 MacのFramework buildでは ${HOME}/Library/Python/2.7 とかになる。

現在の設定は siteUSER_BASE で確認できる (python -m site)。 USER_SITE はその下の {BASE}/lib/python*.*/site-packages に配置され、 sys.path に含まれる。 除外したいときは PYTHONNOUSERSITE をセットするか python -s で起動。

PYTHONSTARTUP

インタラクティブモードで起動するときに読み込むファイルを指定できる。 例えば以下のようなものを書いておくと、 3.4未満の古いPythonでも tab とか ^i で補完できるようになる:

import sys

if sys.version_info < (3, 4):
    import rlcompleter
    import readline
    rlcompleter.__name__  # suppress F401
    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")
    del readline, rlcompleter
else:
    del sys

対話モードをさらに便利にするには IPython を使う。

関連書籍