K i UddlmZddlZddlZddlZddlmZmZmZddl m Z erddl m Z ee eje fZded<edee eje f Zd Zdd Zdd Zdd Zej,dZy)) annotationsN) TYPE_CHECKINGTypeVarUnion)unique_everseen) TypeAliasrStrPathStrPathT)boundcptjj|}tj|dy)z1Ensure that the parent directory of `path` existsT)exist_okN)ospathdirnamemakedirs)rrs V/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/setuptools/_path.pyensure_directoryrs"ggood#GKK$'c0t|t|k(S)aDiffers 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 )normpath)p1p2s r same_pathrs B<8B< ''rcjtjdk(rtjj |S|S)a Contrary to POSIX 2008, on Cygwin, getcwd (3) contains symlink components. Using os.path.abspath() works around this limitation. A fix in os.getcwd() would probably better, in Cygwin even more so, except that this seems to be by design... cygwin)sysplatformrrabspathfilenames r _cygwin_patchr!*s'), (@277??8 $NhNrc tjjtjjtjj t |S)z2Normalize a file/dir name for comparison purposes.)rrnormcaserealpathrr!rs rrr5s: 77  BGG,,RWW-=-=mH>U-VW XXrc#hKt}tjjd|}tjjdd} tjj t |}td||g}tjj |}|r|tjd<d||ur!tjjddy|tjd<y#||ur!tjjddw|tjd<wxYww)a 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. >>> getfixture('monkeypatch').setenv('PYTHONPATH', 'anything') >>> with paths_on_pythonpath(['foo', 'bar']): ... assert 'foo' in os.environ['PYTHONPATH'] ... assert 'anything' in os.environ['PYTHONPATH'] >>> os.environ['PYTHONPATH'] 'anything' >>> getfixture('monkeypatch').delenv('PYTHONPATH') >>> with paths_on_pythonpath(['foo', 'bar']): ... assert 'foo' in os.environ['PYTHONPATH'] >>> os.environ.get('PYTHONPATH') PYTHONPATHN) objectrenvirongetpathsepjoinrfilterpop)pathsnothingorig_pythonpathcurrent_pythonpathprefixto_joinnew_paths rpaths_on_pythonpathr6:s*hGjjnn\7;O b9 7!78(:;<::??7+ '/BJJ| $ g % JJNN< .'6BJJ| $ g % JJNN< .'6BJJ| $sA D2A.C5<9D25:D//D2)rr rr returnbool)r r )r r r7str) __future__r contextlibrrtypingrrrmore_itertoolsrtyping_extensionsrr9PathLiker __annotations__r rrr!rcontextmanagerr6rrrCs" 00*+3 C 0011 :U3 C0@+@%A B( (&OY  "7"7r