Pythonのパッケージ・プロジェクト管理ツールはまだ乱立状態にあって、どれを使えばいいのかわからないから慣れたpyenv+pipを使おうという判断をする人がいるかもしれない。その判断自体は別に否定しないけれども、初心者に教える時にpyenvを教えるのはもうそろそろやめてほしい。 Pythonをソースからビルドするので、コンパイラや依存ライブラリを事前に揃えないといけない。依存ライブラリが足りないと中途半端なPython環境もできうる。 デフォルトで最適化オプション(PGO+LTO)が付いてないので、最適化ビルドしたPythonより~5%程度遅い Windowsで使えない Rye, pdm, Hatch などは python-build-standalone と呼ばれるビルド済みPythonをインストールする機能があるので、これらの欠点が存在しない。 Pythonをインストールするところま
寺田 学(@terapyon)です。2024年4月の「Python Monthly Topics」は、Python Web UIフレームワークの1つであるStreamlitを使ってWindowsやmacOSのデスクトップアプリを作る方法を解説します。 目的・モチベーション Pythonで自動化のスクリプトを作ったり、JupyterLabやColaboratoryでデータの可視化を行うことがあります。これらを作成者以外の多くの方に利用してもらう方法として、Webシステムやデスクトップアプリとして提供する方法が考えられます。 Webシステムの構築やデスクトップアプリの作成となると、技術的なハードルがあります。他には、時間的なコストに見合わないという状況もあり得ます。 Python Web UIフレームワークを使うことで、比較的少ないコードでWeb UIからスクリプトの実行や可視化をするアプリ
個人的には、前者の方がわかりやすいので[]を使っていたのですが、 同じチーム内にlist()で書く人もいて、コードレビューのときに「結局どっちがいいんだっけ?」の議論になったので両者の違いをまとめようと思います。 結論 以下の観点から[]を使うルールにしました。 読みやすさ []は他の多くのプログラミング言語(例えば JavaScript、C++、Java など)でも配列やリストを表すのに使われており、一般的に慣れ親しんだ表現であること。 Pythonの教育/学習資料でも、空のリストを生成する標準的な方法として[]が紹介されている印象。 シンプルに[]の方が簡潔 一方で、list()はpython特有の記法であり、pythonに精通していない人は一瞬「?」となる。 パフォーマンス [] は list() よりも生成が速い。 検証してみた 両方の書き方でそれぞれ空のリストを100万回作成する
Pythonが教育用途において十分だという話 今話題のPythonを教えている現役の講師です。Pythonを教える際に重視すべきだと考えている機能等について書いておきます。 dataclass / Pydantic 自分は型ヒントよりもdataclassやPydanticを使った型付けを重視しています。いわゆるクラスベースな言語の書き方が大事だと考えています。 dataclass Pythonは動的型付け言語であり、interface相当の機能すらclassの構文で書く変わった言語です。近年Pythonの型ヒントは少しづつ充実してきていますが発展途上であることは否めないですし、何より実行時にその型であることは保証されないので、dataclass等を使った開発スタイルが依然強力だと考えています。 Python+TypeScriptというようなスタックを使う際には両言語の差に混乱するでしょう。
asyncioについて 概要 Python3.4以降の標準ライブラリに含まれている、非同期処理を実現させるためのライブラリです。非同期処理は主に、シングルスレッド内で複数のI/Oバウンドな処理を効率的に実行するために使用されます。 I/Oバウンドな処理であれば、asyncioによる非同期処理化により、他のタスクへの切り替えが可能なため、実行時間の大幅な短縮が見込めます。一方、CPUバウンドな処理の場合は、その処理がシングルスレッド内で完結するため、他のタスクへの切り替えができず、asyncioによる高速化はあまり期待できません。CPUバウンドな処理を高速化するためには、マルチスレッディングやマルチプロセッシングなどの並列処理手法を用いる必要があります。 Column: 非同期処理と並列処理は別物である これらは似た概念であり、混同しがちですが、実際には別物です。 並列処理 (Paralle
1.はじめに Pythonのasyncioは、async・await構文を利用して並行処理を行うため公式ライブラリです。 筆者はいくつかのライブラリでasync・awaitまたはasyncioなるキーワードを目にしつつも、理解を後回しにしてきました。この度一念発起して情報を整理し、同じような人たちのために情報をまとめました。 まず、asyncioの基本的な使い方を改めて整理しました。 特に、並行処理のタスク遷移と例外周りについて、パッと検索した範囲ではあまり情報が見つからなかったため、深掘りしてまとめました。 執筆当時の検索結果では、asyncioの古い書き方や機能を利用しているものも多くありました。この記事ではなるべく執筆現在の最新バージョン(Python 3.11)で推奨されている書き方でサンプルを作ってあります。 ただし、asyncioについて色々と書いたものの、async・awai
FastAPIの人気が日に日に増している昨今ですが、まだまだ「他のフレームワークでいいじゃん」「本当に本番投入して大丈夫?」など様々な思いで導入をためらっている方も多いかと思います。 理想的な姿はあれど、現実的には理想を追い過ぎると準備やメンテナンスのコストが高すぎうまくいかないこともあります。そのため、ある程度の妥協をして開発・運用していくことになりますが、”コスパ”のいい塩梅をお届けします。 私は、日頃FinTechというミッションクリティカルなドメインにおいてFastAPIをかれこれ2年以上運用しており、その現場からの開発の現実を紹介します。これならFastAPIを実務で使えそうだな、という実感を抱いて帰っていただきたいと思っています。 同じ思いで、「動かして学ぶ!Python FastAPI開発入門」という本を今年出版しました。本では体系的に学べるようにするため盛り込めなかったTi
はじめに FastAPIはPythonのWEBフレームワークで、同じ分類のフレームワークとしてFlaskやDjangoなどが挙げられます。FlaskとDjangoはよく比較され、Flaskが最小限のコードで書き始められるシンプルなマイクロフレームワークと呼ばれるのに対し、Djangoはログイン機能、データベース管理などが初めから備わっておりフルスタックフレームワークと呼ばれています。 FastAPIはFlaskと似ているマイクロフレームワークで公式ドキュメントでは次のように紹介されいます。FastAPI は、Pythonの標準である型ヒントに基づいてPython 3.6 以降でAPI を構築するためのモダンで高速(高パフォーマンス)な、Web フレームワークです。[1] 本記事では、以下の内容を扱います。 特徴である型ヒントとそれにより実現できるAPIドキュメントの自動生成 SQLAlch
Go、Python、Kotlin、Rust、TypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Python編では橘氏が登壇。Pythonで並列処理を行う際の設計方針と、実装上の癖について話します。 西川氏の自己紹介 西川大亮氏(以下、西川):ここからはPython編の「ちょっとしたデータ分析の並列化」というタイトルで、西川から話します。 GOに勤める西川です。今やっているのは、タクシーやハイヤーの営業支援。「お客さんを乗っけていない時間、どこを走ったらいいの?」とか「どういうところで待っていたら注文来やすいの?」というところのナビをする、「お客様探索ナビ」というサービスのいろいろなことをしています。小さなサービスなのでいろいろやっている感じですね。 P
Pythonには多くのlinter・formatterが存在していて、どれを使えばいいか迷います。そこで有名どころをいくつか試してみて、個人的に運用がしやすいと思った組み合わせを考えました。 linterとformatter linterとformatterはどちらもプログラムの実行を伴わない静的解析ツールですが、それぞれ役割が違います。 この二つについて、当初勘違いをしていました。 コードがある基準に従って書かれているかをチェックするためのツールがlinter、基準に従うように自動修正するのがformatterだと思っていたのですが、少し違うようです。 linterとは、対象のコードがベストプラクティスに沿っているかどうかをチェックするツールです。例えばPythonで言うと、boolean値は==ではなくisで比較するとか、型の比較にはtype()ではなくisinstance()を使うと
はじめに Streamlit vs Gradio Gradioの設計思想 Interface 入出力に応じたUI Interface String Shortcut 入力データのサンプルのセット ドキュメンテーション テーマの変更 タイムアウトへの対処 中級者への第一歩、デモを作る際に知っておきたい処理 Gradioが担当する前処理について プログレスバー もろもろの出力結果を保存するには? 認証認可(というか認可) その他、解説しないが需要の有りそうなもの まとめ 追記 : 動画になりました。 はじめに 機械学習系のデモアプリを作成することがしばしばありStreamlitを使用していたが、パラメーターなどをいじるたびに処理が最初から走るなどといった挙動に悩まされていた。 同僚がGradioというのを使っていたのでサーベイがてらメモしていたらブログが出来上がってしまった。 本ブログでは、G
はじめに Pythonは世界的にも人気のあるプログラミング言語ですが、実行速度については課題があります。Pythonの実行速度を高速化したい、という要求は根強く、これまでにも様々な処理系が開発されています。 この記事はPythonで書かれたコードを35000倍に高速化するにはどのような方法があるかについてまとめたものです。 この記事は: Pythonで書かれたアルゴリズムを35000倍に高速化する 事前コンパイル、並列化、SIMD演算を駆使する 最終的に44000倍まで高速化できた なぜ35000倍? 2023年5月2日にModular社よりPythonの使いやすさとC言語の性能を兼ね備える新しいプログラミング言語、Mojoの開発について発表がありました。低レベルのハードウェア向けにコンパイル可能なこと、文法的にはPythonを踏襲しており、既存のPythonライブラリを利用可能であること
回答 (13件中の1件目) JIT方式は中途半端なものではありません。もちろん万能でなんでも優れているわけでもありませんが以下の利点があります。 * プログラムは単一の機械独立、OS独立の形式で配布できる(実行時に実行環境の機械語に変換できる) * 配布形式が小さくなる。マシン中立なバイナリ表現にした場合は特に。 * 全体をネイティブコンパイルするのではなく、速度にシビアに関わる最内周ループや何度も実行される場所に限ってネイティブコンパイルすることで実行に必要なメモリフットプリントを減らすことができる。 * 実行時だけわかる情報を元にした最適化やコード生成が可能。例えば、 *...
Answer (1 of 5): It's hard to find small examples that are unambiguously better in Haskell. Even if we have a program that's neater and shorter in Haskell, people unfamiliar with its abstractions will claim that the Python version is "obvious" and the Haskell version is too esoteric. And hey, I s...
Beyond exception handling, there's something else I see people struggling with, which is logging. Most people don't know what to log, so they decide to log anything thinking it might be better than nothing, and end up creating just noise. Noise is a piece of information that doesn't help you or your team understand what's going on or resolving a problem. Furthermore, I feel people are uncertain ab
ターミナルは暗い。Pythonでバックエンド開発をしていると日々真っ暗な画面を凝視することになり、性格も人生も暗くなります。 そこに光明を差すライブラリを見つけました。Richです。Richを使うことによって、真っ暗なターミナルを色とりどりのフォントと絵文字で明るい人生を送ることができるようになります。 What is Rich? Richはターミナルにリッチなテキストを美しく整形して出力するPythonライブラリです。 Pythonの標準出力、ログの両方をきれいに表示することができるようになります。しかも絵文字も使えます。 Richは以下で公開されています。 Github Documentation Richになりましょう! Rich入門 インストールは簡単です。すぐRichになれます。
はじめに 2021年、Pythonで複数の暗号系ライブラリを開発してPyPIで公開してきました。その過程で、setuptools、flit、poetryと、幾つかのパッケージ管理をわたり歩き、GitHub上でのCI/CDも色々試す中で私的なべスプラが定まってきたので、2022年初に備忘録としてまとめておきます。 具体的には、pyenv、poetry、pre-commit、tox、GitHub Actions を活用し、低コストで(=なるべく自動で)、高品質のプロダクトをPyPIにデプロイする方法・設定を共有します。個別のツールの記事はよく目にするのですが、開発ライフサイクル全体をカバーする記事がなかなか無かったので。 開発環境の整備 - pyenvで複数のPythonバージョンでの開発環境を整備 パッケージ管理 - poetry/pyproject.tomlでの一元的なパッケージ管理 静的
For all those Python developers who are wondering: When will Python 4.0 be released?What’s new in Python 4.0?How will we be able to migrate to Python 4.0?Well, let me tell you that Python 4 will probably never arrive. And this is not me saying this, but the creator of the Python programming language himself: Guido Van Rossum. So please, nobody ask about the Python 4.0 release date. The creator of
Implementing RSA in Python from Scratch This is a guide to implementing RSA encryption in python from scratch. The article goes over the math and has code examples. Please note that it is essential for me to emphasize that the code and techniques presented here are intended solely for educational purposes and should never be employed in real-world applications without careful consideration and exp
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く