Heavy Watal

Pythonインストール

標準・公式

MacやLinuxならシステムの一部として /usr/bin/python が既にインストールされているので、 何もしなくても使える。 違うバージョンを使いたければ python.org公式のインストーラ で入れるのも悪くない。

pyenv

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

% brew install pyenv
% exec $SHELL -l
% pyenv install -l | less
% pyenv install 3.6.2
% pyenv global 3.6.2
% eval "$(pyenv init -)"
% python --version

eval "$(pyenv init -)" をシェル起動時に自動で行うために、 ~/.zshrc 的なファイルに下のようなコマンドを追加しておく。

if which pyenv >/dev/null; then eval "$(pyenv init -)"; fi

あとは pip でパッケージを入れる。

% pip install -U setuptools
% pip install -U seaborn biopython
% pip install -U flake8 psutil

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 を使うことになる。

Source

万がいちソースコードからビルドしたい場合の手順

  1. 必要なパッケージをインストールしておく:

    Ubuntuなら

    % sudo apt-get install build-essential libreadline6-dev libsqlite3-dev libgdbm-dev zlib1g-dev libbz2-dev liblzma-dev
    

    CentOSなら

    % sudo yum groupinstall "Development Tools"
    % sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel gdbm-devel xz-devel
    

    Macなら

    % brew install gdbm libressl readline sqlite xz
    
  2. ダウンロードして展開:

    % wget -O- https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tar.xz | tar xJ
    
  3. configure してビルド:

    % cd Python-3.5.3/
    % ./configure --help
    % ./configure --prefix=${HOME}/Python
    % make
    

    モジュールをビルドするのに必要なヘッダファイルが見つからなかったとかで 警告メッセージが表示されるが、だいたい問題ない。 使いそうなモジュールが含まれている場合は、 必要なヘッダファイルを持ってそうなパッケージ (libXXX-dev のようなもの) を パッケージマネージャからインストールして make し直すとよい。

    Macの場合は --enable-framework を付けてビルドしておかないと使えないモジュールが出てくるので注意。 Homebrewで入れたライブラリを利用する場合は明示的に位置指定が必要。 (特に readline, sqlite, openssl/libressl は keg-only なので注意):

    DST=${HOME}/Python
    ./configure --enable-framework=${DST} --prefix=${DST} CPPFLAGS="-I$(brew --prefix)/include -I$(brew --prefix)/opt/readline/include -I$(brew --prefix)/opt/sqlite/include -I$(brew --prefix)/opt/libressl/include" LDFLAGS="-L$(brew --prefix)/lib -L$(brew --prefix)/opt/readline/lib -L$(brew --prefix)/opt/sqlite/lib -L$(brew --prefix)/opt/libressl/lib"
    

    ユニコードにはバイト幅の異なる UCS-4 と UCS-2 という2種類があり、 Python 2の configure のデフォルトは UCS-2。 sys.maxunicode で確認できる。 Python 3.3以降ではUCS-4のみ。 Python 2をucs4でビルドするには ./configure --with-threads --enable-unicode=ucs4

  4. インストール (古いバージョンに上書きせず共存させるため altinstall):

    % make altinstall
    

環境変数

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
    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")
    del readline, rlcompleter

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

関連書籍