HOWTO · Python
致命的な Python エラー: PyThreadState_Get: 現在のスレッドがありません
このチュートリアルでは、致命的な Python エラー: PyThreadState_Get no current thread エラー メッセージの原因と対処方法について説明します。
このページの内容
私たちのローカル マシンでは、特定の時点でそのバージョンに制限されていることや新しいことしか実行できないさまざまな Python バージョンをインストールすることができます。
すべての依存関係を含むバージョン コンテキスト内でコードを記述し、そのコードを別の Python バージョン コンテキストで実行すると、問題が発生する可能性があります。
これらの問題の 1つは、PyThreadState_Get: 現在のスレッドがありませんです。この記事では、その原因と、ローカルの Mac/Linux PC で解決する方法について説明します。
PyThreadState_Get: no current thread エラーの原因
複数の Python インストールには異なるモジュールと依存関係がアタッチされていますが、Python コードを実行すると、間違った Python バインディングが PC が提供するシステムにリンクしてしまう可能性があります。 このシナリオは、macOS を使用しているときによく発生します。
したがって、適切な Python (モジュールを含む) がコードを実行し、適切なモジュールをシステムの Python にリンクしていることを確認する必要があります。
sudo を使用して PyThreadState_Get: no current thread エラーを解決する
複数の Python インストールがある場合、異なるライブラリが Python を使用している可能性があり、PyThreadState_Get: no current thread エラー メッセージを解決するために、active Python を、以前に呼び出していたデフォルト ライブラリとしての Python インストールに変更できます。 あなたのコード。
active Python インストールを変更するには、以下の sudo コマンドを使用できます。
sudo port select --list python
コマンドの出力:
Available versions for python:
none
python26-apple
python27
python27-apple (active)
python34
上記の出力から、アクティブな Python インストールは python27-apple であり、依存関係とモジュールを保持する Python インストールを切り替えるには、python34 が必要です。
python34 に変更するには、以下の sudo コマンドを使用できます。
sudo port select python python34
上記のコマンドを実行した後、--list コマンドを使用して機能したかどうかを確認できます。
sudo port select --list python
コマンド出力は、python34 がアクティブであることを示しているはずです。
Available versions for python:
none
python26-apple
python27
python27-apple
python34 (active)
otool を使用して PyThreadState_Get: no current thread エラーを解決する
多くの場合、コードを実行するときに PyThreadState_Get: no current thread エラー メッセージが表示される主な原因は、多くの場合、それを認識しない別の Python インストールでライブラリ (import ステートメント) を使用することです。 otool および install_name_tool ユーティリティを使用して問題を解決できます。
これを解決するには、別の Python インストールで Python ライブラリ (Leap Motion など) を使用する必要があり、必要な Python インストールを参照するようにライブラリのローダー パスを更新する必要があります。
まず、otool コマンドを使用して、現在のローダー パスを確認します。
otool -L LeapPython.so
コマンドの出力:
LeapPython.so:
@loader_path/LeapPython.so (compatibility version 0.0.0, current version 0.0.0)
/Library/Frameworks/Python.framework/Versions/3.4/Python (compatibility version 3.4.0, current version 3.4.0)
@loader_path/libLeap.dylib (compatibility version 0.7.0, current version 2.0.1)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
そのため、現在の Python の場所/参照 /Library/Frameworks/Python.framework/Versions/3.4/Python を目的の Python インストールに変更して更新する必要があります。 そのためには、install_name_tool コマンドを使用する必要があります。
コマンドを実行すると、使用するライブラリへの新しい Python インストール場所が参照されます。
install_name_tool -change /Library/Frameworks/Python.framework/Versions/3.4/Python \
/usr/local/Cellar/python/3.8.8/Frameworks/Python.framework/Versions/3.8/lib/libpython3.8.dylib \
LeapPython.so
これで、PyThreadState_Get: no current thread エラー メッセージに直面することなく、Python コードを実行できます。