はじめに
この記事では、WindowsでApache2 + Python + Djangoの環境を作ることを紹介します。
通常はpyenvなどを使ってPythonの仮想環境を作って運用しますが、Windowsの場合はDjangoが動作するPythonとmod_wsgiの組み合わせが限定されているのでpyenvは使いません。
この記事では環境を作るまでを紹介しており、実際のDjangoとApacheの設定方法を紹介した記事はこちらになります。
2022.06.22 環境を更新
環境
Windowsのバイナリが提供されているPython 3.10の最新版を使います。
また、PostgreSQLのバージョンは問いませんが、これも最新版を使いました。
- Windows 10 Pro 64bit 21H2 - Python 3.10.5 - Apache 2.4.54 - Django 4.0.5 - mod_wsgi-4.9.1-cp310-cp310-win_amd64.whl
ディレクトリ構造は以下の通りです。
C:\Python ┣ -- Scripts ┣ -- mod_wsgi-express.exe ┣ -- pip.exe ┣ -- DLLs ┣ -- Lib ・・・ C:\Apache24 ┣ -- conf ┣ -- httpd.conf ・・・ C:\user\xxx\Django\proj ┣ -- proj ┣ -- settings.py ┣ -- wsgi.py ┣ -- app ┣ -- templates ┣ -- static ┣ -- db.sqlite3
set_wakeup_fd only works in main thread of the main interpreter
最新に近いPythonとmod_wsgiの組み合わせでは、エラーが表示されてDjangoが動作しませんでした。
set_wakeup_fd only works in main thread of the main interpreter
この件に関してはissueが挙がっており、Python 3.7を使えば良いと記述されています。
https://bugs.python.org/issue43007
ダウンロードとインストール
各パッケージのインストーラーは以下になります。
Python
「python-3.10.5-amd64.exe」をダウンロードしてインストールします。
Python3.10系ならば何でも良いですが、Windowsのバイナリが提供されている最新バージョンをダウンロードします。
インストーラーを起動後、「Customize Installation」を選択します。
ほとんどデフォルト設定で良いですが、「Customize install location」でインストールするパスを変更します。
インストール先はデフォルトでは隠しディレクトリのAppData以下になりますが「C:\Python」に変更します。

パスを通す
キーボードのWindowsキーを押し、歯車マーク「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「詳細設定」→「環境変数」から設定します。
「システム環境変数」のPathをダブルクリックして「新規」をクリック後、「C:\Python」と「C:\Python\Scripts」をそれぞれ入力します。
C:\Python C:\Python\Scripts
環境変数にPYTHONPATHを登録する
ApacheをWindowsサービスには登録できたのですが、起動で失敗しました。
Apacheの「C:\Apache24\logs\error.log」を見るとPYTHONHOME、PYTHONPATHが「not set」になっていました。
PYTHONHOMEはhttpd.confでWSGIPythonHomeとして設定しているのでPYTHONPATHだろうと推測し、環境変数に追加することでWindowsサービスから起動することができました。
キーボードのWindowsキーを押し、歯車マーク「設定」→「システム」→「詳細情報」→「システムの詳細設定」→「詳細設定」→「環境変数」から設定します。
「システム環境変数」の「新規」をクリック後、変数名に「PYTHONPATH」、変数値に「C:\Python\Lib;C:\Python\DLLs」を入力しました。
変数名: PYTHONPATH 変数値: C:\Python\Lib;C:\Python\DLLs
Pythonの確認
コマンドプロンプトを起動してPythonにパスが通っているか確認します。
以下はPythonのバージョンを表示します。
python -V Python 3.10.5
pipのアップグレード
管理者権限でコマンドプロンプトを起動してpipをアップグレードします。
pip install --upgrade pip
Djangoのインストール
管理者権限でコマンドプロンプトを起動してDjangoをインストールします。
pip install Django
mod_wsgi
「Mod_wsgi」の項目から「mod_wsgi-4.9.1-cp310-cp310-win_amd64.whl」をダウンロードしてpipでインストールします。
コマンドプロンプトを管理者権限で起動して、以下のようにインストールします。
pip install mod_wsgi-4.9.1-cp310-cp310-win_amd64.whl
Apache
「Apache 2.4.54 Win64」にあるリンクから「httpd-2.4.54-win64-VS16.zip」をダウンロードします。
フォルダの移動
解凍すると「Apache24」フォルダがあるので「C:\Apache24」にコピーします。
httpd.confを修正する
今回はローカルからのみアクセスするので「C:\Apache24\conf\httpd.conf」のServerNameを以下のように修正します。
ServerName localhost:80
Apacheを起動する
Apacheの動作確認のために起動します。
この場合、コマンドプロンプトを閉じるとApacheも終了します。
cd c:\Apache24\bin httpd.exe
接続テスト
Webブラウザから以下にアクセスしてテストします。
「It works!」と表示されたら成功です。
http://localhost/
Windowsサービスに登録する
Windowsの起動時にApacheが起動するようにWindowsサービスに登録します。
コマンドプロンプトをAdministrator権限で起動して以下のコマンドを実行します。
付属の「C:\Apache24\bin\ApacheMonitor.exe」を起動するとService StatusにApache2.4が表示されます。
これ以降はApacheMonitorを使って制御します。
httpd.exe -k install
VCランタイムが存在しないとメッセージが表示されたら、VC16(Visual Studio 2019)のVCランタイムが必要です。
MicrosoftのWebサイトから「その他のツールとフレームワーク」をクリックして「Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ」をダウンロードします。

Windowsサービスから削除する
Windowsサービスから削除したい場合は、コマンドプロンプトをAdministrator権限で起動して以下のコマンドを実行します。
httpd.exe -k uninstall
PostgreSQL
Djangoの標準のデータベースであるSQLite(以下、sqlite3)をPostgreSQLに変更します。
以下のページの文章中にある「Download the installer」をクリックして「postgresql-14.4-1-windows-x64.exe」をダウンロードします。
インストール時の変更点
インストールする際の設定項目は以下のようにしています。
1. インストールディレクトリを変更します。
C:\PostgreSQL\14
2. Stack Builderのチェックをはずします。
3. データディレクトリを変更します。
C:\PostgreSQL\14\data
4. postgresユーザのパスワードを設定します。
5. PostgreSQLで使用するポート番号を指定します。
デフォルトの5432で良いです。
この番号は、Djangoプロジェクトのsettings.pyで指定します。
6. Locale(言語)は、「C」を選択します。
Cを選択する意味については以下で取り上げられています。
アクセス制限
ローカルからのみアクセスを許可するのでpostgresql.confのlisten_addressesを変更します。
listen_addresses = 'localhost'
サービス開始・停止
PostgreSQLをインストールするとWindowsサービスに登録され、Windowsの起動時に自動で起動します。
設定ファイルを変更した際は再起動が必要なので管理者権限でコマンドプロンプトを起動して、サービスを停止・起動します。
停止 net stop postgresql-x64-14 起動 net start postgresql-x64-14
postgresql-x64-14はサービス名です。
PostgreSQLのバージョンによって名前が変わるので、Windowsの「ファイル名を指定して実行」でservices.mscを起動してpostgresqlから始まるサービス名を探します。
データベースの作成
データベースの情報は以下とします。
データベース名: proj ユーザ名: projuser パスワード: projpass 文字コード: utf8 タイムゾーン: asia/tokyo
データベースをPostgreSQLに作成するために、Windowsキーを押してメニューからPostgreSQL 14→SQL Shell(psql)を起動します。
起動するといくつか質問されますが、インストール時にポート番号などを変更していなければ全てデフォルトでエンターキーを押します。
postgresのパスワードは、PostgreSQLのインストール時に設定したものとなります。
無事にshellが起動したら、以下のコマンドを打ってデータベースを作成します。
create database proj; create user projuser with password 'projpass'; alter role projuser set client_encoding to 'utf8'; alter role projuser set default_transaction_isolation to 'read committed'; alter role projuser set timezone to 'asia/tokyo'; grant all privileges on database proj to projuser; \q
Djangoの設定
Djangoのsettings.pyファイルを修正します。
sqlite3の該当個所をコメントアウトして、PostgreSQLの設定を追記します。
データベース名などは、上記でデータベースの作成したときの情報と同じにします。
#DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } #} DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'proj', 'USER': 'projuser', 'PASSWORD': 'projpass', 'HOST': 'localhost', 'PORT': '5432', } }
psycopg2
DjangoからPostgreSQLにアクセスするためにpsycopg2をインストールします。
管理者権限でコマンドプロンプトを起動して以下のコマンドを実行します。
pip install psycopg2
Djangoへの反映
作成したデータベースをDjangoに反映させます。
管理者権限でコマンドプロンプトを起動して以下のコマンドを実行します。
python manage.py makemigrations python manage.py migrate
Djangoの管理者情報
Djangoの管理画面にアクセスするための管理者IDとパスワードを設定します。
安易なパスワードを入力すると警告が表示されます。
python manage.py createsuperuser
接続テスト
DjangoとApacheの設定方法の記事を参考に設定が完了したら、Apache2を再起動してWebブラウザで管理画面にアクセスします。
Djangoの管理画面が表示されてログイン出来たら環境構築は完成です。
または 404 Error - Not Found 404 Error - Not Found
Comments