ブックマーク / methane.hatenablog.jp (12)

  • pyenvを初心者に薦めるのはもうやめよう - methaneのブログ

    Pythonのパッケージ・プロジェクト管理ツールはまだ乱立状態にあって、どれを使えばいいのかわからないから慣れたpyenv+pipを使おうという判断をする人がいるかもしれない。その判断自体は別に否定しないけれども、初心者に教える時にpyenvを教えるのはもうそろそろやめてほしい。 Pythonをソースからビルドするので、コンパイラや依存ライブラリを事前に揃えないといけない。依存ライブラリが足りないと中途半端なPython環境もできうる。 デフォルトで最適化オプション(PGO+LTO)が付いてないので、最適化ビルドしたPythonより~5%程度遅い Windowsで使えない Rye, pdm, Hatch などは python-build-standalone と呼ばれるビルド済みPythonをインストールする機能があるので、これらの欠点が存在しない。 Pythonをインストールするところま

    pyenvを初心者に薦めるのはもうやめよう - methaneのブログ
  • PythonのマルチスレッドWSGIサーバーの選定 - methaneのブログ

    今までuWSGIをシングルスレッド、マルチプロセスで使っていたのだけれども、昔に比べて外部のAPI呼び出しが増えているのでマルチスレッド化を検討している。 uWSGI uWSGIでマルチスレッドを有効にした時は、各workerスレッドがacceptする形で動作する。スレッド数以上の接続をacceptすることがないので安心。 プロセス内のスレッド間ではmutexで排他されて、同時にacceptを実行するのは1スレッドのみに制限されている。つまりthendering herd問題はプロセス間でしか起こらない。マルチスレッド化でプロセス数はむしろCPUコア数まで減らせるので、thendering herd問題はむしろ今よりも軽減できる。(ちなみにプロセス間でもロックしてthendering herdを許さないオプションもあるけど、プロセス間同期は怖いので使っていなかった。) ただしuWSGIのマ

    PythonのマルチスレッドWSGIサーバーの選定 - methaneのブログ
  • 構造化ログから構造化イベントへ - methaneのブログ

    オブザーバビリティ・エンジニアリング 作者:Charity Majors,Liz Fong-Jones,George Mirandaオーム社Amazon オブザーバビリティ・エンジニアリングの5章のタイトルは「構造化イベントはオブザーバビリティの構成要素である」です。構造化イベントの定義は5.1節にあります。 イベント とは、番環境のサービスへの影響を理解するために、ある特定のリクエストがそのサービスとやりとりしている間に発生したすべての記録です。 そこからさらにイベントの記録について説明が続きます。 空のマップを初期化することから始めます。このマップには、そのリクエストの有効期間中に発生したものに関する興味深い詳細、 たとえばユニークID、変数の値、ヘッダー、リクエストで渡されたすべてのパラメーター、実行時間、リモートサービスへのコール、それらのリモートコールの実行時間など、後にデバッ

    構造化ログから構造化イベントへ - methaneのブログ
  • Ryeを使っていると uv venv が動かない - methaneのブログ

    Ryeを使っている状態で uv venv をすると、次のようなエラーになります。 $ uv venv × Querying Python at `/Users/inada-n/.rye/shims/rye` failed with status exit status: 2: │ --- stdout: │ --- stderr: │ error: unexpected argument found │ --- pythonpython3 コマンドが rye コマンドのシンボリックリンクになっていて、ryeはpythonとして起動された場合は .python-version などのルールに従って決めたバージョンのPythonを起動するようになっています。ちなみに +3.8 みたいにしてバージョンを指定することもできます。 $ python3 +3.8 -msite sys.path

    Ryeを使っていると uv venv が動かない - methaneのブログ
  • 構造化ログのフォーマット logfmt vs JSON lines - methaneのブログ

    構造化ログのプラクティスをあちこちで調べていたら、logfmtを推奨する記事を見つけたので調べてみました。 先に結論を言うと、JSON linesを使っておくのが良さそうです。 logfmt について logfmtとはスペース区切りで key=value を並べたフォーマットです。文字列にはクォートとエスケープによってスペースや改行を含められます。 at=info method=GET path=/ host=mutelight.org fwd="124.133.52.161" dyno=web.2 connect=4ms service=8ms status=200 bytes=1653 (logfmt から引用) あちこちで logfmt のリファレンスとして紹介されているのはこの記事です。 https://brandur.org/logfmt 発明されたのはどこか分かりませんが、流行

    構造化ログのフォーマット logfmt vs JSON lines - methaneのブログ
    nikkie-ftnext
    nikkie-ftnext 2024/03/04
    「先に結論を言うと、JSON linesを使っておくのが良さそうです。」
  • uvとRye - methaneのブログ

    先週にRuffを開発しているAstralがuvを発表しました。 astral.sh uvは現在のところはvenv, pip, pip-toolsの基的な機能を提供していますが、将来は"Cargo for Python"になることを目標にしています。 一見すると乱立しているPythonのパッケージ管理ツールにもう一つ加わったように見えますが、Ryeの開発者のArminとuvの開発チームは連携していて、同時に次のような発表をしています。 uv: Python packaging in Rust Rye Grows With UV | Armin Ronacher's Thoughts and Writings Ryeはもともとより良いパッケージツールがどうあるべきかの実証のために作られていて、中身は既存のツールのツギハギだった Ryeがpip-toolsやvirtualenvの代わりにuvを

    uvとRye - methaneのブログ
    nikkie-ftnext
    nikkie-ftnext 2024/02/21
    >pipはvirtualenvを有効にしないとホストのPythonにライブラリをインストールしようとしてしまうが、uv pipは .venv ディレクトリがあるとそっちにインストールしてくれる。
  • Ryeの中のuvを使う - methaneのブログ

    uvにはまだ self update の機能がありません。 Homebrewにはすでにuvが追加されて頻繁にアップデートされているので、Homebrewユーザーは brew install uv がおすすめです。 Homebrewを使ってない環境でuvをインストールし手軽にアップデートするには 、rye install pipx か brew install pipx した上で pipx install uv するのがおすすめです。 Rye自体にも rye install コマンドはありますが、まだpipxほどは使い勝手がよくありません。 (pipx upgrade-all 相当ができない) 裏技として、Ryeでuvを有効にする(rye config --set-bool behavior.use-uv=true)とRyeの内部にuvもインストールされるので、それを直接使うこともできます。

    Ryeの中のuvを使う - methaneのブログ
  • ryeでPythonを実行すると "Cannot read termcap database; using dumb terminal settings." が出る - methaneのブログ

    2024/02/26 追記 2/24リリースから改善されたので、下記の対応は不要になりました。 Release 20240224 · indygreg/python-build-standalone · GitHub Rework of the terminfo database on Linux distributions. ncurses now looks for the terminfo database in /etc/terminfo, /lib/terminfo, and /usr/share/terminfo by default. This should result in the terminfo database being found on many popular Linux distributions, including Debian and RedHat v

    ryeでPythonを実行すると "Cannot read termcap database; using dumb terminal settings." が出る - methaneのブログ
  • PEP 723がAcceptされて、pipx runで依存ライブラリがあるスクリプトを実行できるようになっていた - methaneのブログ

    時間がなくて議論を追っていなかったのですが、標準ライブラリ以外に依存したスクリプトを手軽に配布・実行するための提案である PEP 722 と PEP 723 がしばらく前から議論されていて、先月にPEP 723の方がAcceptされていました。 PEPのサンプルを引用しておきます。 /// script と /// で囲われている部分に、必要とするPythonのバージョンと、依存するライブラリを書いています。 # /// script # requires-python = ">=3.11" # dependencies = [ # "requests<3", # "rich", # ] # /// import requests from rich.pretty import pprint resp = requests.get("https://peps.python.org/api/

    PEP 723がAcceptされて、pipx runで依存ライブラリがあるスクリプトを実行できるようになっていた - methaneのブログ
  • ryeをpyenvのように使う - methaneのブログ

    最近は複数のPythonバージョンを用意するのにpyenvを使うのをやめてryeを使っています。 プロジェクトもryeで管理すればいいのですが、OSSメンテしていると良くあるのがIssueの再現のためにスクリプト1つ動かすための環境を作るケースでは若干ryeは面倒です。 src等のディレクトリは不要ですし、addしてからsyncしないといけないし、 python script.py じゃなくて rye run か rye shell をしないといけないし。 なので、ryeでプロジェクト管理するよりも、ryeをpyenvのように使うことが多いです。しかも、pyenvを使っていた時はpythonの起動速度が遅くなる事を嫌ってshimsは使っていなかったのですが、ryeはオーバーヘッドがすごく小さいので、shimsにパスを通して rye pin を使って今のディレクトリで利用するPythonのバ

    ryeをpyenvのように使う - methaneのブログ
    nikkie-ftnext
    nikkie-ftnext 2024/02/01
    「ryeでプロジェクト管理するよりも、ryeをpyenvのように使うことが多いです」
  • PDFをタブレットで読む - methaneのブログ

    年末年始はこのを読んでいた。 GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ 作者:千田 和央翔泳社Amazon コピーコントロールがない電子書籍が買える場合はなるべくKindleよりもそちらを買うことにしている。 翔泳社は自前でPDF版を売っていて、しかもしばしば40%オフといった大幅値引きのセールを行なっているので、今回はそこで買った。 www.seshop.com オライリーや技術評論社の電子書籍はePubが取得できる場合が多くて、基Google Play Booksのアップロード機能を使い、Kindleでも読めるの場合はSend to Kindleを使っている。 しかしKindleGoogle Play Booksは、PDFの目次が表示できないので使いづらい。Acrobatか、iPad

    PDFをタブレットで読む - methaneのブログ
  • `from __future__ import annotations` がPython 3.10でデフォルトにならなくなりました - methaneのブログ

    PEP 563 は Python 3.10 でデフォルトになる予定で、実際に去年の10月から master ブランチでは有効になっていました。今までの Python 3.10 のアルファ版でも有効になっています。 www.python.org このPEPはアノテーションの実行時の利用に後方非互換性と大幅な制限を加えてしまいます。 >>> class C: ... a: int ... >>> C.__annotations__ {'a': <class 'int'>} この例では __annotations__ に int クラスのオブジェクトそのものが入っていますが、PEP 563が有効になると "int" という文字列が入るので、直接 __annotations__ を見ていたコードは動かなくなります。 PEP 563 が有効でなくてもPEP 484に従ったtype annotatio

    `from __future__ import annotations` がPython 3.10でデフォルトにならなくなりました - methaneのブログ
    nikkie-ftnext
    nikkie-ftnext 2021/04/23
    「特にFastAPIのコミュニティーが移行の準備が全くできていないということで、PEP 563のデフォルト化は延期されることになりました」Pydanticの使い方が関係。型ヒントまわりはコミュニティの動きを見て意思決定されてます
  • 1