はじめに
こんにちは。今回本格的に開発したいプロジェクトが出来たため、PythonによるWeb開発を行なっていきたいと思います。
なぜPythonで開発するのかと言いますと、あるライブラリとツールがPythonで開発されているためです。
今回は、PythonのWebフレームワークの一つとして有名なDjangoを用いてWeb開発を進めていきたいと思います。
なお、今回の開発環境はFreeBSDで行なっています。
筆者はPythonに関しても、Goと同じく(詳しくはこちら→ https://qiita.com/himrock922/items/1d70686aabaac49b54fd)開発した経験がないため、エビデンス集めから始めていきたいと思います。
Pythonによる環境構築について
まずはエビデンス集めです。筆者はRubylistなため、rbenvのようなものがPythonにもあるのか調べていたら、https://github.com/pyenv/pyenvがありました。
しかし、pyenvの件については以下のような指摘記事がありました。→ https://ymotongpoo.hatenablog.com/entry/2017/01/29/002039
少し引用させていただきます。
プロジェクトで稼働させているバージョンを固定させているならそのバージョンだけ入れればよいわけですし、マイナーバージョンごとにアップデートを行うにしても1年に1度あるかないか、さらに攻めた環境でマイクロバージョンごとにインストールするにしてもたかが知れています。
(マイナーバージョンは大概がセキュリティフィックスか明らかなバグ修正。)であれば、pyenvでPythonを新規にインストールする必要ってどれくらいあるんでしょう。
元々、Pythonのインストールは configure
, make
, make install
で事足りるので(そもそもpyenvもそれをバックエンドでやっている)、わざわざpyenvを使う必要がないとの事です。
また、Python3以降からプロジェクト毎に固有の環境が作成することができるvenvがサポートされている模様です。
venvはシステムとは独立した仮想環境を作成し、また仮想環境には独立したPythonバイナリがありシステムとは独立したPythonパッケージ群をインストールすることができます。
これを考慮して、Python本体はパッケージインストールを行い、開発毎にvenvで環境を分けていこうと思います。勿論、これはproductionデプロイする時に安定した環境で運用できるように設定したいため、後々変えるかもしれません。
FreeBSDへの環境構築
では、Pythonのインストールと仮想環境を構築していきたいと思います。
Pythonのインストール
% sudo pkg install python37
% mkdir Develpment
% cd Development
% which python3.7
/usr/local/bin/python3.7
仮想環境の構築
続いて仮想環境を構築していきます。
% python3.7 -m venv application_environment
仮想環境が作成されれば、そのディレクトリ配下にあるスクリプトで仮想環境の有効化が行えます。
% cd application
% source ./bin/activate
仮想環境上に必要なライブラリをインストール
仮想環境を有効にしたら、Djangoをインストールします。
% pip install django
Djangoをインストール後、新しいスケルトンサイトを作成するために、django-admin
を実行し、Djangoによるアプリケーションをディレクトリ配下にインストールします。念の為、仮想環境とは別のディレクトリでDjangoアプリケーションをインストールすることにしました。今回、プライベートリポジトリで運用していくつもりをしているのでアプリケーション名は伏せさせていただきます。
% cd ..
% mkdir django
% cd django
試しにDjangoを起動してみました。
% python3.7 manage.py runserver
% django-admin startproject application
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/home/himrock922/Development/jail_hosting_system/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py", line 10, in <module>
from sqlite3 import dbapi2 as Database
File "/usr/local/lib/python3.7/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/usr/local/lib/python3.7/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3
sqlite3が必要な模様なため、あらかじめパッケージインストールしておきます。
% sudo pkg install sqlite3
また、今回VPSを借りて運用しているため、Djangoが起動しているか確認するために、あらかじめsettings.pyにてアクセス許可するIPアドレスにVPSに紐づいている固定IPアドレスを追加しておきます。
ALLOWED_HOSTS = ['*.*.*.*']
Djangoを動かすためには、runserverを引数として実行します。ただし、デフォルトでは127.0.0.1で待ち受けするため、これをVPSのアドレスで待ち受けできるようにもう一つ引数を指定してあげます。
% python3.7 manage.py runserver *.*.*.*:8080
以上で、デフォルトのWellComeページ(?)が閲覧できるようになりました。
一旦ここまでのパッケージ群のバージョンを固定し、一括管理できるようにpip freeze
を利用してリポジトリに登録しておきます。
% pip freeze > packages.txt
% git add .
% git commit -m "first commit"
% git push origin master
まとめ
Djangoについての環境構築でした。今回はあまり大したことしていませんが、今後Djangoによる開発を進めるにあたり、どんどん書いていきたいと思います。