A Complete Beginner's Guide to Djangoのチュートリアルを参考にDjangoの環境を構築してみる。
チュートリアルでの環境構築
チュートリアルではPython 3.6.2, Django 1.11.4と仮想環境を構築するVirtualenvをインストールしている。
macOSの場合に実行しているコマンドを整理すると以下の通り。その他、チュートリアルではWindows, Linuxでのインストール方法も説明してあるので参考になる。
$ brew install python3 $ python3 --version Python 3.6.2 $ sudo pip3 install virtualenv $ mkdir myproject $ cd myproject $ virtualenv venv -p python3 $ source venv/bin/activate $ pip install django==1.11.4
Pipenvを使った環境構築
上記の方法でもよいが、今回はpipとVirtualenvを連携して管理できるPipenvで環境を構築してみる。
pyenvのインストール
PipenvではPythonのバージョン管理ができるpyenvと連携できるようなのでまずはpyenvをインストールする。
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
試しにanaconda3-5.0.1
をインストールしてglobal
に設定しておく。
$ pyenv install anaconda3-5.0.1 $ pyenv global anaconda3-5.0.1 $ python --version Python 3.6.3 :: Anaconda, Inc. $ pyenv versions system * anaconda3-5.0.1 (set by /home/vagrant/.pyenv/version)
Pipenvのインストール
Pipenvをpip
コマンドでインストールする。
$ pip install pipenv
インストールされていることを確認。
$ pipenv --version pipenv, version 10.1.0 $ pipenv --help Usage: pipenv [OPTIONS] COMMAND [ARGS]... Options: --update Update Pipenv & pip to latest. --where Output project home information. --venv Output virtualenv information. --py Output Python interpreter information. --envs Output Environment Variable options. --rm Remove the virtualenv. --bare Minimal output. --completion Output completion (to be eval'd). --man Display manpage. --three / --two Use Python 3/2 when creating virtualenv. --python TEXT Specify which version of Python virtualenv should use. --site-packages Enable site-packages for the virtualenv. --version Show the version and exit. -h, --help Show this message and exit. Commands: check Checks for security vulnerabilities and against PEP 508 markers provided in Pipfile. clean Uninstalls all packages not specified in Pipfile.lock. graph Displays currently–installed dependency graph information. install Installs provided packages and adds them to Pipfile, or (if none is given), installs all packages. lock Generates Pipfile.lock. open View a given module in your editor. run Spawns a command installed into the virtualenv. shell Spawns a shell within the virtualenv. sync Installs all packages specified in Pipfile.lock. uninstall Un-installs a provided package and removes it from Pipfile.
なお、Pipenvのコマンドを補完したい場合は下記コードを.bashrc
, .zshrc
などに追加。
eval "$(pipenv --completion)"
仮想環境構築
pyenvとPipenvのインストールが完了したのでmyproject
ディレクトリに仮想環境を構築する。
今回はPython 3.6.4を使用したいのでpipenv --python 3.6.4
のようにしてバージョンを指定する。
途中、pyenvでPython 3.6.4をインストールするか聞かれるのでY
を入力。
$ mkdir myproject $ cd myproject $ pipenv --python 3.6.4 Warning: Python 3.6.4 was not found on your system… Would you like us to install CPython 3.6.4 with pyenv? [Y/n]: Y Installing CPython 3.6.4 with pyenv (this may take a few minutes)… ⠼Downloading Python-3.6.4.tar.xz... -> https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz Installing Python-3.6.4... Installed Python-3.6.4 to /home/vagrant/.pyenv/versions/3.6.4 Creating a virtualenv for this project… Using /home/vagrant/.pyenv/versions/3.6.4/bin/python3.6m to create virtualenv… ⠴Running virtualenv with interpreter /home/vagrant/.pyenv/versions/3.6.4/bin/python3.6m Using base prefix '/home/vagrant/.pyenv/versions/3.6.4' New python executable in /home/vagrant/.local/share/virtualenvs/myproject-j-SR1M6H/bin/python3.6m Also creating executable in /home/vagrant/.local/share/virtualenvs/myproject-j-SR1M6H/bin/python Installing setuptools, pip, wheel...done. Virtualenv location: /home/vagrant/.local/share/virtualenvs/myproject-j-SR1M6H Creating a Pipfile for this project…
上記のようなメッセージが表示され、Python 3.6.4のインストールと仮想環境の構築が完了する。また、カレントディレクトリにPipfile
というファイルが作成される。
仮想環境を有効にするにはpipenv shell
を実行。プロンプトに(myproject-j-SR1M6H)
のような仮想環境の情報が表示されるようになる。
$ pipenv shell Spawning environment shell (/usr/local/bin/zsh). Use 'exit' to leave. . /home/vagrant/.local/share/virtualenvs/myproject-j-SR1M6H/bin/activate $ . /home/vagrant/.local/share/virtualenvs/myproject-j-SR1M6H/bin/activate (myproject-j-SR1M6H) $ python --version Python 3.6.4
仮想環境のPythonはpipenv shell
を実行しない状態でpipenv run python
としても実行できる。
$ pipenv run python --version Python 3.6.4
構築された仮想環境のパスは--venv
オプションで確認可能。
$ pipenv --venv /home/vagrant/.local/share/virtualenvs/myproject-j-SR1M6H
パッケージのインストール
仮想環境にパッケージをインストールする前にpip list
とPipfile
の中身を確認してみる。
$ pipenv run pip list Package Version ----------------- ------- pip 9.0.1 setuptools 38.5.1 wheel 0.30.0
$ cat Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [packages] [dev-packages] [requires] python_version = "3.6"
パッケージはpipenv install
コマンドでインストールできるのでDjango 2.0.2をインストールしてみる。
$ pipenv install django==2.0.2 Installing django==2.0.2… Collecting django==2.0.2 Using cached Django-2.0.2-py3-none-any.whl Collecting pytz (from django==2.0.2) Using cached pytz-2018.3-py2.py3-none-any.whl Installing collected packages: pytz, django Successfully installed django-2.0.2 pytz-2018.3 Adding django==2.0.2 to Pipfile's [packages]… Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (9b28aa)! Installing dependencies from Pipfile.lock (9b28aa)… 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 2/2 — 00:00:01 To activate this project's virtualenv, run the following: $ pipenv shell
Djangoがインストールされ、Pipfileの[packages]
にも追記されていることが確認できる。
また、Pipfile.lock
というJSON形式のファイルも作成される。
別PCなどの作業環境で、同じ仮想環境を作成したい場合はこれらPipfile
とPipfile.lock
をもとに作成できるようだ。
$ pipenv run pip list Package Version ---------- ------- Django 2.0.2 pip 9.0.1 pytz 2018.3 setuptools 38.5.1 wheel 0.30.0
cat Pipfile [[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [packages] django = "==2.0.2" [dev-packages] [requires] python_version = "3.6"
なお、--dev
を指定すると開発環境だけで使用したいパッケージをインストールできる。
$ pipenv install --dev ipython==6.2.1 $ cat Pipfile ... [dev-packages] ipython = "==6.2.1" ...
Djangoの動作確認
インストールしたDjangoの動作確認をするために新規プロジェクトを作成する。
mkdir myproject
で作成したディレクトリに移動して下記コマンドを実行。
(myproject-j-SR1M6H) $ django-admin startproject myproject
以下のディレクトリツリーのようにファイルが作成される。
myproject # mkdirで作成したディレクトリ ├── myproject # プロジェクトのただの入れ物。名前の変更が可能 │ ├── manage.py # コマンドラインユーティリティ │ └── myproject # プロジェクトの実際のPythonパッケージ │ ├── __init__.py # Pythonパッケージであることを知らせる空ファイル │ ├── settings.py # 設定ファイル │ ├── urls.py # URL宣言 │ └── wsgi.py # WSGI互換Webサーバーとのエントリーポイント ├── Pipfile └── Pipfile.lock
manage.py
があるディレクトリに移動してrunserver
コマンドで開発用サーバを起動。
You have 14 unapplied migration(s).
というメッセージが表示されるが今は気にしない。
$ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. March 04, 2018 - 16:56:45 Django version 2.0.2, using settings 'myproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
http://127.0.0.1:8000/
にアクセスすると動作確認のページが表示されるが、Vagrantを使用している場合などは以下のように指定する(0:3000
は0.0.0.0:3000
の省略形で全ての IP からのリクエストを受け付ける )。
$ python manage.py runserver 0:3000
下記画面が表示された場合は画面の指示通りにsettings.py
のALLOWED_HOSTS
にIPアドレスを追加する。
ALLOWED_HOSTS = ['192.168.33.10']
最終的に下記画面が表示されれば動作確認は完了。
まとめ
- PipenvによるPython, Djangoの環境構築を実施
pipenv install
で仮想環境にパッケージをインストールpipenv shell
で仮想環境が有効化されたシェルを起動pipenv run
で仮想環境でコマンドを実行django-admin startproject
でプロジェクトの雛形を作成python manage.py runserver 0:3000
で開発用サーバを起動DisallowedHost at /
エラーはALLOWED_HOSTS
にIPアドレスを追加