5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

トリビア: Mac版のPythonは「壊れている」ので、Poetryのインストールに失敗することがある

Posted at

Intro

Macでインストール可能なPython1を使ってPoetryをインストールしようとすると、動的ライブラリを読み込めないとかいう以下のerror logを吐いて死ぬことがよくある。

dyld[6624]: Library not loaded: @loader_path/../../../../Python.framework/Versions/3.11/Python
  Referenced from: <16376C03-0DA9-3714-9207-5AF8D546EED4> /Users/$USER/Library/Application Support/pypoetry/venv/bin/python3.11
  Reason: tried: '/Users/$USER/Library/Application Support/pypoetry/venv/bin/../../../../Python.framework/Versions/3.11/Python' (no such file), '/Library/Frameworks/Python.framework/Versions/3.11/Python' (no such file), '/System/Library/Frameworks/Python.framework/Versions/3.11/Python' (no such file, not in dyld cache)

$USERは実際にはホームディレクトリ名

特に、HomeBrewでPythonをアップデートした後はよくこの症状が出て、そのたびに調べ直していたので、備忘録としてまとめることにした。

TL; DR

  • PythonはApple版でもHomeBrew版でも良い。(自分はHomeBrew版を使っている)
  • Poetryのインストールには、公式のワンライナーではなく以下のワンライナーを使う。
curl -sSL https://install.python-poetry.org | sed 's/symlinks=False/symlinks=True/' | python3 -

もっと詳しく

Poetryの該当GitHub issue上でのコメントにリンクされたCPythonのGitHub issueのコメントによると、 仮想環境を作成するvenvの --copies--symlinks=False オプションを使う(バイナリをコピーし、シンボリックリンクを使わない)ことで、壊れたPythonバイナリが生成されることが主な原因。この動作は、Poetryのインストールスクリプトでも行っているため、同じ問題が発生する。

「壊れたPythonバイナリ」というのは、「動的ライブラリを読み込めないバイナリ」のことだと思う。同じMac向けのPythonバイナリでも動的ライブラリへのパスの種類は異なっていて、状況は複雑っぽい。

  • Apple版バイナリ: 相対パス
    • symlinks=False にすると常に壊れる。
  • Homebrew版バイナリ: 絶対パス
    • Python 3.11.3までは、Pythonの新しいリリースにアップグレードすると壊れる。
    • Python 3.11.3以降は、HomeBrewで新規インストールしても壊れる。2
  • python.org版バイナリ: おそらく問題ない?

ということで、常にsymlink=Trueにするのが解決策らしい。Macではvenvによる仮想環境の作成にシンボリックリンクを使うのがデフォルト動作になるだろうとの指摘がある。2

ちなみに未だに該当issueは1年以上closeしておらず、問題の複雑さを物語っているように思える。

参考文献

  1. AppleがMacに同梱しているバイナリ、HomeBrewでインストール可能なバイナリ

  2. https://github.com/python-poetry/install.python-poetry.org/issues/24#issuecomment-1666601505 2

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?