この記事は2023年5月20日で公開された中国語の記事「Python潮流周刊#3:PyPI 的安全问题」の日本語訳です。主に LLM によって翻訳され、手修正で校正されていますが、もし不自然の点が気づいたら、「記事の改善」機能で、編集リクエストをいただけるとありがたいです。
こちらから最新号まで購読できます(英語のみですので、ご了承ください。)
こんにちは、Pythonエンジニアのネコです。ここでは毎週、参考になる Python や汎用技術に関する情報をまとめています。一部は英語の内容も含まれており、小見出しにその旨を記載しています。(今回のタイトルは共有項目の一つから取ったもので、すべての内容がそのテーマに関するわけではありませんのでご了承ください。)
🦄記事&チュートリアル
1、Python のオブジェクト指向プログラミングの要点:クラスとオブジェクト(中国語)
この記事では、クラスとオブジェクトの概念を紹介し、Python におけるそれらの動作原理(定義、インスタンス化、継承など)を具体例を通して解説します。この記事は「Python パノラマシリーズ」の一環として執筆されており、これまでに7つの記事が公開されています。
2、umongo + motor: 高効率な MongoDB アプリケーションを構築する最適な組み合わせ(中国語)
本記事では、Tornado において umongo と motor を統合し、MongoDB と非同期・非ブロッキングで連携する方法を解説します。本記事は「tornado 並行プログラミングシリーズ」の一部であり、これまでに6つの記事が公開されています。
3、LangChain を使って ChatGPT PDF ナレッジベースを構築する(中国語)
LangChain と ChatGPT を用いて、ローカルで動作する PDF ナレッジベースを構築する方法を解説しています。記事中では、PDF ファイルの処理に pdfplumber を、UI の作成に streamlit を使用しています。ナレッジベースの構築と利用のフローチャートは以下の通りです。
4、Python は本当に switch 文だけバイトコードを実行しているのか?(中国語)
CPython が、異なるオペコードに応じて対応する case 分岐にジャンプし、バイトコードを実行する巨大な switch 文を持っている、という一般的な見解があります。この記事ではこの点に疑問を投げかけ、最終的な結論として、Python が computed goto (例えば Mac や Linux 上)を有効にしている限り、バイトコードの実行は switch に依存しないと述べています。なお、この機能は Python 3.2 以降、デフォルトで有効になっています。
5、SQLite のルネッサンス(中国語)
この記事の冒頭には驚かされる事実が示されています。「SQLite のソースコードは 15 万行以上ですが、テストコードとスクリプトは 9000 万行を超える」というのです。記事では、SQLite のアーキテクチャ、そして Litefs、sql.js、absurd-sql、postlite、sqlite3vfshttp など、SQLite をベースとした数々のオープンソースプロジェクトが紹介されており、なぜこれほど多くの分野で SQLite を活用した革新的なプロジェクトが生まれているのか、その理由も解説されています。
6、わずか80行のコードで実現!オープンソースの Midjourney、Stable Diffusion 向けプロンプト作成ツール(中国語)
この記事では、Docker と約 80 行の Python コードを使って、Midjourney の公式画像解析機能「Describe」のようなプロンプトツールを実装する方法を紹介します。CPU と GPU のそれぞれに対応した2種類のツールを提供しています。
7、まるで Rust のように Python を書く(英語)
この記事では、Rust から得られたプログラミングの習慣が紹介されています。具体的には、型ヒントの活用、タプルや辞書ではなくデータクラス の採用、代数データ型や「newtype」の活用、コンストラクタの利用、そしてミューテックスの使い方などが挙げられます。これらは単なる「個人の好み」に留まらないプログラミングスタイルではなく、コードの堅牢性と変更容易性を実際に向上させるための実践的な知見です。
8、Flask についてのヒント集(英語)
この「Flask Tips」コラムでは、Flask を使う上での58の役立つヒントが共有されています。さらに、その著者は最新のブログ記事「私が Flask プログラム開発で最もよく使うライブラリ」の中で、APIFairy、Frozen-Flask、Flask-SQLAlchemy など10の主要なライブラリを紹介しています。
9、Celery が抱える数々の問題点(英語)
Celery は非同期処理や定期実行タスクなどの機能を提供する、非同期タスクキューのライブラリです。しかし、このライブラリには多くの「問題点」があり、この記事ではそのうち15個もの問題点を一挙に列挙し、注意すべき点がまとめられています。ただし、すべての問題に解決策があるわけではありません。例えば、API インターフェースが Pythonic でないことや、型チェックの欠如など、現状を受け入れるしかない課題も存在します。
10、Python で Gopy ライブラリを使って Go パッケージを呼び出す(英語)
著者は、PromQL クエリの静的検証を行う必要がありましたが、Python で利用できるライブラリがありませんでした。この記事では、Gopy を使って Go コードを wheel ファイルにコンパイルする方法と、エラーハンドリング、OS の互換性、デバッグ、テストなどの留意すべき点について解説しています。
11、Pandas に最適なファイル形式(英語)
Pandas を利用する際、まずデータを読み込む必要があります。Pandas は非常に多くのデータ形式に対応していますが、一体どれが最も適しているのでしょうか?この記事では、3つの評価基準(型サポート、ディスクフォーマット、読み書き速度)を挙げ、3種類のデータファイル(CSV、JSON、Parquet)を比較テストしています。果たして、最終的な結論は何だったのでしょうか?
12、PyPI を巡る一連のセキュリティ関連ニュース(英語)
PyPI は 3 月に公式ブログを開設し、5 月初旬には AWS から 14.4 万ドルの資金提供を受け、新たなセキュリティエンジニアのポジションを設置することを発表しました。これに続くように、今週はセキュリティに関連する出来事がいくつか立て続けに報じられました。
- 5/21、PyPI は1週間にわたるマルウェアの継続的な攻撃を受け、新規ユーザーの登録と新規プロジェクトのアップロードを一時的に停止しました。(これに関連するとある記事では、これらのマルウェアが ChatGPT の流行に乗じて、クリップボードの内容を盗み出し、仮想通貨取引を乗っ取ろうとした可能性が指摘されています。)
- 5/23、PyPI はPGP 署名の廃止を発表しました。過去3年間にアップロードされた署名で有効だったのはわずか36%に過ぎず、この機能の廃止がメンテナンスコスト削減に繋がるためです。(これについて、ある記事では、PyPI における PGP の劣悪な状況が大量のデータと統計図を用いて分析されています。)
- 5.24、PyPI はブログを公開し、PSF (Python Software Foundation) が米国司法省より PyPI ユーザーデータの提供を求める3通の召喚状を受け取ったことを明らかにしました。弁護士の助言に基づき、司法省の要求に応じデータを提供するとともに、召喚状に関する詳細を公表しました。
- 5/25、PyPI は「2要素認証による PyPI アカウントの保護」と題した発表を行い、2023年末までに PyPI 上のすべてのアカウントで2要素認証の有効化を義務付け、アカウントのセキュリティ強化を図ると表明しました。
- 5/26、PyPI は「PyPI における保存 IP データ量の削減」と題するブログを公開しました。この中で、ユーザーの IP アドレスを保存しないという目的を達成するためにチームが行った取り組みについて説明し、ユーザーのプライバシー保護とより良い運用管理の両立を目指す姿勢を示しました。
🐿️プロジェクト&リソース
1、CyberWaifu:LLM と TTS を活用したチャットボット
LLM の主要フレームワークとして LangChain を採用し、go-cqhttp を用いて QQ チャットボットとしてデプロイされています。テキスト読み上げには vits や edge-tts が利用可能で、言語モデルは ChatGPT と Claude に対応しています。
訳注:QQは、LINEみたいに、中国のテンセント社が提供するインスタントメッセンジャーサービスです。
2、FastGPT:OpenAI ベースのナレッジベースプラットフォーム
技術スタック: Next.js + TS + Chakra UI + Mongo + Postgres。プライベートデプロイメントに対応しており、オンラインでの試用も可能です。
3、jesth:より読みやすいデータシリアル化フォーマット(英語)
本記事では、この新しいフォーマットを TOML、YAML、JSON と比較し、Python での具体的な使用方法を詳しく解説しています。
4、trogon:CLI プログラムに使いやすいユーザーインターフェースを生成(英語)
コマンドラインプログラムは通常インターフェースを持たないため、ユーザーにとって必ずしも使いやすいとは言えません。このプロジェクトは、コマンドの編集や実行を支援する、視覚的に優れたユーザーインターフェースを生成します。
5、ipyflow:Jupyter Notebook向けのリアクティブ Python カーネル(英語)
このプロジェクトは、インタラクティブなセッション中にシンボルとセル間のデータフロー関係を追跡します。これにより、以下のような機能が利用可能です:実行に関する提案表示、リアクティブ実行のサポート、構文拡張、ipywidgets との統合など。
6、solara:Python だけで記述された React ライクのフレームワーク(英語)
solara は、純粋な Python で実装された React である Reacton を用いて、ipywidget ベースのアプリケーションを構築できます。Jupyter Notebook 上で利用できるだけでなく、FastAPI などのフレームワークと組み合わせて独立した Web アプリケーションとしても使用可能です。
7、Python 3.12 のベータ 1 がリリース(英語)
10 月 2 日にリリースが予定されている Python 3.12 の最終版に先駆け、ベータ 1 が公開されました。これは、今後新たな機能が追加されないことを意味します。全体として、このバージョンでは多くの関数、クラス、メソッドが削除され、より軽量化されています。また、パフォーマンスも大幅に最適化されています。特に注目すべきは、PEP-684 (各サブインタープリターに独立した GIL) が導入された点です。ただし、この機能が本格的に活用できるようになるのは、PEP-554 (標準ライブラリにおけるマルチインタープリター) が 3.13 で実装されてからとなります。
8、Python と Rust のプログラミングにおけるイディオムを比較(英語)
この興味深いウェブサイトでは、300 以上のイディオム (慣用的な表現) における異なるプログラミング言語の比較が可能です。これにより、学習効率を大幅に向上させることができます。ここでは Python と Rust を比較しましたが、サイトのトップページからは 30 種類の言語を選択できます。
🐢ポッドキャスト&動画
1、ハーバード大学による Python プログラミング入門コース(英語)
ハーバード大学のコンピュータサイエンス入門コースでは、初心者がコンピュータサイエンスとプログラミングの基礎、そして Python を使ったプログラミング方法を学ぶことができます。これまでに50万人以上が受講しています。
2、Django おすすめプラグイン 10 選(英語)
今回の動画では、『Django by Example』の著者が、Django Debug Toolbar、Django REST Framework、Django Channels など、おすすめの Django プラグインを 10 個紹介しています。
🥂ディスカッション&トピック
1、Windows が tar、7-zip、rar、gz などの形式に対応するようになるのか?(英語)
匿名の情報筋によると、Windows はオープンソースプロジェクトの libarchive を利用して、rar などの形式をサポートするようになるという。これは本当なでしょうかね?
2、API 開発に最適な言語とは?TS/JS vs. Python(英語)
保守性、コードのエレガンス、柔軟性、そして開発速度といった観点から見て、これら2つの言語における API 開発の経験はどちらが優れているでしょうか?
スポンサー&サポート
コンテンツの作成には多くの時間と労力がかかっています。もしこの記事が少しでも参考になったと感じたら、気軽にサポート や コーヒーをごちそう などをいただけると嬉しいです!この週刊が気に入った方は、ぜひ必要としている仲間にもシェアして、より多くの方に役立ててもらえたら嬉しいです〜
また、スポンサーも募集中です。興味のある方はぜひ DM にてご連絡ください。
本週刊について
Python トレンド週刊では、国内外200以上の情報源から注目すべき記事、チュートリアル、オープンソースプロジェクト、ソフトウェアツール、ポッドキャスト、動画、話題のトピックなどを厳選してお届けします。本週刊のビジョンは、すべての読者が Python 技術を高めるとともに、本業や副業の収入アップにつなげられるようサポートすることです。
購読方法:Python猫 (Wechatのグループ参加可)| RSS | メールマガジン | Github | Telegram | Twitter