のむログ

技術メモ / 車 / 音楽 / 雑記 / etc...

こちらは旧ブログになります。

新ブログはこちらに移行しました🙇

Python + pipenv + DjangoをPyCharmで開発する

pipenv

簡単に言えば、複数のプロジェクトでpipを使う際にバージョン関係などを管理してくれるものです。pythonだとpyenvrubyならrbenvなどがあります。

環境

Pythonはpyenvを使っています。pyenvについては省略します。

# pyenvのバージョン
nomunomu:virtual_pip nomunomu$ pyenv --version
pyenv 1.2.8

# Pythonのバージョン
nomunomu:virtual_pip nomunomu$ python --version
Python 3.5.2

# pipのバージョン
nomunomu:virtual_pip nomunomu$ pip --version
pip 9.0.1 from /Users/nomunomu/.pyenv/versions/3.5.2/lib/python3.5/site-packages (python 3.5)

手順

pipenvのインストール

$ pip install pipenv

pipenvで仮想環境を作成

$ cd Desktop/
$ mkdir virtual_pip      # 検証用ディレクトリの作成
$ cd virtual_pip         # 検証用ディレクトリに移動
$ pipenv install         # 仮想環境 と Pipfile を作成
$ ls -a
.       ..      .venv       Pipfile     Pipfile.lock

pipenv installで扱われるPythonのバージョンは、そのディレクトリで認識しているPythonのバージョンとなります。そのためディレクトリごとにPythonのバージョンを変更したい場合には、pyenvなどでpyenv local x.xx.xxxして、各自設定しておいてください。

PipfilePipfile.lockGemと同様でGemfile, Gemfile.lockと同じように扱います。そのためインストールしたいものがあれば、Pipfileに記述するか、コマンドでインストールすることになります。

仮想環境に入る場合には

$ pipenv shell

で、仮想環境に入る事ができます。

ライブラリ群のインストール

ライブラリのバージョンを指定する場合にはバージョンを==の後に指定すればOKです

nomunomu:virtual_pip nomunomu$ pipenv install requests django==1.11.16 djangorestframework django-filter

Installing requests…
Adding requests to Pipfile's [packages]…
Installing django==1.11.16…
✔ Installation Succeeded 

Adding django to Pipfile's [packages]…
Installing djangorestframework…
✔ Installation Succeeded 

Adding djangorestframework to Pipfile's [packages]…
Installing django-filter…
✔ Installation Succeeded 

Adding django-filter to Pipfile's [packages]…
✔ Installation Succeeded 

Pipfile.lock (2aa341) out of date, updating to (a79791)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 

Updated Pipfile.lock (2aa341)!
Installing dependencies from Pipfile.lock (2aa341)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 9/9 — 00:00:03
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

仮想環境に入って、ライブラリ群が正常にインストールされているか確認します。pipenv shellを実行するとpipenv installを実行したディレクトリ名の基でShellが起動します。(virtual_pip) $みたいな感じで

$ pwd
/Users/nomunomu/Desktop/virtual_pip

$ pipenv shell
(virtual_pip) bash-3.2$ pip list
Package             Version   
------------------- ----------
certifi             2018.11.29
chardet             3.0.4     
Django              1.11.16   
django-filter       2.0.0     
djangorestframework 3.9.0     
idna                2.7       
pip                 18.1      
pytz                2018.7    
requests            2.20.1    
setuptools          40.6.2    
urllib3             1.24.1    
wheel               0.32.3  

依存パッケージも同時にインストールされているので、実際に指定したライブラリより多くなっているはずです。

Djangoプロジェクトの作成

Djangoプロジェクトは仮想環境から作成します。そのため、作業する前に仮想環境に入っておきます。

$ pipenv shell
(virtual_pip) bash-3.2$

今回作成するDjangoプロジェクトの名前をdjango-sampleとしておきます。

(virtual_pip) bash-3.2$ django-admin startproject django_sample

作成が完了したら、一旦仮想環境を抜けて、仮想環境が保存されているパスを確認します。このパスを次のPyCharmの設定の時に使うのでメモかコピーをしておいてください。

(virtual_pip) bash-3.2$ exit
exit

$ pipenv --venv
/Users/nomunomu/.local/share/virtualenvs/virtual_pip-zYG2eaTO

pipenv --venvによって出力されるパスはそれぞれ異なりますので、この記事のを指定しても正常に動作しません。

PyCharmのセッティング

PyCharmを起動したら、起動画面よりOpenを選択して作成したDjangoプロジェクトを選択します。この時選択するのはpipenv --venvで出力されたものではなく、Djangoプロジェクト本体です。この記事では/Users/nomunomu/Desktop/virtual_pip/django_sampleになります。

f:id:nomunomu0504:20181209231827p:plain

プロジェクトを開いたら、Command + ,でPreferenceを開きます。そしたら、検索のところでproject interpreterと打ち込むと以下のような画面がでてきます。この画面で、右上のギアマークを選択し、Add Localを選択します。 f:id:nomunomu0504:20181209232153p:plain

そうしたら、フォルダ選択画面になるので、先ほどメモしたディレクトリまで移動します。そのフォルダの中にbinフォルダが存在していて、その中にpythonというファイルが存在します。そのファイルを選択して、OKします。 f:id:nomunomu0504:20181209233254p:plain

そうすると、Project Interpreterの画面がこのような感じに変わると思います。 f:id:nomunomu0504:20181209233614p:plain

ウィンドウ右下のOKを押すと、このプロジェクトをPyCharmで開くと自動的に仮想環境の設定を読み込んでくれるようになります。なので、PyCharm付属のターミナルを設定後に開くと、自動的に仮想環境内でターミナルを開いているのと同じ状態になります。 f:id:nomunomu0504:20181209234201p:plain

これによって自動的にデバッグも仮想環境のDjangoを使って起動する事ができます。f:id:nomunomu0504:20181209234420p:plain

まとめ

とりあえず、この設定方法さえできてしまえば、複数プロジェクトでバージョンの異なるライブラリを利用する時にも、簡単に複数のpipを共存させる事ができます。以上です!