以前にもここに書きましたが、玄人とは言えない私は、ネットの情報で随分混乱させられました。OSXのバージョンアップで、CGIが動かなくなった時より、??となることが多かったように思います。私と同レベルの人は多いと思いますので、少し整理した形で記事を書いておきます。
さて、Mac上でPythonを動かすこと自体は、Mac自体にPython2.7.xが予めインストールされているので難しくありません。Apacheのhttpd.confを修正してCGIを動かせるようにしておけば、次のようなtest.pyを所定のフォルダにおき、実行権を設定すればブラウザからtest.pyにアクセスすればちゃんと動きます。実行結果を見れば分かるように、Python2.7.xでです。
-test.py-----------------
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cgi
import sys, os
print(\"Content-Type: text/html;\")
print(\"\")
print(\"\")
print(\"\")
print(\"\")
print(\"\")
print(\"
print(\"\")
print(\"\")
print(\"hello world!\")
strs=sys.path
for cmp in strs:
print(cmp)
print(\"-
\")
cgi.print_environ()
print(\"print(\"
\")
このPython2.7.xをPython3に切り替えるために、Python3をインストール&設定して、ターミナルで
$ python
と打って、Python3.X.Xが動作することを確認したとしても、CGIからは予めインストールされたPython2.7.xが呼ばれ、test.pyが実行されます。つまり、コマンドラインが呼ぶPythonとCGIが呼ぶPythonは違います。この辺が曖昧なネット記事が多くて、私は混乱しました。多かったのは、Python3をインストールすると動いたと言う記事でした。
状況が分かると、これらの記事はPythonのバージョンの確認をしていないのでは?と思うようになりました。
Python3をpyenvでインストールした状況での話ですが、結局状況は
- CGIのパス(/usr/bin/)に、python2.7.10があって、それが呼び出されている
- CGIの環境変数が /usr/bin:/bin:/usr/sbin:/sbin だけなので、python3.6.5への絶対パス/Users/アカウント名/.pyenv/shims/python3 をCGIで叩いてもエラーになる
この解決には、
- /Users/アカウント名/.pyenv/shims/を優先的に調べるよう変更して、PATH変数をCGIに食わせる
- Shebang(test.pyの1行目)を #!/usr/bin/env python とすること