Pythonインストール
標準・公式
MacやLinuxならシステムの一部として
/usr/bin/python3 が既にインストールされているので、
何もしなくても使えっちゃ使える。
でも大概そこに入ってるのはちょっと古いバージョンなので、
python.jp/環境構築ガイド
に従って最新版を入れるのがよい。
uv
プロジェクトの環境構築を一切合切面倒見てくれる管理ツール。
ruffと同じチームが開発していて、同じくrust製。
次のワンライナーでプログラム本体が ~/.local/bin/uv に配置される:
curl -LsSf https://astral.sh/uv/install.sh | sh
シェルの設定が書き換えられて PATH を設定してもらえる。
ドットファイルを勝手にいじられたくない人は
INSTALLER_NO_MODIFY_PATH=1 を定義してから実行すれば避けられる。
任意のバージョンのPythonを入れるためのツールとして、 つまりpyenv的な位置付けでも使える。 しかもビルド済みのPythonを python-build-standalone から取ってくるので、自前ビルド環境に左右されずCPUも使わず簡単・高速。
Pythonインストーラーとして使う
https://docs.astral.sh/uv/reference/cli/#uv-python
# バージョン一覧
uv python list
# インストール
uv python install
バージョンを省略すると適当な最新版。
3 とか 3.13 みたいな指定でもその中での最新版を入れられる。
~/.local/share/uv/python/ 以下に配置される。
uv run や uv venv 越しに使う前提ならここにPATHを通す必要はない。
設定
- https://docs.astral.sh/uv/concepts/configuration-files/
- https://docs.astral.sh/uv/reference/settings/
ユーザー設定ファイルは ~/.config/uv/uv.toml:
python-preference = "only-managed"
python-downloads = "manual"
ほかのツールで入れたPythonやシステム標準の /usr/bin/python
まで探しに行って報告しようとするのを抑え、
uv自身で入れたPythonだけに専念してもらうと少し早くなる。
各種コマンドで勝手にPythonをインストールしようとするのを抑えると、
uv python list で利用可能なPythonが表示されなくなってしまう。
--allow-python-downloads で一時的に許可すればよい。
PEP 668 EXTERNALLY-MANAGED が有効なので
uv venv
で仮想環境を作って使う。
ほかにもサブコマンドがたくさん。
rye
“cargo for Python” を目指して開発されている管理ツール。 uvの成熟とともに一般ユーザーにとっての存在意義が薄れていき、 現在は公式に「新しいプロジェクトにはuvのほうがおすすめ」となっている。 今後も実験的な目的で開発は続けられるらしい。
pyenv
https://github.com/pyenv/pyenv
管理者権限なしでホーム以下にインストールできる。 ソースコードを取ってきて自前ビルドするという点で上記uvと異なる。 共有ライブラリやフレームワークなどを有効にしたカスタムビルドに便利、 という使い方も過去にはあったが、 reticulateもuvを使うようになった今となっては…?
-
Homebrew か Git を使ってpyenvをインストール:
brew install pyenv # or git clone https://github.com/pyenv/pyenv.git ~/.pyenv mkdir -p ~/.pyenv/cache -
https://github.com/pyenv/pyenv/wiki を参考に依存ライブラリをインストールしておくとビルドが少し軽くなる。
-
Pythonのインストール先を決める環境変数
PYENV_ROOTを公式推奨の~/.pyenvに設定し、 ついでにPATHも追加しておく。 シェルの設定ファイル (e.g.,~/.bashrc) に次のように追記:if [ -d "${PYENV_ROOT:=${HOME}/.pyenv}" ]; then py_versions=($(ls "${PYENV_ROOT}/versions" | sort -V)) export PY_PREFIX=${PYENV_ROOT}/versions/${py_versions[@]: -1} PATH=${PY_PREFIX}/bin:$PATH unset py_versions fipyenv shellやpyenv localを使ってPythonのバージョンを頻繁に切り替える場合は、 公式の説明どおりにeval "$(pyenv init --path)"やeval "$(pyenv init -)"を設定してshimsを使う方法のほうがいいかもしれないけど、 そうでなければこのようにPATHだけ設定するほうが単純で、 起動時間も短くなる。 -
シェルを再起動して設定を反映し、 必要に応じて環境変数をセットし、 目当てのバージョンを探してインストール:
exec $SHELL -l export PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install -l | less pyenv install 3.11 exec $SHELL -l -
pip のパスを確認し、パッケージを入れる:
which pip3 pip3 install -U setuptools pip pip3 install -r /path/to/requirements.txtよく使うパッケージは
requirements.txtの形でまとめておくと楽。
https://github.com/pyenv/pyenv/wiki/Common-build-problems
Anaconda
Scientificな用途で使いたい場合は Numpy/Scipy などの主要パッケージもまとめて面倒みてくれる Anaconda を使うという選択肢もある。 私は使わない。 GUIのインストーラでもいいし、Homebrewでも入れられる。
ただしPATH上でシステムコマンドを上書きしちゃうヤンチャな面もあるので、
それが気になる人は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 install や setup.py install における
--user オプションの目的地を指定できる。
デフォルトでは ${HOME}/.local 。
MacのFramework buildでは ${HOME}/Library/Python/2.7 とかになる。
現在の設定は
site
の USER_BASE で確認できる (python -m site)。
USER_SITE はその下の {BASE}/lib/python*.*/site-packages に配置され、
sys.path に含まれる。
除外したいときは PYTHONNOUSERSITE をセットするか python -s で起動。
PYTHONSTARTUP
インタラクティブモードで起動するときに読み込むファイルを指定できる。
Versions
https://devguide.python.org/versions/
- 3.14
- 3.13
typing.ReadOnly,typing.TypeIs- Free-threaded CPython
- 3.12
- Generics without
TypeVarorGeneric pathlib.walk()- f-strings improvements
- PEP 668
EXTERNALLY-MANAGED
- Generics without
- 3.11
- 3.10
TypeAliasA | BforUnion[A, B]
- 3.9
listとかdictで直に type hint を書ける。
- 3.8
:=(walrus operator)f"{var=}"for debuggingimportlib.metadata
- 3.7
dataclassesimportlib.resourcesdictinsertion order guaranteed
- 3.6
- f-strings
1_000_000
- 3.5
- 3.4
- 3.3