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

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

新規登録して質問してみよう
ただいま回答率
85.31%
JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

Flask

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

2回答

1260閲覧

Linux+Apache+mod_wsgi+Flask環境でApache経由でのみ発生するModuleNotFoundError (jwt)

entry4code

総合スコア14

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

Flask

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 3.x

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2023/06/24 12:30

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 表記の環境でエラーが発生します。エラーを解決し、Webサービスを正常に稼働させたいと考えています。エラーはjwtパッケージで発生しており回避したいのですが、ログイン認証のためアプリケーションに組み込む必要があります。

前提

環境情報
OS: Linuxサーバ
プラットフォーム: AWS
Apache/2.4.51
Python 3.7.10
Flask Version: 1.1.2

mod_wsgiコマンドの実行結果

1mod_wsgi-express module-config 2LoadModule wsgi_module "/usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so" 3WSGIPythonHome "/usr"

httpd/conf.d/flask.conf

1LoadModule wsgi_module /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so 2 3WSGIPythonPath /var/www/html/(ProjectPath) 4<VirtualHost *:80> 5 ServerName xxx 6 DocumentRoot /var/www/html/(ProjectPath) 7 WSGIDaemonProcess xxx user=apache group=apache threads=5 8 WSGIScriptAlias / /var/www/html/(ProjectPath)/(ProjectName).wsgi 9 WSGIScriptReloading On 10 <Directory "/var/www/html/(ProjectPath)"> 11 WSGIProcessGroup (ProjectName) 12 WSGIApplicationGroup %{GLOBAL} 13 Order deny,allow 14 Allow from all 15 </Directory> 16</VirtualHost> 17~

ProjectName.wsgi

1import os, sys 2import logging 3logging.basicConfig(stream = sys.stderr) 4sys.path.insert(0, '/var/www/html/(ProjectPath)') 5 6from run import app as application

pip

1$ pip show jwt 2WARNING: Package(s) not found: jwt 3pip show PyJWT 4Name: PyJWT 5Version: 2.7.0 6Summary: JSON Web Token implementation in Python 7Home-page: https://github.com/jpadilla/pyjwt 8Author: Jose Padilla 9Author-email: hello@jpadilla.com 10License: MIT 11Location: /home/(UserName)/.local/lib/python3.7/site-packages 12Requires: typing-extensions 13Required-by:

以下のエラーが発生します。
mod_wsgi (pid=23285): Failed to exec Python script file '/var/www/html/(ProjectPath)/(ProjectName).wsgi'., referer: http://(IP address)/login
mod_wsgi (pid=23285): Exception occurred processing WSGI script '/var/www/html/(ProjectPath)/(ProjectName).wsgi'., referer: http://(IP address)/login
Traceback (most recent call last):, referer: http://(IP address)/login
File "/var/www/html/(ProjectPath)/(ProjectName).wsgi", line 7, in <module>, referer: http://(IP address)/login
from run import app as application, referer: http://(IP address)/login
File "/var/www/html/(ProjectPath)/run.py", line 1, in <module>, referer: http://(IP address)/login
from app.app import app, referer: http://(IP address)/login
File "/var/www/html/(ProjectPath)/app/app.py", line 26, in <module>, referer: http://(IP address)/login
import jwt, referer: http://(IP address)/login
ModuleNotFoundError: No module named 'jwt', referer: http://(IP address)/login

Web画面はInternal Server Errorとなります。

試したこと

エラーではjwtパッケージが見つからないとなっていますが、調査していたところjwtとPyJWT共存の問題があるようで、PyJWTのみ入った状態にしています。

jwtパッケージを入れた場合でもエラーは発生します。

この状態で、Python3 run.pyとすると問題なく動作します。

そのため、mod_wsgiから参照しているPythonが怪しいと考えています。

そこで、mod_wsgiコマンドで出力された内容をLoadModuleへ設定されているか確認しています。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

python3で実行するのに、インストールはpip3ではなく、pipでしているというようなことはありませんか?

投稿2023/06/27 00:34

FiroProchainezo

総合スコア2443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この回答はGPT-4による自動生成回答です

エラーの原因は、mod_wsgiがPyJWTモジュールを見つけられないことにあります。これは、mod_wsgiが異なるPython環境を使用しているために発生することがあります。

以下の手順で問題を解決できるかもしれません。

  1. まず、httpd/conf.d/flask.confファイルのWSGIPythonPathディレクティブに、PyJWTがインストールされているディレクトリを追加してください。以下のように変更します。

httpd/conf.d/flask.conf

1WSGIPythonPath /var/www/html/(ProjectPath):/home/(UserName)/.local/lib/python3.7/site-packages
  1. 次に、ProjectName.wsgiファイルに、sys.pathにPyJWTがインストールされているディレクトリを追加します。

ProjectName.wsgi

1import os, sys 2import logging 3logging.basicConfig(stream = sys.stderr) 4sys.path.insert(0, '/var/www/html/(ProjectPath)') 5sys.path.insert(0, '/home/(UserName)/.local/lib/python3.7/site-packages') 6 7from run import app as application
  1. 最後に、Apacheを再起動して変更を反映させます。
sudo service httpd restart

これで、mod_wsgiが正しいPython環境を使用し、PyJWTモジュールを見つけられるはずです。もしまだ問題が解決しない場合は、仮想環境を使用してプロジェクトの依存関係を管理することを検討してください。これにより、mod_wsgiが正しいPython環境を使用するように設定できます。

投稿2023/06/24 12:31

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問