Python 中 Fatal Error: PyThreadState_Get: No Current Thread 错误
在我们的本地机器上,我们可以安装不同的 Python 版本,它们只能在任何给定时间执行该版本的限制或新功能。
如果我们在具有所有依赖项的版本上下文中编写代码并且该代码在另一个 Python 版本上下文中运行,我们可能会遇到问题。
其中一个问题是 PyThreadState_Get:没有当前线程,在本文中,我们将讨论导致它的原因以及如何在本地 Mac/Linux PC 上解决它。
是什么导致 PyThreadState_Get: no current thread 错误
多个 Python 安装有不同的模块和依赖项,但是当我们运行 Python 代码时,错误的 Python 绑定可能最终链接到我们 PC 提供的系统。 这种情况在使用 macOS 时经常发生。
因此,我们必须确保正确的 Python(带有我们的模块)运行我们的代码并将正确的模块链接到我们的系统 Python。
使用sudo解决PyThreadState_Get: no current thread Error
如果您有多个 Python 安装,不同的库可能会使用 Python,要解决 PyThreadState_Get:没有当前线程错误消息,我们可以将活动 Python 更改为 Python 安装,作为您之前在代码中调用的默认库。
要更改活动的 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 Error
通常,运行代码时出现 PyThreadState_Get: no current thread 错误消息的主要原因通常是将库(导入语句)与另一个无法识别它的 Python 安装一起使用。 我们可以使用 otool 和 install_name_tool 实用程序解决问题。
为了解决这个问题,我们需要将 Python 库(例如 Leap Motion)与备用 Python 安装一起使用,并且必须更新库的加载程序路径以引用我们想要的 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 location/reference /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
现在,我们可以运行 Python 代码而无需面对 PyThreadState_Get: no current thread 错误消息。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串