いつもお世話になっております。
CGI上でのpython実行について、ご教授いただきたいです。
現在、CGI形式でpythonを実行する環境を構築しているのですが、
CGI形式でwebブラウザからpythonを実行すると、
システムのデフォルトのpythonが使われてしまいます。
pyenvで指定したバージョンのpythonを使って欲しいのですが、
どうにもうまくいってくれません...。
以下に、サンプルや実行環境を示します。
CGI周りに詳しい方、どなたかご教授いただけないでしょうか...?
サンプル
python
1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4#このファイルがwebブラウザから間接的に実行されます。 5#以下、処理が続きます...
環境
- OS:MAC OSX elcapitan
- システムデフォルトのpython: Python/2.7.10
- pyenvで指定したpython: Python 3.5.0 :: Anaconda 2.4.0
- 使っているWebサーバ: Apache/2.2.29(MAMPでインストールしたもの)
原因と対策
- 原因ですが、1行目のシバン行に問題があるかと考えています。
- /usr/bin/envを使った場合、環境変数PATHに指定されたフォルダを順に探しにいくかと思います。CGI形式で実行した場合、そもそも環境変数PATHにpython周りのパスが通っていないため、システムデフォルトのver2.7のpythonが使われてしまいます。
- おそらく、1行目のシバン行でpythonを呼び出す前に、環境変数PATHに仕込めればうまくいきそうかなと考えています(こういったことは可能でしょうか...?)。
代案
- また、以下のように、シバン行にpyenvで使っているpythonのPATHを直接書き込む方法も試してみました。
python
1#!/Users/UserName/.pyenv/shims/python 2# -*- coding: utf-8 -*- 3 4#以下、処理が続きます...
- この場合、以下のようなエラーが出てしまい、うまくいきませんでした。
- (色々調べては見たのですが、エラーメッセージがこれだけしかでないので、結局よくわからず...)
- (シバン行を
#!/usr/bin/env python
とすればエラーにならないので、pythonファイル自体の文字コードやパーミッションに問題はなさそうです。)
[Sun Aug 28 17:09:07 2016] [error] [client ::1] (8)Exec format error: exec of '/Applications/MAMP/htdocs/jupyter-to-td/lib/issue_kpi_query_from_web.py' failed, referer: http://localhost:8888/jupyter-to-td/view/ajax_example.html [Sun Aug 28 17:09:07 2016] [error] [client ::1] Premature end of script headers: issue_kpi_query_from_web.py, referer: http://localhost:8888/jupyter-to-td/view/ajax_example.html
その他相談したい事
- Ajaxを使ってweb上から非同期でpythonスクリプトを実行したいため、今回CGI周りの設定を行っています。
- 恥ずかしながら、今回の設定で初めて、CGIやモジュール形式などを知りました。
- CGI形式について調べてみたところ、色々と気を使わなければならない事が多く、結構厄介な印象を受けました。
- そもそも、モジュール形式(apacheならmod_pythonを使う方法)にした方が良いでしょうか?
- (モジュール形式の方がつまづくポイントは少なそうなものの、apacheにモジュールの追加と再ビルドが必要なので、難しそうかなという印象を受けています(笑))
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/29 01:24