Python NotImplementedError: cannot instantiate ‘PosixPath‘ on your system

在Linux环境下训练好了模型,再使用Windows系统加载模型使用报错,原来是使用了PosixPath这个高级库。

由于 Windows 操作系统 和 Linux 操作系统 文件系统设计存差异。路径字符串的表示方法有所不同,例如Linux 使用 “ / ” 分隔符而 Windows 使用 “ \ ”,根目录表示方式也不同。因此针对两套系统创建了WindowsPath类 和 PosixPath类。

在 Windows 操作系统下,默认创建的 Path 对象是 WindowsPath 对象,其余Linux,unix 等满足 POSIX规范的操作系统都将被创建为 PosixPath 对象。

修改所使用环境下的lib/pathlib.py代码

  • 修改前
def __new__(cls, *args, **kwargs):
        if cls is Path:
            cls = WindowsPath if os.name == 'nt' else PosixPath
        self = cls._from_parts(args, init=False)
        if not self._flavour.is_supported:
            raise NotImplementedError("cannot instantiate %r on your system"
                                      % (cls.__name__,))
        self._init()
        return self

  • 修改后
def __new__(cls, *args, **kwargs):
        if cls is Path:
            # cls = WindowsPath if os.name == 'nt' else PosixPath
            cls = WindowsPath
        self = cls._from_parts(args, init=False)
        # Windows doesn't support PosixPath
        if type(self) == PosixPath:
            cls = WindowsPath
            self = cls._from_parts(args, init=False)
        if not self._flavour.is_supported:
            raise NotImplementedError("cannot instantiate %r on your system"
                                      % (cls.__name__,))
        self._init()
        return self

posted @ 2022-11-06 20:22  赫凯  阅读(589)  评论(0)    收藏  举报