Slide 1

Slide 1 text

Python実⾏環境の話 2022-11-10 東北⼤学⼤学院情報科学研究科乾研究室 ⼭⼝健史

Slide 2

Slide 2 text

Pythonの基本ディレクトリ構造 p 知っていればいい部分 → p python3.X が実⾏ファイル本体 p python3 python はシンボリックリンク p pip pip3 はスクリプト(本体はPythonライブラリ) p python 実⾏ファイルとフルパスで紐付いている p lib/python3.X/site-packages にインストールする p https://pypi.org/ がレポジトリ p Pythonで sys.path を確認してみよう p 標準ライブラリ群に続いて lib/python3.X/site-packages がある p (どこか)が⼤事 p Linuxのシステム⽤ は /usr (この場合 python や pip はない) p Homebrewシステム⽤だと /opt/homebrew/Cellar/[email protected] p Mac⽤のCPython公式インストーラを使うと /Library/Frameworks/Python.framework/Versions/3.X (どこか) ├ bin │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : shebangで フルパスを 指定されている インストール先 1 Un*x系の場合 (Windowsはちょっと違う)

Slide 3

Slide 3 text

仮想環境の基本的な概念 p 以下のものを作る p 本体環境の実⾏ファイルへのリンク p 本体と分離された site-packages p 仮想環境を優先させるためのスクリプト p activate とか p これはおまけ p 標準ライブラリは本体環境を参照する p venv でも virtualenv でも pipenv でも pyenv-virtualenv でも このあたりは変わらない p どこに仮想環境ができるか? なにが本体環境になるか? は違う p pipenv pyenv-virtualenv は他に いろいろやってくれる (どこか) 本体 ├ bin │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : hogehoge 仮想環境 ├ bin │ ├ activate │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ │ │ ├ pip │ : : : (例) python -m venv hogehoge リンク shebang インストール先 2

Slide 4

Slide 4 text

pyenv p pyenv は仮想環境ではない p 複数の環境を⼀つのディレクトリの下で管理するもの p 3.9系と3.10系の同居とか、CPython と PyPy の同居 とかが⽬的 p 指定したバージョンを⾃動でインストールしてくれるのが便利 p ソースをダウンロードして⾃動ビルド p インストーラをダウンロードして⾃動インストール p 複数の環境に存在する実⾏ファイルへのエイリアスを⼀つのディレクトリの下で管理する p それが shims 配下の実⾏ファイル p shims 配下の実⾏ファイルを実⾏すると、どれかの環境の実⾏ファイルに処理を委譲する p その分ちょっとだけオーバーヘッドがある 3

Slide 5

Slide 5 text

anaconda3-2022.05 ├ bin │ ├ conda │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : pyenv 3.8.15 ├ bin │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : 3.9.15 ├ bin │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : 3.10.8 ├ bin │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : 3.11.0 ├ bin │ ├ python │ ├ python3 │ ├ python3.X │ ├ pip │ ├ pip3 │ ├ scrapy │ : ├ lib │ ├ python3.X │ │ ├ site-packages │ : : ${PYENV_ROOT}/shims ├ conda ├ python ├ python3 ├ python3.8 ├ pip ├ pip3 ├ scrapy scrapyがインストールされているバージョンが アクティブになっている時だけ shims/scrapy を実⾏可能 ${PYENV_ROOT}/versions 4

Slide 6

Slide 6 text

Anaconda p Anaconda は Python のディストリビューション(配布形態)の⼀つ p 独⾃のパッケージレポジトリを持つ ← conda コマンドで管理する p CPython の各種OS向けコンパイル済みバイナリ p OS側ライブラリのコンパイル済みバイナリ p 各種Pythonライブラリの各種OS向けコンパイル済みバイナリ p pip (https://pypi.org/) とは別の依存関係を持っている p conda と pip は混ぜて使わない p Aというパッケージが、「pip の B」と「conda の C」から要求されていて、要求バージョンが違う時 p pip install B → conda install C の順に実⾏するか、 逆順に実⾏するかで A のインストール元とバージョンが変わる p 依存関係でトラブルが起きると、conda からも pip からも⾃動解決できない p (重要)conda で⼊るものは可能な限り conda で⼊れてから、どうしても⼊らないものだけ pip で⼊れる 5

Slide 7

Slide 7 text

昔語り p numpy のようなライブラリを⼊れる時、C⾔語のビルド環境と知識が必要だった p pip install numpy するとソースがダウンロードされてC⾔語のビルドが始まる(みたいなイメージ) p Anaconda はコンパイル済みバイナリを配布しているのが便利だった p Windows 環境ではCコンパイラが普通に⼊っていないので特に便利 p 今は https://pypi.org/ で、OS ごと CPU アーキテクチャごと Python バージョンごとの バイナリ提供が広くおこなわれるようになった p Windows でも Mac でもまず困らない p (CPUアーキテクチャが新しくなった時は⼤変だった) p 今は Anaconda でなく CPython で環境を使ってもほぼ困らない p Anaconda 標準付属ライブラリで⾜りなくなったら CPython に移⾏してもよい 6