1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
U
G=®d    &ã@sèddlmZddlmZddlmmZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddlZddlmZddlmZmZmZzddlmZWn"ek
r´Gdd„dƒZYnXd    d
„ZGd d „d ejeƒZdd d„Zdd„ZdS)é)Úglob)Ú convert_pathN)Úsix)ÚmapÚfilterÚ filterfalse)Ú    Mixin2to3c@seZdZddd„ZdS)rTcCsdS)z
do nothingN©)ÚselfÚfilesZdoctestsr    r    úRD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\setuptools/command/build_py.pyÚrun_2to3szMixin2to3.run_2to3N)T)Ú__name__Ú
__module__Ú __qualname__r r    r    r    r rsrcCst |t |¡jtjB¡dS©N)ÚosÚchmodÚstatÚst_modeÚS_IWRITE)Útargetr    r    r Ú make_writablesrc@sŒeZdZdZdd„Zdd„Zdd„Zdd    „Zd
d „Zd d „Z    dd„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zedd„ƒZd S)!Úbuild_pyaXEnhanced 'build_py' command that includes data files with packages
 
    The data files are specified via a 'package_data' argument to 'setup()'.
    See 'setuptools.dist.Distribution' for more details.
 
    Also, this version of the 'build_py' command allows you to specify both
    'py_modules' and 'packages' in the same setup operation.
    cCsFtj |¡|jj|_|jjp i|_d|jkr6|jd=g|_g|_dS)NÚ
data_files)    ÚorigrÚfinalize_optionsÚ distributionÚ package_dataÚexclude_package_dataÚ__dict__Ú_build_py__updated_filesÚ_build_py__doctests_2to3©r
r    r    r r&s 
ÿ
zbuild_py.finalize_optionscCsx|js|jsdS|jr| ¡|jr4| ¡| ¡| |jd¡| |jd¡| |jd¡| t    j
j |dd¡dS)z?Build modules, packages, and copy data files to build directoryNFTr)Zinclude_bytecode) Ú
py_modulesÚpackagesZ build_modulesZbuild_packagesÚbuild_package_datar r!r"Ú byte_compilerrÚ get_outputsr#r    r    r Úrun0s z build_py.runcCs&|dkr| ¡|_|jStj ||¡S)zlazily compute data filesr)Ú_get_data_filesrrrÚ __getattr__)r
Úattrr    r    r r+Ds
zbuild_py.__getattr__cCsJtjrt|tjƒr| d¡}tj ||||¡\}}|rB|j     |¡||fS)NÚ.)
rÚPY2Ú
isinstanceÚ string_typesÚsplitrrÚ build_moduler!Úappend)r
ÚmoduleZ module_fileÚpackageÚoutfileÚcopiedr    r    r r2Ks
 ÿ zbuild_py.build_modulecCs| ¡tt|j|jpdƒƒS)z?Generate list of '(package,src_dir,build_dir,filenames)' tuplesr    )Úanalyze_manifestÚlistrÚ_get_pkg_data_filesr%r#r    r    r r*Uszbuild_py._get_data_filescsJ| |¡‰tjj|jg| d¡Ž}‡fdd„| |ˆ¡Dƒ}|ˆ||fS)Nr-csg|]}tj |ˆ¡‘qSr    )rÚpathÚrelpath)Ú.0Úfile©Úsrc_dirr    r Ú
<listcomp>bsÿz0build_py._get_pkg_data_files.<locals>.<listcomp>)Úget_package_dirrr;ÚjoinÚ    build_libr1Úfind_data_files)r
r5Ú    build_dirÚ    filenamesr    r?r r:Zs 
 
 
þzbuild_py._get_pkg_data_filescCsX| |j||¡}tt|ƒ}tj |¡}ttj    j
|ƒ}t |j   |g¡|¡}|  |||¡S)z6Return filenames for package's data files in 'src_dir')Ú_get_platform_patternsrrrÚ    itertoolsÚchainÚ from_iterablerrr;ÚisfileÚmanifest_filesÚgetÚexclude_data_files)r
r5r@ÚpatternsZglobs_expandedZ globs_matchesZ
glob_filesr r    r    r rEhsý
  þzbuild_py.find_data_filesc
Cs|jD]„\}}}}|D]r}tj ||¡}| tj |¡¡tj ||¡}| ||¡\}}    t|ƒtj |¡}|    r||j    j
kr|j   |¡qqdS)z$Copy data files into build directoryN) rrr;rCÚmkpathÚdirnameÚ    copy_filerÚabspathrZconvert_2to3_doctestsr"r3)
r
r5r@rFrGÚfilenamerÚsrcfileÚoutfr7r    r    r r&ys 
ÿzbuild_py.build_package_datac Csèi|_}|jjsdSi}|jp"dD]}||t| |¡ƒ<q$| d¡| d¡}|jj    D]Š}t
j   t|ƒ¡\}}d}|}    |r°||kr°||kr°|}t
j   |¡\}}
t
j   |
|¡}qx||krX| d¡rÌ||    krÌqX| ||g¡ |¡qXdS)Nr    Úegg_infoz.py)rMrZinclude_package_datar%Úassert_relativerBÚ run_commandÚget_finalized_commandÚfilelistr rr;r1rCÚendswithÚ
setdefaultr3) r
ZmfZsrc_dirsr5Zei_cmdr;ÚdÚfÚprevZoldfZdfr    r    r r8‡s(
 
 
 zbuild_py.analyze_manifestcCsdSrr    r#r    r    r Úget_data_filesŸszbuild_py.get_data_filesc    Cs¶z |j|WStk
r YnXtj |||¡}||j|<|rH|jjsL|S|jjD]}||ksn| |d¡rTqxqT|St     |d¡}| 
¡}W5QRXd|kr²t j   d|f¡‚|S)z8Check namespace packages' __init__ for declare_namespacer-Úrbsdeclare_namespacezÁNamespace package problem: %s is a namespace package, but its
__init__.py does not call declare_namespace()! Please fix it.
(See the setuptools manual under "Namespace Packages" for details.)
")Úpackages_checkedÚKeyErrorrrÚ check_packagerZnamespace_packagesÚ
startswithÚioÚopenÚreadÚ    distutilsÚerrorsÚDistutilsError)r
r5Ú package_dirZinit_pyÚpkgr`Úcontentsr    r    r rf¢s* 
  ýÿzbuild_py.check_packagecCsi|_tj |¡dSr)rdrrÚinitialize_optionsr#r    r    r rqÀszbuild_py.initialize_optionscCs0tj ||¡}|jjdk    r,tj |jj|¡S|Sr)rrrBrZsrc_rootrr;rC)r
r5Úresr    r    r rBÄs zbuild_py.get_package_dircs\tˆƒ‰| |j||¡}‡fdd„|Dƒ}tj |¡}t|ƒ‰‡fdd„ˆDƒ}tt|ƒƒS)z6Filter filenames for package's data files in 'src_dir'c3s|]}t ˆ|¡VqdSr)Úfnmatchr©r=Úpattern)r r    r Ú    <genexpr>Òsÿz.build_py.exclude_data_files.<locals>.<genexpr>c3s|]}|ˆkr|VqdSrr    )r=Úfn)Úbadr    r rvÙsþ)r9rHrrIrJrKÚsetÚ_unique_everseen)r
r5r@r rPZ match_groupsÚmatchesZkeepersr    )rxr r rOÊsý
þ 
þzbuild_py.exclude_data_filescs.t | dg¡| |g¡¡}‡fdd„|DƒS)zÜ
        yield platform-specific path patterns (suitable for glob
        or fn_match) from a glob-based spec (such as
        self.package_data or self.exclude_package_data)
        matching package in src_dir.
        Úc3s |]}tj ˆt|ƒ¡VqdSr)rr;rCrrtr?r    r rvísÿz2build_py._get_platform_patterns.<locals>.<genexpr>)rIrJrN)Úspecr5r@Z raw_patternsr    r?r rHás
 
þ
ýzbuild_py._get_platform_patternsN)rrrÚ__doc__rr)r+r2r*r:rEr&r8rbrfrqrBrOÚ staticmethodrHr    r    r    r rs"    
 
rccsbtƒ}|j}|dkr6t|j|ƒD]}||ƒ|Vq n(|D]"}||ƒ}||kr:||ƒ|Vq:dS)zHList unique elements, preserving order. Remember all elements ever seen.N)ryÚaddrÚ __contains__)ÚiterableÚkeyÚseenZseen_addÚelementÚkr    r    r rzõs
rzcCs:tj |¡s|Sddlm}t d¡ ¡|}||ƒ‚dS)Nr)ÚDistutilsSetupErrorzÓ
        Error: setup script specifies an absolute path:
 
            %s
 
        setup() arguments must *always* be /-separated paths relative to the
        setup.py directory, *never* absolute paths.
        )rr;ÚisabsÚdistutils.errorsr‡ÚtextwrapÚdedentÚlstrip)r;r‡Úmsgr    r    r rYs   ùrY)N)rÚdistutils.utilrZdistutils.command.build_pyÚcommandrrrrsrŠrhr‰rkrIrZsetuptools.externrZsetuptools.extern.six.movesrrrZsetuptools.lib2to3_exrÚ ImportErrorrrzrYr    r    r    r Ú<module>s(   Z