ここではMac OS X上の環境で、python3によりhtmlファイルを作成し、ブラウザで表示する方法について記載します。Webアプリケーション開発などに興味がある人向けです。まずはここでアプリケーションを作り、httpプロトコルのあるサーバにあげると外部に公開できるようになります。


httpd.confの設定変更

ブラウザ上でpythonを実行できるようにするためには、httpd.confの設定を変更しなくてはいけません。httpd.confをmdfindコマンドなどで探し、vimでhttpd.confを開きます。標準に保存されているのなら、以下のコマンドで開けます。
sudo vi /etc/apache2/httpd.conf
この中から、以下の領域を探します。

<Directory/ “Library/WebServer/Documents”>


<Directory>

この領域の中に、pythonを実行する許可を与えます。具体的には、
Options +ExecCGI
AddHandler cgi-script .cgi .py
を追加します。これでブラウザでpythonを実行できるようになります。:wqでvimを保存し、apacheを再起動します。
sudo apachectl restart


HTMLを生成するpyファイルの作成(xxx.py)

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
print(“Content-Type: text/html\n”)
print(‘<!DOCTYPE html><html lang=”ja”><head><title></title></head><body>’)
print(“aaa”)
print(‘</body></html>’)

上記ファイルを、py拡張子(xxx.py)でどこかに作成します。
ポイントは、1行目にpython3があるパスを指定することです。
python3の場所がわからない場合は、ターミナルで、
which python3
と打ち込むと、場所が返ってきます。次に、この権限を変更します。
chmod 775 xxx.py
権限を変更しないと、ブラウザ上で実行の権限がないと怒られます。その後、pyファイルを、以下のディレクトリに保存します。
/Library/WebServer/Document/
コピーすればいいので、ターミナルで、
cp xxx.py /Library/WebServer/Document/
と打ち込めばokです。
このディレクトリでないと動かないので注意してください。
次に、ブラウザを開き、以下のURLを入力してください。
http://localhost/xxx.py
aaaと表示されたwebページを見ることができれば、python3のprint関数が使えたことになるので、成功となります。なお、ブラウザ上のlocalhostがコンピュータ上の/Library/WebServer/Document/と対応づいています。


標準的なエラー処理

エラーログを見ると何か分かるかもしれません。標準的には以下の場所にあります。
open /var/log/apache2/error_log

以下、エラー例です。

エラーログ: End of script output before headers: xxx.py

ブラウザ: Internet Server Error 500

原因は以下の2つです。

(1) pyファイル内の文字コードが違うとこのエラーが出ます。
主に、エンマークとスラッシュが混ざった場合に起こるらしいです。vimなどでpyファイルを開き、エンマークをすべてスラッシュにするとなおります。
(2) 一番上に、python3の場所が書いていない。ターミナルで、which python3とうち、返ってきた文字をきちんと入れてください。

エラーログ: malformed header from script ‘xxx.py’: Bad header:

ヘッダがきちんと打ち込めていません。
print(“content-Type: text/html\n”)
があるか確認のこと。なお、エンマークは使用禁止ですので、注意です。
(上の例だと、エンマークになってしまっているかも)

ブラウザでコードが丸見えになる、ブラウザに Forbidden 403 Error が出る:

httpd.confにおいて、
<Directory/ “Library/WebServer/Documents”>


<Directory>
この領域の中に、
Options +ExecCGI
AddHandler cgi-script .cgi .py
が書いてありません。(コメントアウトの#も当然あってはいけません)もしくは、記入後にapacheの再起動をかけていません。あるいは、ブラウザのurl入力欄に「http://localhost/xx.py」と打ち込まずに、ブラウザで直接xx.pyを開いてしまっている、などが考えられます。


Document Root の変更

上の設定ですと、”Library/WebServer/Documents”にコンテンツ(pyファイル)をおいて、ブラウザで、”http://localhost/xx.py”といれなければなりません。このディレクトリにコンテンツを毎回置くのはちょっと大変です。これは、Document rootがそのディレクトリになってしまっているからです。Document rootを変更するには、

sudo vi /etc/apache2/httpd.conf

を開き、

DocumentRoot “Library/WebServer/Documents”
<Directory/ “Library/WebServer/Documents”>

を探します。そして、自分の指定したいディレクトリに変更します。
例えば、デスクトップのAというディレクトリにしたい場合には、以下のようにします。pcのxxxはユーザネームになります。

DocumentRoot “/Users/xxx/Desktop/A”
<Directory/ “/Users/xxx/Desktop/A”>

その後、apacheを再起動します。

sudo apachectl restart

なお、指定したパスにあるすべてのディレクトリの権限を、chmod 755により変更する必要があります。