ここでは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により変更する必要があります。