lldb
内でPythonインタープリターを実行しようとすると、次のように表示されます。
$ lldb
(lldb) script
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 52, in <module>
import weakref
File "/usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/lib/python2.7/weakref.py", line 14, in <module>
from _weakref import (
ImportError: cannot import name _remove_dead_weakref
Python Interactive Interpreter. To exit, type 'quit()', 'exit()' or Ctrl-D.
Pythonのどのバージョンが起動されたかを調べると、Python Homebrewであることを報告しますPython(これはシンボリックリンクされていますこの場所に):
>>> sys.executable
'/usr/local/opt/python/bin/python2.7'
ただし、Pythonバージョンを要求すると、デフォルトに関連付けられているバージョンが返されますシステム Pythonインストール、.
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)
そして、確認するために、上記のバイナリパスのPythonバージョンは実際に異なります(マイクロバージョンの違いに注意してください):
$ /usr/local/opt/python/bin/python2.7 --version
Python 2.7.14
$ /usr/bin/python --version
Python 2.7.10
わかりにくくするために、名前_remove_dead_weakref
doesは_weakref
私のHomebrewのモジュールPythonインストール、ただしnotデフォルトのシステムインストール:
$ /usr/bin/python -c "import _weakref; print _weakref._remove_dead_weakref"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '_remove_dead_weakref'
$ /usr/local/opt/python/bin/python2.7 -c "import _weakref; print _weakref._remove_dead_weakref"
<built-in function _remove_dead_weakref>
私のPythonインストールと、これを防ぐにはどうすればよいですか?
この問題の回避策の1つは、システム上でのみLLDBを明示的に起動することですPython.
PATH=/usr/bin /usr/bin/lldb
LLDBがPATH
に対して 'active'をクエリするかのように見えますPythonインストール; Python PATH
を使用すると、LLDBがPythonを起動しようとしたときに、この種のクロストークに遭遇する可能性があります。
DYLD_PRINT_LIBRARIES=1
を設定してlldbを実行すると、/ System/LibraryからPython.frameworkを読み込んでいることがわかりますが、Homebrewの他のPythonライブラリ:
dyld: loaded: /System/Library/Frameworks/Python.framework/Versions/2.7/Python
...
dyld: loaded: /usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_locale.so
しかし、DYLDにHomebrewからPython.frameworkをロードするように指示すると、動作します:
DYLD_FRAMEWORK_PATH="$(brew --prefix python@2)/Frameworks/" "$(xcrun -f lldb)"
MacOS 10.13.6でbrew'd Python 2.7.15でテスト済み。
更新:システム整合性保護が有効な場合、DYLD_FRAMEWORK_PATH
から実行されるXcodeコマンドラインツールのトランポリン実行可能ファイルで/usr/bin
を使用することは禁止される場合があります。これを回避するには、xcrun -f lldb
を実行して、代わりに実際のLLDB実行可能ファイルを使用します。
アンインストールする代わりに、brew unlink python@2
を実行するだけです。これにより、HomebrewのPython 2.xがPATHから削除されます。Homebrewの数式の多くはHomebrewのPython 2.xに依存しているため、brew- installed Python 2.x同時にlldbでエラーを修正します。
Homebrew BundleでHomebrewセットアップを管理する場合、次の行をBrewfile
に追加できます。
brew "python@2", link: false
Homebrewからpython@2
をアンインストールすることでこの問題を解決しました: https://github.com/flutter/flutter/issues/17803#issuecomment-390980648
UPD:
@Olsonistがコメントで指摘したように、このコマンドを実行するとこの問題を修正する必要があります:brew uninstall --force python@2