Created 2019年1月12日14:27
Updated 2019年1月16日1:56
Categories
Python
少し前に読んだ記事で、Pythonのパッケージ周りのベストプラクティスについて書いた記事がありました。
その記事では様々なツールの使い方や存在意義を細かく記述しており、読んでいて色々と参考になりました。
ただ、Pythonの初心者や小さなプログラムしか開発しないような方には内容が少し煩雑すぎるとも思いましたので、小規模な開発ならこれで大丈夫だろうという構成を書いておきます。
というかPython界隈はサードパーティー製の管理ツールが多すぎですよね。そういったツールは流行り廃りが激しく、いちいち調査するのが面倒です。
実は標準機能だけで十分使えるので、こちらの方法も知っておくと便利だと思います。
一応書いておきますが、この記事は先の記事を批判するものではありません。先の記事はよくまとまっており、「pipenvを使えばおk」という結論もそれはそれでアリな気がします。むしろ私もpipenvについてはちゃんと調査すべきかもしれません。
pipとvenvだけです。後述しますが、複数のPythonのバージョンが必要でなければこれで十分でしょう。
pip
pipはPythonのパッケージ管理システムです。ライブラリのインストールを行う際に使用します。
venv
venvはPythonの環境分離をしてくれるコマンドです。
複数のプロジェクトで作業する場合、必要なライブラリもプロジェクトごとに違う場合が多いですよね。そんな時、システムのライブラリを汚さずにプロジェクトごとにライブラリを管理できるのがvenvです。
※ Ubuntuでvenvを使用する場合は、sudo apt install python3-venv
を実行する必要があります。
まずはvenvで仮想環境を作成します。プロジェクトのルートディレクトリで、
python -m venv venv
実行すると、カレントディレクトリにvenvというディレクトリが作成されます。
仮想環境に入るには、Linuxの場合
source venv/bin/activate
Windowsの場合は、
venv/Scripts/Activate.ps1 # Powershell
# もしくは
venv/Scripts/Activate.bat # コマンドプロンプト
で入る事ができます。仮想環境に入るとプロンプトの先頭に(venv)
が付きます。
(venv) $ which python
project/venv/bin/python
venv内には仮想環境専用のpipコマンドやpythonコマンドなどが作成されています。
仮想環境を新しく作ったら、次のコマンドでpipをアップデートしてください。
python -m pip install -U pip
これでプロジェクトの準備ができました。あとはpipで必要なライブラリをインストールしていきましょう。
ちなみに、仮想環境を抜ける場合はdeactivate
コマンドを実行してください。また、仮想環境が要らなくなったらvenvフォルダを削除する事でアンインストールする事ができます(システムのコマンドやライブラリ等には一切影響しないので、安心して削除して大丈夫です)。
例えばrequestsをインストールする場合は、
pip install requests
でインストールできます。
プロジェクトで利用するライブラリが多くなってくると、環境を作り直したり別のPCで作業したりする際にいちいち再インストールするのが面倒ですよね。
そんな時は、requirements.txt
というテキストファイルを用意します。
progressbar2
requests
mutagen
pillow
argparse
selenium
beautifulsoup4
click
このファイルをpipコマンドで指定すると、書いてあるライブラリを全てインストールできます。
pip install -r requirements.txt
バージョンを固定したい・限定したい場合、
docopt == 0.6.1 # 0.6.1 に固定
keyring >= 4.1.1 # 4.1.1 以上のバージョン
coverage != 3.5 # 3.5 以外のバージョン(多分最新が入ると思います)
のように指定できます。
開発中は、必要なライブラリが増えたらrequirements.txtに追記してpip install -r requirements.txt
を再度実行するような感じで良いと思います。
開発環境とプロダクション環境で必要なライブラリが異なる事もあるかと思います。
そんな時はrequirementsフォルダを作成し、development.txtとproduction.txtを作ると良いと思います。
requirements/
├── development.txt
└── production.txt
requirements.txtはただのテキストファイルなので、pipでの引数の指定を変えることで簡単にインストールするライブラリ群を切り替えることができます。
プロジェクト開始時は、以下のコマンドを打てばOKです。
$ cd path/to/project
$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install -U pip
(venv) $ touch requirements.txt
(venv) $ wget https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore -O .gitignore
最後の行では、gitignoreのPythonサンプルを取ってきています(めっちゃ便利)。
プロジェクトに必要なファイルはgitignore含めてたったの3つです。venvはgitでは管理されないため実質2つなのでメンテも楽です。
project/
├── .gitignore
├── requirements.txt
└── venv
(あとはREADME.mdとかLICENSEとか付けると素敵だと思います!)
公式から提供されているツールしか使わないため、シンプルで安定した運用ができます。あとWindowsでも動きます(むしろUbuntuより簡単に動くのでマジでおススメです)。
事前準備も特に要らないため、Python界隈にひしめく雑多なツールの調査に時間をかけずにすみます。
また、要らなくなったらプロジェクトやvenvのフォルダを消すことで簡単に仮想環境をアンインストールでき、余計な管理コマンドや設定ファイルが増えないのも良い点だと思います。
Pythonのバージョンがシステムにインストールされているものしか使えないため、特定のPythonバージョンでしか動かないようなライブラリは使えません。
また、venvはPython 3.3から公式に導入されているため、それ以前のバージョンでは使えないと思います。
よって、Python 2.7が必要になるようなプロジェクトには使えません(とは言ってもPython 2.7は今年でEoLですので、今更使う理由はない・・・はずです)。
この構成は当然ですがライブラリなどには使えません。ライブラリを作る場合はsetup.pyが必要です(とは言ってもsetup.pyだけで良いのですが・・・)。
それと、冒頭で紹介した記事ではrequirements.txtがレガシーと書いてありましたが、ちょっと探した限りではそんな記述は一切見つかりませんでした。
最新版のpipドキュメントにもrequirements.txt使えって書いてあります。
どこを参照したのか分かりませんが(もしくは個人的な裁量で言っているのかもしれませんが)、シンプルなプロジェクトならrequirements.txtでも十分使えますし、使ってよいと思います。
ただ私の調査不足かもしれませんので、そういった記述がありましたら教えていただけるとありがたいです。