ギャバンITサービス
お菓子の家が作れるシステムエンジニアです

djangoをdockerコンテナで利用(19) - ログアウト画面で真っ白

定期更新してたらdjango5があることに気づいた。 来年に5.2のLTS出るんやな。 予定として6.0のことも書いてある。 2026年のことまで書いてあるのは気ぃ早いなぁ。 4.2.7を使ってたのを、勇気を出して5.0.2に変えてみた。 バージョン上げてみる pip3で普通にやってみる。 おお、他にも色々上がっとるやん。 テストしてだいたいOKやったけど 2015年頃からデータベースに帳簿とか画像とかpdfが入ってて、読み書きはできた。 帳簿も2020年のを見比べると金額あってたから、データベース関連の処理とか集計の処理は大丈夫っぽい。 見た目一緒やから別ページのリンク画像やけど、円グラフも表示できてた。 LTSやないから期待してへんかったけど、django5でも行けるんとちゃうか。 と思ってたら、最後のログアウトしたところで画面真っ白。 なんかヤな予感。 前にdjango3をdjango4にあげたときにどっかのページ表示でこんなんあったような、なかったような・・・。 だいたい真っ白のときにはサーバからまともなhtmlが戻ってきてへんのな。 調べてみた 検索してみると、logoutviewでgetが非推奨になったらしい。5.0になったらなくなってまうってよ。 Djangoの認証システムを使用する | Django ドキュメント | Django docs.djangoproject.com 脆弱性対応とかなんやろけど、どないしたらええんやろか。 ログアウトできんと困るやん。 対処方法探す 同じ様なことをやってる人がいた。 getの代わりにpostメソッド使えばええみたいやけど、getメソッド許可するの? 侍テラコヤ(SAMURAI TERAKOYA) - 日本最安級のサブスク型オンラインITスクール terakoya.sejuku.net そういえば自分のログアウト処理の箇所はこう書いてた。 1 <a href="https://nafslinux.intra.gavann-it.com:30443/gvisWebApp/logout/" >イントラwebDjangoログアウト</a> ほなこう書いてpostメソッド指定してみよ。 1 2 3 4 <form action="{% url 'gvisWebApp:logout' %}" method="post"> {% csrf_token %} <input class="darkmode-ignore" type="submit" value="ログアウト"> </form> そやけど、これだけやったらアカンかった。 まだ真っ白画面になった。 ...

html内で画像埋め込みと日付差

簡単な処理をhtmlで作るメモって案外やってないからやってみた。 もうすぐxx日とか表示させてみる。 URLで画像だけでなく、埋め込み画像もやってみよか。 埋め込み画像はhtmlに入れる時base64でエンコードしたものをimg srcってタグに展開する。 base64って7ビット表現やったかな。 元のjpgとかpdfよりもサイズが膨らんでまう。 pdfとかもインライン表示できるし、djangoの処理で日常的にやってるんやけど、一回書いたら問題出たときしか見いひんからここでメモ。 base64変換やってくれるサイトあるんかなって探したらすぐあった。 作者さんありがとう。 画像Base64エンコード - 画像をBase64文字列へ変換 | Web ToolBox web-toolbox.dev 結論 こうなる。 画像は、左が自分のサイトにある4kBぐらいのjpeg画像で、右がそれをbase64エンコードしてhtmlに埋め込んだもの。 下の方に今日の日付との日数差が出てる。 書いた内容 こんな感じ。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>gvis sample</title> </head> <body> <div class="header"><font size="8"><center>期限までもうすぐ!!(左がURL指定、右が埋め込み)</center></font></div> <br> <div class="main" style="text-align: center"> <img src="https://gavann-it.com/wp-content/uploads/2021/10/mac-Monterey009.jpg"/> <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAFCAT8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5UooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiirOnWN3qV5Haadaz3d1KcJDBGXdj6BRyaAK1Fdf4q+G3i3wnoVvrHiLRpdPsLiYQRvLIm4uVZgCgbcOFbqB0rkKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOl+Hfg7UvHfiu00LSFAlmO6WZhlYIx9529h+pIHevv74a/Dnw/8PdIW00O0X7SygXF7IAZpz/tN2Hoo4H615T+xj4YhsPA9/wCIpEBu9TuDCjkciGPjA+rl8/Qele0+NvFmj+C9AuNX1+6W3tYh8q9XlbsiL/Ex9PxOACaAPAP23ddiTRvDmgK4M8tw986jqqopRSfqXf8A75NfJFdT8S/GV7498Y32vagNhmOyGEHIhiH3UH0HU9ySe9ctQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFer+BvgH458W28d0tjFpVjIMrPqLGLcPUIAX+hIAPrXtf7M/wVtdN02z8W+K7VZtUuFE1jazLlbZDysjA9XPUZ+6Md+n0lQB8gv8Asm60LfMfibTmnx9xrdwuf97JP6V5t41+B/jvwmry3OkNf2acm504mdQPUqBvA9yoFfoPRQB8H/Dv40eN/Dvhmz8IeFNKs7h4Wk8oi0kmuCXcscKGwcFj/DXSD4NfFb4m3yar41v0s8j5P7QlyyKeyQxghPodtfZKQxJI8iRosj/eYKAW+pp9AHye/wCyRcCHKeMYjNj7p04hfz83+leeeOP2efHHhi3kuoLaDWbNBuZ9PYs6j1MZAb/vndX3nRQB+VjAqSGBBHBB7UlfTv7YnhvwjY3NrqtjcwWnim5fM9lEv/HzGf8AlqwHCsD3ON3PUivmKgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACu++BfhVPGPxR0TS7lA9kshublSMgxRjcVPsxAX/gVcDX0X+xNaLJ49127YZaHTfLX23yof/ZKAPskAAYHAooooAKKKKACiiigArjfi542g+H/gW/1yVVkuFAhtYW6STN90H2GCx9lNdlXy1+3FqEq23hLTlJEEj3Nw47FlEar+QZvzoA+X9d1e/wBe1e61TV7mS6vrpzJLLIclif5AdABwAMCqFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFfRX7E12sfj7XLQnDTab5g99kqD/2evnWvT/2bNdXQPjHoEkr7YLx2sZOcZ81Sq/+P7KAP0FooooAKKKKACiiigAr5w/bX0CW98I6HrkKFl025eGbA+6kwXDH23RqPqwr6PrO8RaNY+ItDvtI1aETWN5EYpU9j3B7EdQexAoA/LyivQvi98Lda+HGtPFdxPc6PK5+yagi/JIOyt/df1B+oyK89oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqS2nktriKeB2jmiYOjr1Vgcgj8ajooA/S74a+KYfGngbSNegK7rqAGZF/glHyyL+DA/hiumr4x/ZH+I6eH/EEnhTVptmm6rIGtXY8RXOMY+jgAfUL6mvs6gAooooAKKKKACiiigDlPirrGnaB8PNd1LWbe3urSG2b/AEe4QOkznhEKng5YqK/Nevo79r74jJrOsw+D9JmD2WmyeZeup4e4xgJ9EBOf9okfw184UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAKrFWDKSGByCOoNfbv7OXxmt/GOmQaB4juVj8S26bEeQ4+3IB94H/noB1HfqO+PiGnRSPFIkkTskiEMrKcEEdCDQB+qVUdZ1jTdDs2u9Z1C0sLUcGW5mWNc+mWI5r8/7L42/EazsFs4fFV4YVGAZUjlfH++ylv1ri9e13VvEF6bvXNSu9QuTx5lzK0hA9Bk8D2FAH36fjb8ORceSfFVlvzjISQr/wB9bcfrXa6Jrel69Zi70TUbTULY8ebbTLIoPoSDwfavy7rR0PW9U0G9F5omo3en3Q4822laNiPQkHke1AH6h14r+0N8ZLXwNpM2j6HcJN4ouU2qEIYWakf6x/8Aax91fxPHX5YuvjT8RbqzNrL4rvxERgmMJG//AH2qhv1rz+aWSeZ5ZpHkldizO5yWJ6kk9TQASyPLK8krs8jkszMcliepJ9aZRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV6f8DPh1YfEDUdUXVb64t7axjjPl2xUSSFy2CCwIAG3njuK8wq5peqX+kXX2nSr66sbnBXzbaZonweoypBxQB9S/8M4+EP8AoI6//wB/4f8A41R/wzl4Q/6CGv8A/f8Ah/8AjVfOX/CeeL/+hq1//wAGM3/xVH/CeeL/APoatf8A/BjN/wDFUAdH8RPBWk+GvGOoaRZSX0tvb+XteaVCx3RqxzhAOrHtXOf2PZf9PP8A38X/AOJrMvNc1a+uXuL3VL64uHxulmuHdmwMDJJyeABUH9o3v/P5c/8Af1v8aANr+x7L/p5/7+L/APE0f2PZf9PP/fxf/iaxf7Rvf+fy5/7+t/jR/aN7/wA/lz/39b/GgDa/sey/6ef+/i//ABNH9j2X/Tz/AN/F/wDiaxf7Rvf+fy5/7+t/jR/aN7/z+XP/AH9b/GgDa/sey/6ef+/i/wDxNH9j2X/Tz/38X/4msX+0b3/n8uf+/rf40f2je/8AP5c/9/W/xoA2v7Hsv+nn/v4v/wATR/Y9l/08/wDfxf8A4msX+0b3/n8uf+/rf40f2je/8/lz/wB/W/xoA2v7Hsv+nn/v4v8A8TR/Y9l/08/9/F/+JrF/tG9/5/Ln/v63+NH9o3v/AD+XP/f1v8aANr+x7L/p5/7+L/8AE0f2PZf9PP8A38X/AOJrF/tG9/5/Ln/v63+NH9o3v/P5c/8Af1v8aANr+x7L/p5/7+L/APE0f2PZf9PP/fxf/iaxf7Rvf+fy5/7+t/jR/aN7/wA/lz/39b/GgDa/sey/6ef+/i//ABNH9j2X/Tz/AN/F/wDiaxf7Rvf+fy5/7+t/jR/aN7/z+XP/AH9b/GgDa/sey/6ef+/i/wDxNH9j2X/Tz/38X/4msX+0b3/n8uf+/rf40f2je/8AP5c/9/W/xoA2v7Hsv+nn/v4v/wATR/Y9l/08/wDfxf8A4msX+0b3/n8uf+/rf40f2je/8/lz/wB/W/xoA2v7Hsv+nn/v4v8A8TR/Y9l/08/9/F/+JrF/tG9/5/Ln/v63+NH9o3v/AD+XP/f1v8aANr+x7L/p5/7+L/8AE0f2PZf9PP8A38X/AOJrF/tG9/5/Ln/v63+NH9o3v/P5c/8Af1v8aANDUtLt4LN5oGlBTGQ7A5yccYArFqae6uJwBPPLIByA7k4/OoaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z" /> <br> <br> <center><font size="6"> <script> //比較する日付オブジェクトを2つ用意する const today = new Date(); const year = today.getFullYear(); const month = today.getMonth() + 1 ; const date = today.getDate(); var dayToday = `${year}/${month}/${date}`; document.write("---今日は",dayToday,"なので4月1日まで、"); var day1 = new Date(dayToday); var day2 = new Date("2024/4/1"); //差日を求める(86,400,000ミリ秒=1日) var termDay = (day2 - day1) / 86400000; document.write("あと",termDay,"日---"); </script> </font></center> </div> </body> </html> javascriptで日付計算けっこう面倒やねんな。

djangoをdockerコンテナで利用(18) - djangoのインボイス対応

インボイスってのが来月から始まる。 消費税をゴソっと徴収されてまう苦しいルール。 受け取った消費税を、支払った消費税で相殺して払えばええらしいんやけど、この計算けっこう手間がかかる。 売上が1000万円もあるわけないから、時限ルールの2割納税を適用させてもらうけど、計算処理は作っとかなアカン。 djangoで作った帳簿の処理を改造することにした。 目標設定 経費を入力するテーブルに、金額のフィールドがあるのを、8%と10%の消費税を保持させて、月単位集計と年単位集計にその合計を表示させる。 最近受け取ったレシートとかみると、もう適格請求書発行番号を書いてあるものがあった。 なるほど、こうやるんやって横目で見ながら自分のexcel請求書も書式変更した。 結果 だいたいこんなことをやった。 2023autumn pycファイルをgit対象から除外 python3.10を3.11、requirements.txt内モジュールのバージョンアップ カレントデータベース表示の追加 ローカル環境をテスト用mariadbに変えてインボイス対応の実施 インボイス対応 ここが今回の主な作業。 migration(0011_gviskeihi_gvismstkamoku_gvismstkeihishubetsu.py)にうまく追加されないのでpycファイルを手動で削除してから追記しdockerコンテナをビルドしなおし 経費テーブル(GVIS_Keihi)に消費税8%(tax8kng)と消費税10%(tax8kng)の格納項目を追加 モデル(GvisKeihi.py)に経費テーブルの追加列を追記 経費明細のテンプレート(gvis_50x_Keihixxx(Detail/Delete/Update).html)に追記 帳簿のテンプレート(gvis_600_ChoboKensaku.html)に追記 view(gvis_keihi_views.py/gvis_chobo_views.py)に追記 共通処理(common.py)の年間売上経費取得処理(gv_Func_uriageKeihi)を年間売上経費&消費税取得処理に内容変更 共通処理(common.py)に年間受け取り消費税合計取得処理(gv_Func_ukeTaxGokei)と年間支払い消費税取得処理(gv_Func_shihaTaxGokei)を追加 アプリケーションの更新 djangoはpythonのwebフレームワークで、MVT(model・view・template)ってのを組み合わせて作る。 modelはデータベース、templateはhtml、viewは実処理を意味してる。 データ構造を変更するときは、modelを変えてマイグレーションを動かして更新させるんやけど、このやり方が自分にはどうしても気に食わない。 データベース上の列の型とかは自分でコントロールしたいから、マイグレーション使わずに手動で更新した。 データベースのテーブルを更新 もう10年ぐらい前からデータベースを維持してて、最初はphpでwebアプリを作ってた。その頃は navicatのmysql接続版 を使ってた。 5〜6年前やったと思うんやけど、mysqlをやめてmariadbに乗り換えて、去年からphpをやめてdjangoに切り替えた。 今は a5sql を使わせてもらってる。 作者さんありがとう。 昔はa5sqlでテーブルの列追加ってやったことなかったけど、最近見たらめっちゃ楽にできることに気づいた。 テスト用スキーマを開いて、テーブルの設計更新を選ぶとこんな画面が出て、列追加ができる。 金額の列の後ろに消費税8%と10%の列を足してから左上にある「DDL生成」ボタンを押す。ここで右端にある「引き継ぐ値」は何も入れないでおくと、「デフォルト式」の値が設定されるみたい。 すると、新しいsql窓が開いてコメントつきでsqlが作られてビックリ。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 -------------------------------------------------------------------------------- -- `nariDB_Django`.`GVIS_keihi` のレイアウト変更 -- 注意!!:テーブルに依存するオブジェクト(ビューなど)が削除される場合があります。それらのオブジェクトは復元されません。 -- 2023/09/13 nari -------------------------------------------------------------------------------- -- 新テーブルの作成 create table `nariDB_Django`.`$$GVIS_keihi` ( id int(11) auto_increment not null comment 'id' , `workPeriod` datetime comment '業務期間-開始日' , `workShubetsu` char(4) comment '経費種別' , `workPriority` int(10) comment '経費No-優先順位' , `Keihi_date` datetime comment '経費日付' , `Kamoku` varchar(24) comment '科目' , `Tehai` varchar(1000) comment '手配方法・名称・機種' , `Kng` decimal(12,4) default '0.0000' comment '金額' , `Tax8Kng` decimal(12,4) default '0.0000' comment '消費税8%' , `Tax10Kng` decimal(12,4) default '0.0000' comment '消費税10%' , `Biko` varchar(100) comment '備考' , ins_date datetime comment 'データ作成日' , ins_user varchar(100) comment 'データ作成ユーザ' , upd_date datetime comment 'データ更新日' , upd_user varchar(100) comment 'データ更新ユーザ' , primary key (id) ) comment='' engine InnoDB row_format DYNAMIC auto_increment 10554 collate utf8mb3_general_ci / -- 新テーブルへデータ投入 insert into `nariDB_Django`.`$$GVIS_keihi`(id, `workPeriod`, `workShubetsu`, `workPriority`, `Keihi_date`, `Kamoku`, `Tehai`, `Kng`, `Biko`, ins_date, ins_user, upd_date, upd_user) select org.id, org.`workPeriod`, org.`workShubetsu`, org.`workPriority`, org.`Keihi_date`, org.`Kamoku`, org.`Tehai`, org.`Kng`, org.`Biko`, org.ins_date, org.ins_user, org.upd_date, org.upd_user from `nariDB_Django`.`GVIS_keihi` org / -- 元テーブルの削除 drop table `nariDB_Django`.`GVIS_keihi` cascade / -- 新テーブルをリネームして元テーブル名に変更 alter table `nariDB_Django`.`$$GVIS_keihi` rename to `nariDB_Django`.`GVIS_keihi` / -- インデックスとユニーク制約の作成 create index IDX_keihi on `nariDB_Django`.`GVIS_keihi`(`workPeriod`,`workShubetsu`,`workPriority`,`Keihi_date`,`Kamoku`) / テンポラリテーブルに列追加したターゲットテーブルを作って、そこに元テーブルのデータを流し込み、元テーブル削除したらターゲットテーブルを名前変更してキーつけてくれる。 ...

vscode利用

マークダウンの使えるエディタとして2018年頃から利用。 最初はrails案件作業で必要に迫られて活用してたが、いろんなプラグインがあって使うのに四苦八苦。 唯一不満があるとすると、「選択範囲のみ置換」というのができない(もしかしたらできるのかも)。 あまり凝った使い方はせず、mac/windows/linux共通で使えるエディタとして活用。 主な利用プラグイン 1 2 3 4 5 6 7 8 9 10 11 12 Plugin japanese language pack -> 日本語化 git extension -> git拡張機能 git graph -> gitのツリー表示 vscode pdf -> vscodeからpdf出力するのに利用 markdown pdf -> マークダウンで書いた内容をpdf出力するのに利用 Prettier - Code formatter -> Shift + Alt + Fで整形してくれる markdownlint -> シンタックスを指摘してくれる Markdown Preview Enhanced -> プレビュー機能 django -> Django用 Markdown+Math -> 数式表示用 マークダウンを書くための参考 環境を整える 行のハイライト 行のハイライトをsetting.jsonに書き足す ctrl + 「,」を押して画面右上の「settig.jsonを開く」のアイコンをクリックして追記する。 ...

jupyterlab利用 - dockerで動かす

データ分析の勉強してたら使ってみたい環境が出てきた。 jupyterってのがあるらしい pythonはlinuxのシェルで動かすもんかなぁって思ってたらそうやない。 コマンドライン環境だけじゃなくて、グラフとかマークダウンのハデな取り扱いができる環境ってのがある。 データ解析の記事を読んでたらjupyterlabってのがあるそうな。 なんちゅう便利さ。 図解!Jupyter Labを徹底解説!(インストール・使い方・拡張機能) - ビジPy ai-inter1.com 前はjupyter notebookで、jupyterlabが今は主流っぽい。 jupyterhubってのもあるらしいけど、複数人数利用のためのものっぽい。 学校とかが重宝するんかもしれんけど、自分はとりあえず使いたいのでjupyterlabでええ。 何年か前にlinux上でpythonはスクリプトを何度か見たけど、自分は去年にdjangoから入って、phpから改版したアプリ作ってdockerで動かして使ってる。 目的が決まってたからdjangoでええんやけど、最初の頃は配列の中が今はどうなってるんかなぁとか、どうやってweb画面にグラフ表示させるんかなぁって試行錯誤してた。 jupyter使えば一発で表示の練習はできる。 配列の中がどないな入り方してるのかとか見せてくれるし、マークダウン使えるみたいやから簡単なレポートなら作れるっぽい。 なんやねん、そんな便利なツールあるんや。 mariadbからデータ読み込ませたときに、行列ひっくり返さなあかんって、気づくのが早くなったかもしれんなぁ。 docker使ってやってる人おるなかって、探したらいた。 DockerでJupyterLabの環境を作ろう | インフォメーション・ディベロプメント www.idnet.co.jp 作者さんありがとう。 ソースはipynbって種類のテキストファイルを維持してくらしい。 どんなふうに永続化したらええのかがわかったので、自分でもやってみた。 dockerfileの読み替え 作者さんのページは1年前のもの。 docker使うしちょっとだけ新しくしてみる。 参考にさせてもらったdockerfileはFROM python:3.9.7-busterってあった。 busterってのはdebianのコード名。1つ前のバージョン。 debianのlinuxはコード名にディズニー映画「トイ・ストーリー」の登場人物の名前をつけてはる。 今の最新はbullseyeでアンディが乗ってる馬の名前ね。 dockerhubに公開されてるpythonイメージのタグが一覧になってる。 hub.docker.com busterをbullseyeに変更してFROM python:3.12.0a3-bullseyeにしてみたらdocker buildでコケた。 FROM python:3.11.1-bullseyeにしてみたらまたコケた。 FROM python:3.10.9-bullseyeもダメでFROM python:3.9.16-bullseyeにするとうまく行った。 用意したdockerfileはこうなった。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 FROM python:3.9.16-bullseye MAINTAINER "nari" ########################################################################################################### # jupyterlabの環境作成 ########################################################################################################### # パッケージの追加とタイムゾーンの設定 RUN apt-get update && apt-get install -y \ tzdata \ && ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV TZ=Asia/Tokyo # JupyterLab関連のパッケージ(いくつかの拡張機能を含む) RUN python3 -m pip install --upgrade pip \ && pip install --no-cache-dir \ black \ jupyterlab \ jupyterlab_code_formatter \ jupyterlab-git \ lckr-jupyterlab-variableinspector \ jupyterlab_widgets \ ipywidgets \ import-ipynb # 基本パッケージ # Pythonでよく利用する基本的なパッケージ RUN pip install --no-cache-dir \ scikit-learn \ numpy \ pandas \ scipy \ pycaret \ matplotlib \ japanize_matplotlib \ mlxtend \ seaborn \ plotly \ requests \ beautifulsoup4 \ Pillow \ opencv-python djangoのときみたいに、グラフに全角文字使いたくなったら、コンテナに日本語フォント入れたくなるんやけど、apt-getは最初はそのままにしといた。 ...

 ⭐️