BETA

Windows + Python + pipenv でらくらく開発環境構築

投稿日:2019-08-22
最終更新:2019-08-22

普段、プライベートでは Rails を主に使っているんですが、仕事では主に Python を使ってプログラミングをしています。
Python を触り始めたのはここ2年位なんですが、Python の開発環境を作成する方法が様々あって、それなりに苦労してきました。
変遷としてはこんな感じです。(会社で使っている PC が Windows なので、Windows での変遷を書いてます)

  1. ローカルに Python と必要なパッケージをインストール。
    1-1. Anaconda を試したが、重すぎてすぐに止めた。
  2. ローカルに Python をインストール。パッケージは venv で作成した環境にインストール。
  3. ローカルに Python と pipenv をインストール。パッケージは venv で作成した環境にインストール。 ← イマココ

2.の段階では、requirements.txt を使ってインストールされているパッケージの管理をしていました。しかし、パッケージに変更があるたびに、pip freeze > requirements.txtをやるのが煩わしくなってきたことと、pip install -r requirements.txtをしたときに、本番環境に開発用のパッケージまでインストールされることに悩んでいました。
このとき、Ruby で言うところの Bundler のようなものがないと不便だなあと思っていました。

そして 3.のやり方を知って2.までの課題を解決することができました。

環境構築の容易さ、パッケージのバージョン管理の容易さ等々を鑑みると、Windows 環境でのベストプラクティスなのかなと思います。

というわけで、今回は 3. の方法で Python の開発環境を整備する方法について書いていきたいと思います。

なお、Python 2 については触れません。今日日 Python2 を使っていようものなら、小学生にまでディスられる始末ですので。参考
また、venv は Python 3.3 から追加されているので、3.3 以前の環境では、virtualenv などの利用を検討してみてください。この記事では virtualenv についても触れません。

Python のインストール

何はともあれ、Python をインストールしましょう。
Windows の場合、Python 自身のバージョン管理ツールである pyenv が使えないので、公式サイトから必要なバージョンの Python をダウンロードします。
Windows で複数のバージョンの Python を使用したい場合は、素直に複数のバージョンをのインストーラをダウンロードしてインストールしましょう。あとは、PATH を適切に通す必要があります。

pipenv のインストール

続いて pipenv をインストールします。
pipenv は以下のコマンドでインストールできます。

pip install pipenv  

仮想環境の作成

pipenv はパッケージの依存関係を管理する他、仮想環境の作成を行えます。
pipenv で仮想環境を作成すると、デフォルトではグローバルなフォルダ(AppData\Local\Programs\Pythonなど)に環境が作成されます。プロジェクトのフォルダ直下に仮想環境が作られてほしいので、次の環境変数を設定します。

PIPENV_VENV_IN_PROJECT=true

環境変数の設定が終わったら、プロジェクトのルートフォルダを作成して、以下のコマンドで仮想環境を作成します。

pipenv install --python 3  

3.5 と 3.7 が混在しているなど、複数の3系のバージョンがインストールされている時に、仮想環境で使う Python のマイナーバージョンを指定する場合は、以下のコマンドを実行します。

pipenv install --python 3.5  

仮想環境のアクティベート

仮想環境をアクティベートするには以下のコマンドを実行します。

.  .venv/Scripts/activate.ps1  

pipenv で作成した仮想環境の場合、Activate までのパスの前にドット(.)をつけてあげるのがポイントですね。pipenv を使い始めた当初、これがわからず嵌ってしまいました。。。

仮想環境から抜けるにはdeactivateを実行します。

パッケージのインストール

pipenv でパッケージをインストールするには次のコマンドを実行します。開発環境でのみ使いたいパッケージの場合--devオプションを付けます。

pipenv install requests  
pipenv install --dev flake8  

また、バージョンを指定してインストールする場合は、以下のように実行します。

pipenv install django==2.0  

バージョンの指定方法については、こちらも参考にしてみてください。

パッケージをインストールすると、pipfile にパッケージの情報が自動的に追記されます。

[[source]]  
name = "pypi"  
url = "https://pypi.org/simple"  
verify_ssl = true  

[dev-packages]  
autopep8 = "*"  
flake8 = "*"  

[packages]  
django = "*"  

[requires]  
python_version = "3.7"  

これまではpip freeze > requirements.txtなどをしてインストールしているパッケージを管理していましたが、煩わしさが一気に解消できました。
既存の pipfile をもとにしてパッケージをインストールする場合は、次のように実行します。

pipenv install  

こうすることで、[dev-packages] を除いたパッケージ(=本番環境に入れたいパッケージ)をインストールできます。[dev-packages] も含めてインストールする場合は次のコマンドを実行します。

pipenv install --dev  

パッケージのアンインストール

パッケージのアンインストールは次のコマンドを実行します。

pipenv uninstall requests  

uninstall コマンドでは install コマンドで利用できるすべてのオプションの外、--all--all-devの2つのオプションが用意されています。
どちらも仮想環境からパッケージをすべて削除しますが、--all-devでは pipfile からも該当のパッケージの記載を削除します。

まとめ

Python の開発環境の作成方法についてまとめましたが、今後ももっといい方法があれば追記していきたいと思います。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@toyocyの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう