import contextlib import os import sys from typing import TYPE_CHECKING, Union
if TYPE_CHECKING: from typing_extensions import TypeAlias
from more_itertools import unique_everseen
if sys.version_info >= (3, 9):
StrPath: TypeAlias = Union[str, os.PathLike[str]] # Same as _typeshed.StrPath else:
StrPath: TypeAlias = Union[str, os.PathLike]
def ensure_directory(path): """Ensure that the parent directory of `path` exists"""
dirname = os.path.dirname(path)
os.makedirs(dirname, exist_ok=True)
def same_path(p1: StrPath, p2: StrPath) -> bool: """Differs from os.path.samefile because it does not require paths to exist.
Purely string based (no comparison between i-nodes).
>>> same_path("a/b", "./a/b") True
>>> same_path("a/b", "a/./b") True
>>> same_path("a/b", "././a/b") True
>>> same_path("a/b", "./a/b/c/..") True
>>> same_path("a/b", "../a/b/c") False
>>> same_path("a", "a/b") False """ return normpath(p1) == normpath(p2)
def normpath(filename: StrPath) -> str: """Normalize a file/dir name for comparison purposes.""" # See pkg_resources.normalize_path for notes about cygwin
file = os.path.abspath(filename) if sys.platform == 'cygwin'else filename return os.path.normcase(os.path.realpath(os.path.normpath(file)))
@contextlib.contextmanager def paths_on_pythonpath(paths): """
Add the indicated paths to the head of the PYTHONPATH environment
variable so that subprocesses will also see the packages at
these paths.
Do this in a context that restores the value on exit.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.