【jQuery】AjaxでPythonを実行する際、matplotlib、numpy、pandasが動かない問題[JavaScript]-未解決

  • URLをコピーしました!
目次

Ajax

前回、Pythonの数式(関数)を扱うライブラリsympyで、数値の代入や式の展開・因数分解、解の求め方、微分・積分の方法を解説しました。

今回はAjaxでPythonを実行する際、matplotlibやnumpy、pandasが動かなかったという件をお話しします。

ちなみに問題は解決していませんので、解決法を知っている方はぜひコメントをもらえると嬉しいです。

それでは始めていきましょう。

Ajaxのおさらい

まずはAjaxのおさらいからです。

前にも解説していますので、よかったらこちらの記事もどうぞ。

Ajaxを使うにはまず「jQuery」を読み込みます。

この記事を書いている時点での最新のコードはこちら。

<script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>

もしかしたら古くなっているかもしれないので、最新版はjQueryのサイトで確認してください。

そしてAjaxで特定のURLに接続するには、こんな感じです。

 $.ajax({
        url: 'URL',
        type: 'post',
        data: ''
        })

さらに返ってきたデータの処理や接続失敗した際の表示のために、「done」や「fail」の処理を追加します。

        $.ajax({
        url: 'URL',
        type: 'post',
        data: ''
        }).done(function(){
            成功した際の処理;
        }).fail(function(){
            失敗した際の処理;
        });

今回は「Ajax_test1.py」という

<!DOCTYPE html>
<html lang="ja">
<head>
    <script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>
<meta charset="UTF-8">
</head>
<body>
    <button id="start">Button</button>
    
<script>
    $("#start").on("click",  function(){
        $.ajax({
        url: 'Ajax_test1.py',
        type: 'post',
        data: ''
        }).done(function(res){
            console.log(res);
        }).fail(function(){
            alert('failed');
        });
    });
</script>
</body>
</html>

続いてPythonのプログラムです。

#!/pythonのパス/python

import sys

recieve = sys.stdin.readline()
print('Content-type: text/html\n')

def main():
    print("test")

if __name__ == '__main__':
    main()

ここで重要なのは、出力の最初は「print(‘Content-type: text/html\n’)」とすることです。

これでサーバーにアップロードし、アクセスした後、ボタンをクリックすると「test」が表示されます。

それでは今回の問題を見ていきましょう。

特定のライブラリをインポートするとエラー

今回発生した問題はPythonのプログラム側で特定のライブラリをインポートするとエラーになるというものです。

一番最初に試したのは「matplotlib」でした。

ということでこんな感じ。

<!DOCTYPE html>
<html lang="ja">
<head>
    <script src="https://code.jquery.com/jquery-3.6.3.min.js" integrity="sha256-pvPw+upLPUjgMXY0G+8O0xUf+/Im1MZjXxxgOcBQBXU=" crossorigin="anonymous"></script>
<meta charset="UTF-8">
</head>
<body>
    <button id="start">Button</button>
    
<script>
    $("#start").on("click",  function(){
        $.ajax({
        url: 'Ajax_test2.py',
        type: 'post',
        data: ''
        }).done(function(res){
            console.log(res);
        }).fail(function(){
            alert('failed');
        });
    });
</script>
</body>
</html>
#!/pythonのパス/python

import sys
import matplotlib

recieve = sys.stdin.readline()
print('Content-type: text/html\n')

def main():
    print("test_matplotlib")

if __name__ == '__main__':
    main()

これを実行するとエラーとなってしまいました。

ちなみに「numpy」や「pandas」でも同じく500エラーが発生します。

「os」や「random」は問題なくインポートできるので、外部ライブラリをインポートすることができてないようです。

結構色々と粘ったのですが、エラーの内容が詳しくわからないことから、まだこの問題を解消できていません。

もし対処方法をご存知の方がいらっしゃいましたら、コメント欄にでもご連絡いただけると嬉しいです。

次回からはJavaScriptのようにPythonのプログラムをHTML上にPyScriptを使ってみたのでそのお話をしていきます。

次回はPyScriptで文字を出力する方法を紹介していきます。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次