致命的な Python エラー: PyThreadState_Get: 現在のスレッドがありません

Olorunfemi Akinlua 2023年6月21日
  1. PyThreadState_Get: no current thread エラーの原因
  2. sudo を使用して PyThreadState_Get: no current thread エラーを解決する
  3. otool を使用して PyThreadState_Get: no current thread エラーを解決する
致命的な Python エラー: PyThreadState_Get: 現在のスレッドがありません

私たちのローカル マシンでは、特定の時点でそのバージョンに制限されていることや新しいことしか実行できないさまざまな 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 コードを実行できます。

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Python Error