升级到Django 4.2,导入存储模块失败

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

我最近升级了 Django 4.2,并对我的项目应用存储更改。 存储模块遇到导入错误。

我的导入代码

from django.core.files.storage import storages

我遇到的错误是

error: Module 'django.core.files.storage' has no attribute 'storages'

我仔细检查了软件包版本。 我尝试重新安装要求。 pycharm 和 mypy 都向我抛出了错误。 我尝试在 shell 中导入该模块,效果很好。

有谁知道为什么会这样?

python django pycharm backend python-import
1个回答
0
投票

看起来这是因为(闭源)PyRight 扩展附带了 Django 过时的类型存根:

$ cat ~/.vscode/extensions/ms-python.vscode-pylance-2024.6.1/dist/bundled/stubs/django-stubs/core/files/storage.pyi
from datetime import datetime
from typing import IO, Any

from django.core.files.base import File
from django.utils.functional import LazyObject

class Storage:
    def open(self, name: str, mode: str = ...) -> File: ...
    def save(
        self, name: str | None, content: IO[Any], max_length: int | None = ...
    ) -> str: ...
    def get_valid_name(self, name: str) -> str: ...
    def get_available_name(self, name: str, max_length: int | None = ...) -> str: ...
    def generate_filename(self, filename: str) -> str: ...
    def path(self, name: str) -> str: ...
    def delete(self, name: str) -> None: ...
    def exists(self, name: str) -> bool: ...
    def listdir(self, path: str) -> tuple[list[str], list[str]]: ...
    def size(self, name: str) -> int: ...
    def url(self, name: str) -> str: ...
    def get_accessed_time(self, name: str) -> datetime: ...
    def get_created_time(self, name: str) -> datetime: ...
    def get_modified_time(self, name: str) -> datetime: ...

class FileSystemStorage(Storage):
    OS_OPEN_FLAGS: int = ...
    def __init__(
        self,
        location: str | None = ...,
        base_url: str | None = ...,
        file_permissions_mode: int | None = ...,
        directory_permissions_mode: int | None = ...,
    ) -> None: ...
    @property
    def base_location(self) -> str: ...
    @property
    def location(self) -> str: ...
    @property
    def base_url(self) -> str: ...
    @property
    def file_permissions_mode(self) -> int | None: ...
    @property
    def directory_permissions_mode(self) -> int | None: ...

class DefaultStorage(LazyObject): ...

default_storage: Storage

def get_storage_class(import_path: str | None = ...) -> type[Storage]: ...

如果我在该文件中添加

"storages"
常量,错误就会消失。

© www.soinside.com 2019 - 2024. All rights reserved.