質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

受付中

CGIサーバーで動作するPythonのimportエラー

flask_user
flask_user

総合スコア0

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

0クリップ

2108閲覧

投稿2020/02/16 09:47

前提・実現したいこと

site-packagesにインストールされたライブラリをimportしたpythonコード(FLASKを利用)を
CGIサーバーで実行したいと考えています。

環境

エックスサーバー
Python 3.7.6
Flask 1.1.1:WEBアプリケーションフレームワーク
Linuxbrew:パッケージ管理システム:

発生している問題・エラーメッセージ

site-packagesにインストールされたライブラリをimportしないときは、
ブラウザでアクセスしたときに意図した画面が表示されます。

site-packagesにインストールされたライブラリをimportするときは、
ブラウザでアクセスしたとき、500 internal server errorとなります。

該当のソースコード

index.cgi

index.cgi

#!/home/□□/.linuxbrew/bin/python3 from wsgiref.handlers import CGIHandler from test import app CGIHandler().run(app)

test.py

test.py

# coding: utf-8 from flask import Flask import 〇〇 app = Flask(__name__) @app.route("/") def hello_world(): return "Hello, World!"

試したこと

以下は仮想環境上で実施

####(1)意図したライブラリがインストールされていることを確認

pip3 freeze

####(2)意図したpythonが使用されていることを確認

python3 -v

####(3)ライブラリにパスが通っていることを確認
(3-1)コンソールを起動

python3 -v

(3-2)パスを確認

import sys print(sys.path)

疑っているが、確認方法がわからないこと

CGIで起動したpythonコードからライブラリが見えていない
ただし、上記の(3-2)で絶対パスが合っていることは確認

補足情報

以下のサイトの手順で環境を構築しました。
https://datacoach.me/data/engineering/xserver-python-flask-env/
https://qiita.com/n-Taro/items/b50ebe49cacda7327aa2

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

dodox86
dodox86

2020/02/16 10:48

> CGIで起動したpythonコードからライブラリが見えていない 恐らく質問者さんのご想像のとおりimportでエラー(例外)が起きているのだと思いますが、 (XSERVERのエラーログに何か出力されているかもしれません) > CGIで起動したpythonコードからライブラリが見えていない > ただし、上記の\(3-2\)で絶対パスが合っていることは確認 ならば、FlaskのCGIでimport sys \.\.\. print\(sys\.path\) 相当を実行した場合、つまりブラウザに出力されるようにして、どのようになるか確認されてはどうでしょうか。import 〇〇をせずに、です。(Flaskは分からないのとXSERVERの確認はできませんので、コメントのみ、です)
flask_user
flask_user

2020/02/17 15:25

ありがとうございます。 XSERVERのエラーログには「End of script output before headers: index\.cgi」と出力されていました。 importでこのエラーが出る理由がよくわかりません。 import sysだけであれば、import 〇〇としないときと同様に、ブラウザでアクセスしたときに意図した画面が表示されました。 import sys \.\.\. print\(sys\.path\)としたときは、import 〇〇としたときと同様に、ブラウザでアクセスしたとき、500 internal server errorとなりました。
dodox86
dodox86

2020/02/17 15:49

> importでこのエラーが出る理由がよくわかりません。 CGIで最低限出力されるべきヘッダー部 "Content-Type: \.\.\.\." が出力される前に終わってしまっているのだと思います。だから、“ヘッダーの前にスクリプト終了”「End of script output before headers: index\.cgi」と出ます。 print\(sys\.path\) でエラーが起きてるようですね。sys\.pathが読めない(sysモジュールが使えなくなっている?)とか。
flask_user
flask_user

2020/02/17 15:55

ありがとうございます。 環境が壊れている可能性がありますね。 調べてみます。
dodox86
dodox86

2020/02/17 15:56

そうですね。標準のsysが使えないのはおかしいので、ご想像のとおり、site-packagesの導入でCGI実行時の環境が壊れてしまったような気がします。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。