Python 3.12.2导入paseto库触发TypeError问题求助
Python 3.12.2 中 import paseto 报错的解决办法
在Python 3.12.2环境中执行import paseto时触发以下错误:
Traceback (most recent call last): File "D:\Pasiphae\cyber-unity-test\main.py", line 5, in <module> from repositories.user_repo.routes.user_routes import user_router File "D:\Pasiphae\cyber-unity-test\repositories\user_repo\__init__.py", line 6, in <module> from repositories.user_repo.authentication import get_password_hash File "D:\Pasiphae\cyber-unity-test\repositories\user_repo\authentication\__init__.py", line 8, in <module> import paseto File "D:\Pasiphae\cyber-unity-test\env\Lib\site-packages\paseto\__init__.py", line 1, in <module> from paseto.paseto import ( File "D:\Pasiphae\cyber-unity-test\env\Lib\site-packages\paseto\paseto.py", line 7, in <module> import pysodium File "D:\Pasiphae\cyber-unity-test\env\Lib\site-packages\pysodium\__init__.py", line 33, in <module> sodium = ctypes.cdll.LoadLibrary(ctypes.util.find_library('sodium') or ctypes.util.find_library('libsodium')) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\ctypes\__init__.py", line 460, in LoadLibrary return self._dlltype(name) ^^^^^^^^^^^^^^^^^^^ File "C:\Python312\Lib\ctypes\__init__.py", line 369, in __init__ if '/' in name or '\' in name: ^^^^^^^^^^^ TypeError: argument of type 'NoneType' is not iterable
已排查到libsodium库目录不在系统PATH中,尝试通过以下代码添加路径到环境变量,但未生效:
import os os.environ['PATH'] += (";C:\\Users\\path\\to\\Python\\Python39\\Scripts\\")
解决办法
添加libsodium到系统PATH
下载对应系统版本的预编译libsodium二进制包(Windows平台可选择libsodium-Win64.zip),解压后找到包含libsodium.dll的目录(如bin\x64),将该目录添加到系统环境变量PATH中,重启终端或Python解释器后再尝试导入paseto。手动指定libsodium路径加载
在导入paseto前,直接指定libsodium的绝对路径加载,示例代码:import ctypes # 替换为你的libsodium.dll实际路径 sodium_dll_path = "C:\\your\\path\\to\\libsodium.dll" ctypes.cdll.LoadLibrary(sodium_dll_path) # 后续再导入paseto import paseto更换兼容的paseto库
部分旧版paseto依赖的pysodium对Python 3.12支持不完善,可尝试安装更新的替代库paseto-lib:pip install paseto-lib之后将导入语句替换为
import paseto_lib as paseto即可。通过conda管理依赖
若使用conda环境,直接执行以下命令,conda会自动处理libsodium的安装和路径配置:conda install -c conda-forge libsodium paseto
内容的提问来源于stack exchange,提问作者Panagiotis Antivasis
相关产品推荐
相关产品推荐

