2018年1月に発売された「Software Design 2018年2月号」のPythonライブラリの記事を読みました。
![ソフトウェアデザイン 2018年 02 月号 [雑誌] ソフトウェアデザイン 2018年 02 月号 [雑誌]](https://images-fe.ssl-images-amazon.com/images/I/519wipRrrAL._SL160_.jpg)
- 出版社/メーカー: 技術評論社
- 発売日: 2018/01/18
- メディア: 雑誌
- この商品を含むブログ (1件) を見る
仕事でPythonを使うことが多く、使用するライブラリの仕組み等を理解していなかったので良い勉強になりました。
第1章 パッケージ管理の基礎を知ろう
Pythonライブラリのディレクトリ構成
Pythonのライブラリは大きく分けて次の3種類のディレクトリに格納される。
標準ライブラリディレクトリ
Pythonの標準ライブラリが格納されるディレクトリ。
~ $python3 >>> import datetime >>> print(datetime.__file__) /usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/datetime.py >>> import json >>> print(json.__path__) ['/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json']
このディレクトリにはユーザが独自にパッケージをインストールすることはない。
site-packages ディレクトリ
サードパーティ製のモジュールが格納されるディレクトリ。システムの全利用者が利用するパッケージをインストールするディレクトリで、システム管理者が導入・アップデートの管理を行う。
pip install コマンドを実行すると、このディレクトリに格納されることになる。
~ $pip3 install twine ... 省略... Installing collected packages: twine Successfully installed twine-1.9.1 ~ $python3 >>> import twine >>> print(twine.__file__) /usr/local/lib/python3.6/site-packages/twine/__init__.py
Unix系OSの場合、OSが提供するツールとしてPythonが利用されている。そのため、site-packagesディレクトリにインストールすると、OS提供のツールの動作やバージョンアップ時に問題が発生する可能性がある。可能な限り、後述するユーザ別のsite-packagesディレクトリや仮想環境にインストールして利用するようにした方が良い。
ユーザ別 site-packages ディレクトリ
サードパーティ製のモジュールを格納するディレクトリであるが、システム全体にインストールするのではなく、各ユーザが自由にインストールできるディレクトリ。
pip install –user コマンドを実行するとこのディレクトリに格納されることになる。
~ $whoami masayuki_kato ~ $ ~ $pip3 install --user twine ... 省略... Installing collected packages: twine Successfully installed twine-1.9.1 ~ $python3 >>> import twine >>> print(twine.__file__) /Users/masayuki_kato/Library/Python/3.6/lib/python/site-packages/twine/__init__.py
Python開発の必須ツール
pip
Pythonパッケージのインストール・アンインストールを行うコマンドラインユーティリティである。Python2系のパッケージを管理する場合はpipコマンドを使い、Python3系のパッケージを管理する場合はpip3コマンドを実行する。
venv
Pythonで開発を行う際にはプロジェクト毎に独立した仮想環境を作成するのが一般的である。
仮想環境の作成
下記の要領で仮想環境のディレクトリを作成する。
Python $pwd /Users/masayuki_kato/Python Python $python3 -m venv ./test_env Python $ls test_env/ bin include lib pyvenv.cfg
仮想環境の切り替え
LinuxやmacOSでは下記の要領で仮想環境に切り替えることができる。
Python $source ./test_env/bin/activate (test_env) Python $
仮想環境でのパッケージの扱い
仮想環境でpipコマンドによるパッケージインストールを行うと、仮想環境内にインストールされる。これは元の環境や他の仮想環境からは利用することができない。
# 仮想環境でpandasをpip3 install する (test_env) Python $pip3 install pandas ... 省略... Installing collected packages: six, python-dateutil, pytz, numpy, pandas Successfully installed numpy-1.14.0 pandas-0.22.0 python-dateutil-2.6.1 pytz-2017.3 six-1.11.0 (test_env) Python $python3 # pandasをimportしてもエラーは発生しない >>> import pandas >>> quit() (test_env) Python $deactivate Python $python3 # 仮想環境を抜けた状態でpandasをimportするとエラーが発生する >>> import pandas Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'pandas'
pipenv
pipenvはpipとvenvの両方の機能を持つユーティリティで、仮想環境の管理とパッケージのインストールを行うことができる。
pipenvではプロジェクト(仮想環境)毎にPipfileというファイルを作成して利用するパッケージを登録し、専用の仮想環境を自動的に作成してインストールすることができる。
# pipenvのインストール Python $pip3 install --user pipenv ... 省略... Successfully built pipenv virtualenv-clone Installing collected packages: virtualenv, virtualenv-clone, pew, pyflakes, mccabe, pycodestyle, flake8, pipenv Successfully installed flake8-3.5.0 mccabe-0.6.1 pew-1.1.2 pipenv-9.0.3 pycodestyle-2.3.1 pyflakes-1.6.0 virtualenv-15.1.0 virtualenv-clone-0.2.6
pipenvをインストールしたら、次はプロジェクトの作成を行う。
# プロジェクトの作成を行う Python $mkdir proj1 Python $cd proj1/ proj1 $pipenv install
しかし、ここでエラーが発生した。pipenvコマンドがcommand not foundとなったので、一度pipenvをアンインストールした。後、pip3 install pipenvでコマンドでsite-packagesディレクトリにインストールし、再度プロジェクトの作成コマンドを実行したが、再び下記のエラーが発生した。
proj1 $pipenv install Creating a virtualenv for this project… Warning: it looks like pew is not in your PATH. We cannot continue until this is resolved」
エラー文をネット検索したらvirtualenvとpipenvとpewをアンインストールしろと書いてあったので、アンインストール後に再度 pip3 install pipenv コマンドでpipenvをインストールした。
# pipenvを再インストール後にpipenv installを行う proj1 $pipenv install ...省略... Installing dependencies from Pipfile.lock (c23e27)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00 To activate this project's virtualenv, run the following: $ pipenv shell # Pipfileが作成されていることを確認する proj1 $ls Pipfile Pipfile.lock
pipenv installコマンドでプロジェクトにパッケージを登録することができる。
proj1 $pipenv install dateutils Installing dateutils… ...省略... Adding dateutils to Pipfile's [packages]… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (fc4265)! # インストールしたパッケージはPipfileに記録される proj1 $cat Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [packages] dateutils = "*" [dev-packages]
pipenvでは開発環境のみで使用するパッケージを開発用パッケージとしてインストールしたり、updateコマンドで最新版に更新できたりする。
コメント