我试图安装这个名为
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
函数,所以我不知道这是否与文件类型或版本有关,但我没有在任何地方找到任何答案。
有人知道为什么会发生这种情况吗?
也许您已经命名了其中一个文件
pickle.py
?
如果是这样,您需要将其重命名为其他名称,这样 python 就不会混淆模块。
我自己找到了答案,因为这是一个新问题,所以在
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解释器更改为较低版本即可
对那些试图帮助我的人感到抱歉,因为我知道我应该提供有关我的问题的更多信息,所以今天学到了新的教训。
PickleDB v1.0 进行了重大 API 更改: https://patx.github.io/pickledb/
现在的语法是:
from pickledb import PickleDB
db = PickleDB('example.json')