Ошибка атрибута: модуль ‘pickle’ не имеет атрибута ‘load’

#python #python-3.x #pickle

#python #python-3.x #pickle

Вопрос:

Я пытался установить этот модуль с именем pyautogui , но когда я набрал в терминале pip install pyautogui (а также py -m pip install pyautogui ), ну, я нашел это:

 File "c:usersUSERappdatalocalprogramspythonpython39liblib2to3pgen2grammar.py", line 95, in load
    d = pickle.load(f)
AttributeError: module 'pickle' has no attribute 'load'
  

По-видимому, нет load функции, определенной, когда она есть на самом деле, в строке 43 файла picle.pyi , поэтому я не знаю, связано ли это с чем-то с типом файла или версией, но я нигде не нашел ответа.

Кто-нибудь знает, почему это может происходить?

Комментарии:

1. Вы должны отредактировать свой вопрос с дополнительной информацией, такой как версии и т.д. Это python3? Должны ли вы использовать pip3?

2. попробуйте удалить пакет и переустановить его, возможно, это ошибка, которая иногда возникает, если нет, у вас мог быть другой файл с таким именем pickle.py

Ответ №1:

Возможно, вы назвали один из своих файлов pickle.py ?

Если это так, вам нужно переименовать это во что-то другое, чтобы python не перепутал модули.

Ответ №2:

Я сам нашел ответ, потому что это была своего рода новая проблема, поэтому в 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. Найдите способ, которым скрипты работают с новейшей версией (которую я, кстати, не нашел)

б. Просто измените интерпретатор python на более низкую версию

И спасибо тем, кто пытался мне помочь, потому что я знаю, что должен был предоставить больше информации о моей проблеме, поэтому сегодня усвоил новый урок.