属性错误:模块“pickle”没有属性“load”

问题描述 投票:0回答:3

我试图安装这个名为

pyautogui
的模块,但是当我在终端
pip install pyautogui
(还有
py -m pip install pyautogui
)中输入时,我发现了这个:

File "c:\users\USER\appdata\local\programs\python\python39\lib\lib2to3\pgen2\grammar.py", line 95, in load
    d = pickle.load(f)
AttributeError: module 'pickle' has no attribute 'load'

显然在文件

load
的第43行中实际上没有定义
picle.pyi
函数,所以我不知道这是否与文件类型或版本有关,但我没有在任何地方找到任何答案。

有人知道为什么会发生这种情况吗?

python python-3.x pickle
3个回答
1
投票

也许您已经命名了其中一个文件

pickle.py

如果是这样,您需要将其重命名为其他名称,这样 python 就不会混淆模块。


0
投票

我自己找到了答案,因为这是一个新问题,所以在

pickle.pyi
文件中有这个脚本:

if sys.version_info >= (3, 0):
 DEFAULT_PROTOCOL: int

if sys.version_info >= (3, 8):
    # TODO: holistic design for buffer interface (typing.Buffer?)

    class PickleBuffer:
        # buffer must be a buffer-providing object
        def __init__(self, buffer: Any) -> None: ...
        def raw(self) -> memoryview: ...
        def release(self) -> None: ...

    _BufferCallback = Optional[Callable[[PickleBuffer], Any]]

    def dump(
        obj: Any, file: IO[bytes], protocol: Optional[int] = ..., *,
        fix_imports: bool = ...,
        buffer_callback: _BufferCallback = ...
    ) -> None: ...
    def dumps(
        obj: Any, protocol: Optional[int] = ..., *,
        fix_imports: bool = ...,
        buffer_callback: _BufferCallback = ...
    ) -> bytes: ...
    def load(
        file: IO[bytes], *, fix_imports: bool = ..., encoding: str = ...,
        errors: str = ..., buffers: Optional[Iterable[Any]] = ...
    ) -> Any: ...
    def loads(
        data: bytes, *, fix_imports: bool = ..., encoding: str = ...,
        errors: str = ..., buffers: Optional[Iterable[Any]] = ...
    ) -> Any: ...
elif sys.version_info >= (3, 0):
    def dump(obj: Any, file: IO[bytes], protocol: Optional[int] = ..., *,
             fix_imports: bool = ...) -> None: ...
    def dumps(obj: Any, protocol: Optional[int] = ..., *,
              fix_imports: bool = ...) -> bytes: ...
    def load(file: IO[bytes], *, fix_imports: bool = ..., encoding: str = ...,
             errors: str = ...) -> Any: ...
    def loads(data: bytes, *, fix_imports: bool = ...,
              encoding: str = ..., errors: str = ...) -> Any: ...
else:
    def dump(obj: Any, file: IO[bytes], protocol: Optional[int] = ...) -> None: ...
    def dumps(obj: Any, protocol: Optional[int] = ...) -> bytes: ...
    def load(file: IO[bytes]) -> Any: ...
    def loads(string: bytes) -> Any: ...

基本上这意味着这取决于你使用的版本,功能会有所不同,问题是我使用的是

python3.9
并且因为是最新版本的python所以没有更新。

所以解决方案是:

a.找到一种使脚本与最新版本一起使用的方法(顺便说一句,我没有找到)

b.只需将python解释器更改为较低版本即可

对那些试图帮助我的人感到抱歉,因为我知道我应该提供有关我的问题的更多信息,所以今天学到了新的教训。


0
投票

PickleDB v1.0 进行了重大 API 更改: https://patx.github.io/pickledb/

现在的语法是:

from pickledb import PickleDB
db = PickleDB('example.json')

他们忘记更新 pypi 指令

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.