PyScript
前回、PyScriptで自作ライブラリをインポートする方法を紹介しました。
その際、自作ライブラリをインポートするのはローカル環境(Visual Studio CodeのLive serverなど)ではうまくいくのに、サーバーではエラーとなるというお話をしました。
それはそれで原因も対策もわからないのですが、さらに自作ではない外部ライブラリをインポートした際にもおかしな現象が起こったのでまとめておこうと思います。
おかしな現象とはサーバー環境で実行する際、py-configタグを使うとインデントが崩れるという問題です。
HTMLのようにインデントがプログラムの見やすさだけに影響する場合はインデントが崩れても問題ないのですが、PyScript、またその基本となるPythonはインデントでプログラムのブロックを見分けているプログラミング言語です。
そのためインデントが崩れるとエラーとなり、プログラムを実行できません。
まだ未解決なので、もし原因と対策をご存知の方がいらっしゃいましたら、コメント欄にでもご連絡いただけますと助かります。
それでは何が起こったのかを見ていきましょう。
問題のないプログラム
まずこちらのプログラムを基本として見ていきましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
</head>
<body>
<div id="text"></div>
<py-script>
Element("text").write("Hello World!")
</py-script>
</body>
</html>
このHTMLをローカル環境で実行してみます。
特に問題なく実行することができました。
ブラウザ上でソースを見てみます。
ソースも特に問題は見られません。
このHTMLをサーバーにアップしてアクセスし、ソースを確認してみます。
特に問題は見られません。
通常はこのようにローカルで見ようが、サーバーで見ようが同じように動作するはずです。
外部ライブラリをインポートするとインデントが消える?
次に外部ライブラリをインポートした場合を見てみます。
まずはpy-configでライブラリを指定したところまでで試してみます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
</head>
<body>
<py-config>
packages = ["numpy"]
</py-config>
<div id="text"></div>
<py-script>
Element("text").write("Hello World!")
</py-script>
</body>
</html>
ここまでは特に問題ありません。
次にライブラリをインポートしてみます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
</head>
<body>
<py-config>
packages = ["numpy"]
</py-config>
<div id="text"></div>
<py-script>
import numpy as np
Element("text").write("Hello World!")
</py-script>
</body>
</html>
この場合、インデントが消えてしまいました。
そしてこの状態でインデントが必要なfor文を追加してみます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
</head>
<body>
<py-config>
packages = ["numpy"]
</py-config>
<div id="text"></div>
<py-script>
import numpy as np
Element("text").write("Hello World!")
for i in range(10):
display(i)
</py-script>
</body>
</html>
インデントがないというエラーが出てしまいました。
この後は新たにアップロードしたHTMLは全てインデントが消えてしまい、どうにもこうにもならなくなってしまいました。
このインデントが消える現象もローカル環境(Visual Studio CodeのLive server)では起こらず、サーバー環境では起こるという不可解な状態です。
ここら辺まできて、流石にお手上げ状態になりました。
PyScriptはまだまだ開発の初期段階なので、今後、こういった問題もどんどん出てきて対処法も出てくると思いますが、現状では情報が少なく私レベルでは解決できないと判断しました。
ということでPyScriptに関しては現状はここまで。
次回からはPythonのFastAPIを使って外部サーバーで処理をするという方法を検討していきます。
ではでは今回はこんな感じで。
コメント