summaryrefslogtreecommitdiff
path: root/assets/info/setuptools.info
blob: 48a55082c107b2db31e1c4d6786888e2169e335e (plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346
9347
9348
9349
9350
9351
9352
9353
9354
9355
9356
9357
9358
9359
9360
9361
9362
9363
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
9388
9389
9390
9391
9392
9393
9394
9395
9396
9397
9398
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
9452
9453
9454
9455
9456
9457
9458
9459
9460
9461
9462
9463
9464
9465
9466
9467
9468
9469
9470
9471
9472
9473
9474
9475
9476
9477
9478
9479
9480
9481
9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
9554
9555
9556
9557
9558
9559
9560
9561
9562
9563
9564
9565
9566
9567
9568
9569
9570
9571
9572
9573
9574
9575
9576
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
9616
9617
9618
9619
9620
9621
9622
9623
9624
9625
9626
9627
9628
9629
9630
9631
9632
9633
9634
9635
9636
9637
9638
9639
9640
9641
9642
9643
9644
9645
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
9662
9663
9664
9665
9666
9667
9668
9669
9670
9671
9672
9673
9674
9675
9676
9677
9678
9679
9680
9681
9682
9683
9684
9685
9686
9687
9688
9689
9690
9691
9692
9693
9694
9695
9696
9697
9698
9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9720
9721
9722
9723
9724
9725
9726
9727
9728
9729
9730
9731
9732
9733
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9941
9942
9943
9944
9945
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9965
9966
9967
9968
9969
9970
9971
9972
9973
9974
9975
9976
9977
9978
9979
9980
9981
9982
9983
9984
9985
9986
9987
9988
9989
9990
9991
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
10024
10025
10026
10027
10028
10029
10030
10031
10032
10033
10034
10035
10036
10037
10038
10039
10040
10041
10042
10043
10044
10045
10046
10047
10048
10049
10050
10051
10052
10053
10054
10055
10056
10057
10058
10059
10060
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117
10118
10119
10120
10121
10122
10123
10124
10125
10126
10127
10128
10129
10130
10131
10132
10133
10134
10135
10136
10137
10138
10139
10140
10141
10142
10143
10144
10145
10146
10147
10148
10149
10150
10151
10152
10153
10154
10155
10156
10157
10158
10159
10160
10161
10162
10163
10164
10165
10166
10167
10168
10169
10170
10171
10172
10173
10174
10175
10176
10177
10178
10179
10180
10181
10182
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10204
10205
10206
10207
10208
10209
10210
10211
10212
10213
10214
10215
10216
10217
10218
10219
10220
10221
10222
10223
10224
10225
10226
10227
10228
10229
10230
10231
10232
10233
10234
10235
10236
10237
10238
10239
10240
10241
10242
10243
10244
10245
10246
10247
10248
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10260
10261
10262
10263
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
10307
10308
10309
10310
10311
10312
10313
10314
10315
10316
10317
10318
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
10329
10330
10331
10332
10333
10334
10335
10336
10337
10338
10339
10340
10341
10342
10343
10344
10345
10346
10347
10348
10349
10350
10351
10352
10353
10354
10355
10356
10357
10358
10359
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376
10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10449
10450
10451
10452
10453
10454
10455
10456
10457
10458
10459
10460
10461
10462
10463
10464
10465
10466
10467
10468
10469
10470
10471
10472
10473
10474
10475
10476
10477
10478
10479
10480
10481
10482
10483
10484
10485
10486
10487
10488
10489
10490
10491
10492
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504
10505
10506
10507
10508
10509
10510
10511
10512
10513
10514
10515
10516
10517
10518
10519
10520
10521
10522
10523
10524
10525
10526
10527
10528
10529
10530
10531
10532
10533
10534
10535
10536
10537
10538
10539
10540
10541
10542
10543
10544
10545
10546
10547
10548
10549
10550
10551
10552
10553
10554
10555
10556
10557
10558
10559
10560
10561
10562
10563
10564
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
10576
10577
10578
10579
10580
10581
10582
10583
10584
10585
10586
10587
10588
10589
10590
10591
10592
10593
10594
10595
10596
10597
10598
10599
10600
10601
10602
10603
10604
10605
10606
10607
10608
10609
10610
10611
10612
10613
10614
10615
10616
10617
10618
10619
10620
10621
10622
10623
10624
10625
10626
10627
10628
10629
10630
10631
10632
10633
10634
10635
10636
10637
10638
10639
10640
10641
10642
10643
10644
10645
10646
10647
10648
10649
10650
10651
10652
10653
10654
10655
10656
10657
10658
10659
10660
10661
10662
10663
10664
10665
10666
10667
10668
10669
10670
10671
10672
10673
10674
10675
10676
10677
10678
10679
10680
10681
10682
10683
10684
10685
10686
10687
10688
10689
10690
10691
10692
10693
10694
10695
10696
10697
10698
10699
10700
10701
10702
10703
10704
10705
10706
10707
10708
10709
10710
10711
10712
10713
10714
10715
10716
10717
10718
10719
10720
10721
10722
10723
10724
10725
10726
10727
10728
10729
10730
10731
10732
10733
10734
10735
10736
10737
10738
10739
10740
10741
10742
10743
10744
10745
10746
10747
10748
10749
10750
10751
10752
10753
10754
10755
10756
10757
10758
10759
10760
10761
10762
10763
10764
10765
10766
10767
10768
10769
10770
10771
10772
10773
10774
10775
10776
10777
10778
10779
10780
10781
10782
10783
10784
10785
10786
10787
10788
10789
10790
10791
10792
10793
10794
10795
10796
10797
10798
10799
10800
10801
10802
10803
10804
10805
10806
10807
10808
10809
10810
10811
10812
10813
10814
10815
10816
10817
10818
10819
10820
10821
10822
10823
10824
10825
10826
10827
10828
10829
10830
10831
10832
10833
10834
10835
10836
10837
10838
10839
10840
10841
10842
10843
10844
10845
10846
10847
10848
10849
10850
10851
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
10862
10863
10864
10865
10866
10867
10868
10869
10870
10871
10872
10873
10874
10875
10876
10877
10878
10879
10880
10881
10882
10883
10884
10885
10886
10887
10888
10889
10890
10891
10892
10893
10894
10895
10896
10897
10898
10899
10900
10901
10902
10903
10904
10905
10906
10907
10908
10909
10910
10911
10912
10913
10914
10915
10916
10917
10918
10919
10920
10921
10922
10923
10924
10925
10926
10927
10928
10929
10930
10931
10932
10933
10934
10935
10936
10937
10938
10939
10940
10941
10942
10943
10944
10945
10946
10947
10948
10949
10950
10951
10952
10953
10954
10955
10956
10957
10958
10959
10960
10961
10962
10963
10964
10965
10966
10967
10968
10969
10970
10971
10972
10973
10974
10975
10976
10977
10978
10979
10980
10981
10982
10983
10984
10985
10986
10987
10988
10989
10990
10991
10992
10993
10994
10995
10996
10997
10998
10999
11000
11001
11002
11003
11004
11005
11006
11007
11008
11009
11010
11011
11012
11013
11014
11015
11016
11017
11018
11019
11020
11021
11022
11023
11024
11025
11026
11027
11028
11029
11030
11031
11032
11033
11034
11035
11036
11037
11038
11039
11040
11041
11042
11043
11044
11045
11046
11047
11048
11049
11050
11051
11052
11053
11054
11055
11056
11057
11058
11059
11060
11061
11062
11063
11064
11065
11066
11067
11068
11069
11070
11071
11072
11073
11074
11075
11076
11077
11078
11079
11080
11081
11082
11083
11084
11085
11086
11087
11088
11089
11090
11091
11092
11093
11094
11095
11096
11097
11098
11099
11100
11101
11102
11103
11104
11105
11106
11107
11108
11109
11110
11111
11112
11113
11114
11115
11116
11117
11118
11119
11120
11121
11122
11123
11124
11125
11126
11127
11128
11129
11130
11131
11132
11133
11134
11135
11136
11137
11138
11139
11140
11141
11142
11143
11144
11145
11146
11147
11148
11149
11150
11151
11152
11153
11154
11155
11156
11157
11158
11159
11160
11161
11162
11163
11164
11165
11166
11167
11168
11169
11170
11171
11172
11173
11174
11175
11176
11177
11178
11179
11180
11181
11182
11183
11184
11185
11186
11187
11188
11189
11190
11191
11192
11193
11194
11195
11196
11197
11198
11199
11200
11201
11202
11203
11204
11205
11206
11207
11208
11209
11210
11211
11212
11213
11214
11215
11216
11217
11218
11219
11220
11221
11222
11223
11224
11225
11226
11227
11228
11229
11230
11231
11232
11233
11234
11235
11236
11237
11238
11239
11240
11241
11242
11243
11244
11245
11246
11247
11248
11249
11250
11251
11252
11253
11254
11255
11256
11257
11258
11259
11260
11261
11262
11263
11264
11265
11266
11267
11268
11269
11270
11271
11272
11273
11274
11275
11276
11277
11278
11279
11280
11281
11282
11283
11284
11285
11286
11287
11288
11289
11290
11291
11292
11293
11294
11295
11296
11297
11298
11299
11300
11301
11302
11303
11304
11305
11306
11307
11308
11309
11310
11311
11312
11313
11314
11315
11316
11317
11318
11319
11320
11321
11322
11323
11324
11325
11326
11327
11328
11329
11330
11331
11332
11333
11334
11335
11336
11337
11338
11339
11340
11341
11342
11343
11344
11345
11346
11347
11348
11349
11350
11351
11352
11353
11354
11355
11356
11357
11358
11359
11360
11361
11362
11363
11364
11365
11366
11367
11368
11369
11370
11371
11372
11373
11374
11375
11376
11377
11378
11379
11380
11381
11382
11383
11384
11385
11386
11387
11388
11389
11390
11391
11392
11393
11394
11395
11396
11397
11398
11399
11400
11401
11402
11403
11404
11405
11406
11407
11408
11409
11410
11411
11412
11413
11414
11415
11416
11417
11418
11419
11420
11421
11422
11423
11424
11425
11426
11427
11428
11429
11430
11431
11432
11433
11434
11435
11436
11437
11438
11439
11440
11441
11442
11443
11444
11445
11446
11447
11448
11449
11450
11451
11452
11453
11454
11455
11456
11457
11458
11459
11460
11461
11462
11463
11464
11465
11466
11467
11468
11469
11470
11471
11472
11473
11474
11475
11476
11477
11478
11479
11480
11481
11482
11483
11484
11485
11486
11487
11488
11489
11490
11491
11492
11493
11494
11495
11496
11497
11498
11499
11500
11501
11502
11503
11504
11505
11506
11507
11508
11509
11510
11511
11512
11513
11514
11515
11516
11517
11518
11519
11520
11521
11522
11523
11524
11525
11526
11527
11528
11529
11530
11531
11532
11533
11534
11535
11536
11537
11538
11539
11540
11541
11542
11543
11544
11545
11546
11547
11548
11549
11550
11551
11552
11553
11554
11555
11556
11557
11558
11559
11560
11561
11562
11563
11564
11565
11566
11567
11568
11569
11570
11571
11572
11573
11574
11575
11576
11577
11578
11579
11580
11581
11582
11583
11584
11585
11586
11587
11588
11589
11590
11591
11592
11593
11594
11595
11596
11597
11598
11599
11600
11601
11602
11603
11604
11605
11606
11607
11608
11609
11610
11611
11612
11613
11614
11615
11616
11617
11618
11619
11620
11621
11622
11623
11624
11625
11626
11627
11628
11629
11630
11631
11632
11633
11634
11635
11636
11637
11638
11639
11640
11641
11642
11643
11644
11645
11646
11647
11648
11649
11650
11651
11652
11653
11654
11655
11656
11657
11658
11659
11660
11661
11662
11663
11664
11665
11666
11667
11668
11669
11670
11671
11672
11673
11674
11675
11676
11677
11678
11679
11680
11681
11682
11683
11684
11685
11686
11687
11688
11689
11690
11691
11692
11693
11694
11695
11696
11697
11698
11699
11700
11701
11702
11703
11704
11705
11706
11707
11708
11709
11710
11711
11712
11713
11714
11715
11716
11717
11718
11719
11720
11721
11722
11723
11724
11725
11726
11727
11728
11729
11730
11731
11732
11733
11734
11735
11736
11737
11738
11739
11740
11741
11742
11743
11744
11745
11746
11747
11748
11749
11750
11751
11752
11753
11754
11755
11756
11757
11758
11759
11760
11761
11762
11763
11764
11765
11766
11767
11768
11769
11770
11771
11772
11773
11774
11775
11776
11777
11778
11779
11780
11781
11782
11783
11784
11785
11786
11787
11788
11789
11790
11791
11792
11793
11794
11795
11796
11797
11798
11799
11800
11801
11802
11803
11804
11805
11806
11807
11808
11809
11810
11811
11812
11813
11814
11815
11816
11817
11818
11819
11820
11821
11822
11823
11824
11825
11826
11827
11828
11829
11830
11831
11832
11833
11834
11835
11836
11837
11838
11839
11840
11841
11842
11843
11844
11845
11846
11847
11848
11849
11850
11851
11852
11853
11854
11855
11856
11857
11858
11859
11860
11861
11862
11863
11864
11865
11866
11867
11868
11869
11870
11871
11872
11873
11874
11875
11876
11877
11878
11879
11880
11881
11882
11883
11884
11885
11886
11887
11888
11889
11890
11891
11892
11893
11894
11895
11896
11897
11898
11899
11900
11901
11902
11903
11904
11905
11906
11907
11908
11909
11910
11911
11912
11913
11914
11915
11916
11917
11918
11919
11920
11921
11922
11923
11924
11925
11926
11927
11928
11929
11930
11931
11932
11933
11934
11935
11936
11937
11938
11939
11940
11941
11942
11943
11944
11945
11946
11947
11948
11949
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960
11961
11962
11963
11964
11965
11966
11967
11968
11969
11970
11971
11972
11973
11974
11975
11976
11977
11978
11979
11980
11981
11982
11983
11984
11985
11986
11987
11988
11989
11990
11991
11992
11993
11994
11995
11996
11997
11998
11999
12000
12001
12002
12003
12004
12005
12006
12007
12008
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12023
12024
12025
12026
12027
12028
12029
12030
12031
12032
12033
12034
12035
12036
12037
12038
12039
12040
12041
12042
12043
12044
12045
12046
12047
12048
12049
12050
12051
12052
12053
12054
12055
12056
12057
12058
12059
12060
12061
12062
12063
12064
12065
12066
12067
12068
12069
12070
12071
12072
12073
12074
12075
12076
12077
12078
12079
12080
12081
12082
12083
12084
12085
12086
12087
12088
12089
12090
12091
12092
12093
12094
12095
12096
12097
12098
12099
12100
12101
12102
12103
12104
12105
12106
12107
12108
12109
12110
12111
12112
12113
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
12125
12126
12127
12128
12129
12130
12131
12132
12133
12134
12135
12136
12137
12138
12139
12140
12141
12142
12143
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177
12178
12179
12180
12181
12182
12183
12184
12185
12186
12187
12188
12189
12190
12191
12192
12193
12194
12195
12196
12197
12198
12199
12200
12201
12202
12203
12204
12205
12206
12207
12208
12209
12210
12211
12212
12213
12214
12215
12216
12217
12218
12219
12220
12221
12222
12223
12224
12225
12226
12227
12228
12229
12230
12231
12232
12233
12234
12235
12236
12237
12238
12239
12240
12241
12242
12243
12244
12245
12246
12247
12248
12249
12250
12251
12252
12253
12254
12255
12256
12257
12258
12259
12260
12261
12262
12263
12264
12265
12266
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
12278
12279
12280
12281
12282
12283
12284
12285
12286
12287
12288
12289
12290
12291
12292
12293
12294
12295
12296
12297
12298
12299
12300
12301
12302
12303
12304
12305
12306
12307
12308
12309
12310
12311
12312
12313
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
12324
12325
12326
12327
12328
12329
12330
12331
12332
12333
12334
12335
12336
12337
12338
12339
12340
12341
12342
12343
12344
12345
12346
12347
12348
12349
12350
12351
12352
12353
12354
12355
12356
12357
12358
12359
12360
12361
12362
12363
12364
12365
12366
12367
12368
12369
12370
12371
12372
12373
12374
12375
12376
12377
12378
12379
12380
12381
12382
12383
12384
12385
12386
12387
12388
12389
12390
12391
12392
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
12403
12404
12405
12406
12407
12408
12409
12410
12411
12412
12413
12414
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
12426
12427
12428
12429
12430
12431
12432
12433
12434
12435
12436
12437
12438
12439
12440
12441
12442
12443
12444
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
12469
12470
12471
12472
12473
12474
12475
12476
12477
12478
12479
12480
12481
12482
12483
12484
12485
12486
12487
12488
12489
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
12502
12503
12504
12505
12506
12507
12508
12509
12510
12511
12512
12513
12514
12515
12516
12517
12518
12519
12520
12521
12522
12523
12524
12525
12526
12527
12528
12529
12530
12531
12532
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
12560
12561
12562
12563
12564
12565
12566
12567
12568
12569
12570
12571
12572
12573
12574
12575
12576
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625
12626
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642
12643
12644
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662
12663
12664
12665
12666
12667
12668
12669
12670
12671
12672
12673
12674
12675
12676
12677
12678
12679
12680
12681
12682
12683
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
12736
12737
12738
12739
12740
12741
12742
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
12764
12765
12766
12767
12768
12769
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
12785
12786
12787
12788
12789
12790
12791
12792
12793
12794
12795
12796
12797
12798
12799
12800
12801
12802
12803
12804
12805
12806
12807
12808
12809
12810
12811
12812
12813
12814
12815
12816
12817
12818
12819
12820
12821
12822
12823
12824
12825
12826
12827
12828
12829
12830
12831
12832
12833
12834
12835
12836
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872
12873
12874
12875
12876
12877
12878
12879
12880
12881
12882
12883
12884
12885
12886
12887
12888
12889
12890
12891
12892
12893
12894
12895
12896
12897
12898
12899
12900
12901
12902
12903
12904
12905
12906
12907
12908
12909
12910
12911
12912
12913
12914
12915
12916
12917
12918
12919
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
12930
12931
12932
12933
12934
12935
12936
12937
12938
12939
12940
12941
12942
12943
12944
12945
12946
12947
12948
12949
12950
12951
12952
12953
12954
12955
12956
12957
12958
12959
12960
12961
12962
12963
12964
12965
12966
12967
12968
12969
12970
12971
12972
12973
12974
12975
12976
12977
12978
12979
12980
12981
12982
12983
12984
12985
12986
12987
12988
12989
12990
12991
12992
12993
12994
12995
12996
12997
12998
12999
13000
13001
13002
13003
13004
13005
13006
13007
13008
13009
13010
13011
13012
13013
13014
13015
13016
13017
13018
13019
13020
13021
13022
13023
13024
13025
13026
13027
13028
13029
13030
13031
13032
13033
13034
13035
13036
13037
13038
13039
13040
13041
13042
13043
13044
13045
13046
13047
13048
13049
13050
13051
13052
13053
13054
13055
13056
13057
13058
13059
13060
13061
13062
13063
13064
13065
13066
13067
13068
13069
13070
13071
13072
13073
13074
13075
13076
13077
13078
13079
13080
13081
13082
13083
13084
13085
13086
13087
13088
13089
13090
13091
13092
13093
13094
13095
13096
13097
13098
13099
13100
13101
13102
13103
13104
13105
13106
13107
13108
13109
13110
13111
13112
13113
13114
13115
13116
13117
13118
13119
13120
13121
13122
13123
13124
13125
13126
13127
13128
13129
13130
13131
13132
13133
13134
13135
13136
13137
13138
13139
13140
13141
13142
13143
13144
13145
13146
13147
13148
13149
13150
13151
13152
13153
13154
13155
13156
13157
13158
13159
13160
13161
13162
13163
13164
13165
13166
13167
13168
13169
13170
13171
13172
13173
13174
13175
13176
13177
13178
13179
13180
13181
13182
13183
13184
13185
13186
13187
13188
13189
13190
13191
13192
13193
13194
13195
13196
13197
13198
13199
13200
13201
13202
13203
13204
13205
13206
13207
13208
13209
13210
13211
13212
13213
13214
13215
13216
13217
13218
13219
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
13230
13231
13232
13233
13234
13235
13236
13237
13238
13239
13240
13241
13242
13243
13244
13245
13246
13247
13248
13249
13250
13251
13252
13253
13254
13255
13256
13257
13258
13259
13260
13261
13262
13263
13264
13265
13266
13267
13268
13269
13270
13271
13272
13273
13274
13275
13276
13277
13278
13279
13280
13281
13282
13283
13284
13285
13286
13287
13288
13289
13290
13291
13292
13293
13294
13295
13296
13297
13298
13299
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309
13310
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13321
13322
13323
13324
13325
13326
13327
13328
13329
13330
13331
13332
13333
13334
13335
13336
13337
13338
13339
13340
13341
13342
13343
13344
13345
13346
13347
13348
13349
13350
13351
13352
13353
13354
13355
13356
13357
13358
13359
13360
13361
13362
13363
13364
13365
13366
13367
13368
13369
13370
13371
13372
13373
13374
13375
13376
13377
13378
13379
13380
13381
13382
13383
13384
13385
13386
13387
13388
13389
13390
13391
13392
13393
13394
13395
13396
13397
13398
13399
13400
13401
13402
13403
13404
13405
13406
13407
13408
13409
13410
13411
13412
13413
13414
13415
13416
13417
13418
13419
13420
13421
13422
13423
13424
13425
13426
13427
13428
13429
13430
13431
13432
13433
13434
13435
13436
13437
13438
13439
13440
13441
13442
13443
13444
13445
13446
13447
13448
13449
13450
13451
13452
13453
13454
13455
13456
13457
13458
13459
13460
13461
13462
13463
13464
13465
13466
13467
13468
13469
13470
13471
13472
13473
13474
13475
13476
13477
13478
13479
13480
13481
13482
13483
13484
13485
13486
13487
13488
13489
13490
13491
13492
13493
13494
13495
13496
13497
13498
13499
13500
13501
13502
13503
13504
13505
13506
13507
13508
13509
13510
13511
13512
13513
13514
13515
13516
13517
13518
13519
13520
13521
13522
13523
13524
13525
13526
13527
13528
13529
13530
13531
13532
13533
13534
13535
13536
13537
13538
13539
13540
13541
13542
13543
13544
13545
13546
13547
13548
13549
13550
13551
13552
13553
13554
13555
13556
13557
13558
13559
13560
13561
13562
13563
13564
13565
13566
13567
13568
13569
13570
13571
13572
13573
13574
13575
13576
13577
13578
13579
13580
13581
13582
13583
13584
13585
13586
13587
13588
13589
13590
13591
13592
13593
13594
13595
13596
13597
13598
13599
13600
13601
13602
13603
13604
13605
13606
13607
13608
13609
13610
13611
13612
13613
13614
13615
13616
13617
13618
13619
13620
13621
13622
13623
13624
13625
13626
13627
13628
13629
13630
13631
13632
13633
13634
13635
13636
13637
13638
13639
13640
13641
13642
13643
13644
13645
13646
13647
13648
13649
13650
13651
13652
13653
13654
13655
13656
13657
13658
13659
13660
13661
13662
13663
13664
13665
13666
13667
13668
13669
13670
13671
13672
13673
13674
13675
13676
13677
13678
13679
13680
13681
13682
13683
13684
13685
13686
13687
13688
13689
13690
13691
13692
13693
13694
13695
13696
13697
13698
13699
13700
13701
13702
13703
13704
13705
13706
13707
13708
13709
13710
13711
13712
13713
13714
13715
13716
13717
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
13728
13729
13730
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
13746
13747
13748
13749
13750
13751
13752
13753
13754
13755
13756
13757
13758
13759
13760
13761
13762
13763
13764
13765
13766
13767
13768
13769
13770
13771
13772
13773
13774
13775
13776
13777
13778
13779
13780
13781
13782
13783
13784
13785
13786
13787
13788
13789
13790
13791
13792
13793
13794
13795
13796
13797
13798
13799
13800
13801
13802
13803
13804
13805
13806
13807
13808
13809
13810
13811
13812
13813
13814
13815
13816
13817
13818
13819
13820
13821
13822
13823
13824
13825
13826
13827
13828
13829
13830
13831
13832
13833
13834
13835
13836
13837
13838
13839
13840
13841
13842
13843
13844
13845
13846
13847
13848
13849
13850
13851
13852
13853
13854
13855
13856
13857
13858
13859
13860
13861
13862
13863
13864
13865
13866
13867
13868
13869
13870
13871
13872
13873
13874
13875
13876
13877
13878
13879
13880
13881
13882
13883
13884
13885
13886
13887
13888
13889
13890
13891
13892
13893
13894
13895
13896
13897
13898
13899
13900
13901
13902
13903
13904
13905
13906
13907
13908
13909
13910
13911
13912
13913
13914
13915
13916
13917
13918
13919
13920
13921
13922
13923
13924
13925
13926
13927
13928
13929
13930
13931
13932
13933
13934
13935
13936
13937
13938
13939
13940
13941
13942
13943
13944
13945
13946
13947
13948
13949
13950
13951
13952
13953
13954
13955
13956
13957
13958
13959
13960
13961
13962
13963
13964
13965
13966
13967
13968
13969
13970
13971
13972
13973
13974
13975
13976
13977
13978
13979
13980
13981
13982
13983
13984
13985
13986
13987
13988
13989
13990
13991
13992
13993
13994
13995
13996
13997
13998
13999
14000
14001
14002
14003
14004
14005
14006
14007
14008
14009
14010
14011
14012
14013
14014
14015
14016
14017
14018
14019
14020
14021
14022
14023
14024
14025
14026
14027
14028
14029
14030
14031
14032
14033
14034
14035
14036
14037
14038
14039
14040
14041
14042
14043
14044
14045
14046
14047
14048
14049
14050
14051
14052
14053
14054
14055
14056
14057
14058
14059
14060
14061
14062
14063
14064
14065
14066
14067
14068
14069
14070
14071
14072
14073
14074
14075
14076
14077
14078
14079
14080
14081
14082
14083
14084
14085
14086
14087
14088
14089
14090
14091
14092
14093
14094
14095
14096
14097
14098
14099
14100
14101
14102
14103
14104
14105
14106
14107
14108
14109
14110
14111
14112
14113
14114
14115
14116
14117
14118
14119
14120
14121
14122
14123
14124
14125
14126
14127
14128
14129
14130
14131
14132
14133
14134
14135
14136
14137
14138
14139
14140
14141
14142
14143
14144
14145
14146
14147
14148
14149
14150
14151
14152
14153
14154
14155
14156
14157
14158
14159
14160
14161
14162
14163
14164
14165
14166
14167
14168
14169
14170
14171
14172
14173
14174
14175
14176
14177
14178
14179
14180
14181
14182
14183
14184
14185
14186
14187
14188
14189
14190
14191
14192
14193
14194
14195
14196
14197
14198
14199
14200
14201
14202
14203
14204
14205
14206
14207
14208
14209
14210
14211
14212
14213
14214
14215
14216
14217
14218
14219
14220
14221
14222
14223
14224
14225
14226
14227
14228
14229
14230
14231
14232
14233
14234
14235
14236
14237
14238
14239
14240
14241
14242
14243
14244
14245
14246
14247
14248
14249
14250
14251
14252
14253
14254
14255
14256
14257
14258
14259
14260
14261
14262
14263
14264
14265
14266
14267
14268
14269
14270
14271
14272
14273
14274
14275
14276
14277
14278
14279
14280
14281
14282
14283
14284
14285
14286
14287
14288
14289
14290
14291
14292
14293
14294
14295
14296
14297
14298
14299
14300
14301
14302
14303
14304
14305
14306
14307
14308
14309
14310
14311
14312
14313
14314
14315
14316
14317
14318
14319
14320
14321
14322
14323
14324
14325
14326
14327
14328
14329
14330
14331
14332
14333
14334
14335
14336
14337
14338
14339
14340
14341
14342
14343
14344
14345
14346
14347
14348
14349
14350
14351
14352
14353
14354
14355
14356
14357
14358
14359
14360
14361
14362
14363
14364
14365
14366
14367
14368
14369
14370
14371
14372
14373
14374
14375
14376
14377
14378
14379
14380
14381
14382
14383
14384
14385
14386
14387
14388
14389
14390
14391
14392
14393
14394
14395
14396
14397
14398
14399
14400
14401
14402
14403
14404
14405
14406
14407
14408
14409
14410
14411
14412
14413
14414
14415
14416
14417
14418
14419
14420
14421
14422
14423
14424
14425
14426
14427
14428
14429
14430
14431
14432
14433
14434
14435
14436
14437
14438
14439
14440
14441
14442
14443
14444
14445
14446
14447
14448
14449
14450
14451
14452
14453
14454
14455
14456
14457
14458
14459
14460
14461
14462
14463
14464
14465
14466
14467
14468
14469
14470
14471
14472
14473
14474
14475
14476
14477
14478
14479
14480
14481
14482
14483
14484
14485
14486
14487
14488
14489
14490
14491
14492
14493
14494
14495
14496
14497
14498
14499
14500
14501
14502
14503
14504
14505
14506
14507
14508
14509
14510
14511
14512
14513
14514
14515
14516
14517
14518
14519
14520
14521
14522
14523
14524
14525
14526
14527
14528
14529
14530
14531
14532
14533
14534
14535
14536
14537
14538
14539
14540
14541
14542
14543
14544
14545
14546
14547
14548
14549
14550
14551
14552
14553
14554
14555
14556
14557
14558
14559
14560
14561
14562
14563
14564
14565
14566
14567
14568
14569
14570
14571
14572
14573
14574
14575
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
14591
14592
14593
14594
14595
14596
14597
14598
14599
14600
14601
14602
14603
14604
14605
14606
14607
14608
14609
14610
14611
14612
14613
14614
14615
14616
14617
14618
14619
14620
14621
14622
14623
14624
14625
14626
14627
14628
14629
14630
14631
14632
14633
14634
14635
14636
14637
14638
14639
14640
14641
14642
14643
14644
14645
14646
14647
14648
14649
14650
14651
14652
14653
14654
14655
14656
14657
14658
14659
14660
14661
14662
14663
14664
14665
14666
14667
14668
14669
14670
14671
14672
14673
14674
14675
14676
14677
14678
14679
14680
14681
14682
14683
14684
14685
14686
14687
14688
14689
14690
14691
14692
14693
14694
14695
14696
14697
14698
14699
14700
14701
14702
14703
14704
14705
14706
14707
14708
14709
14710
14711
14712
14713
14714
14715
14716
14717
14718
14719
14720
14721
14722
14723
14724
14725
14726
14727
14728
14729
14730
14731
14732
14733
14734
14735
14736
14737
14738
14739
14740
14741
14742
14743
14744
14745
14746
14747
14748
14749
14750
14751
14752
14753
14754
14755
14756
14757
14758
14759
14760
14761
14762
14763
14764
14765
14766
14767
14768
14769
14770
14771
14772
14773
14774
14775
14776
14777
14778
14779
14780
14781
14782
14783
14784
14785
14786
14787
14788
14789
14790
14791
14792
14793
14794
14795
14796
14797
14798
14799
14800
14801
14802
14803
14804
14805
14806
14807
14808
14809
14810
14811
14812
14813
14814
14815
14816
14817
14818
14819
14820
14821
14822
14823
14824
14825
14826
14827
14828
14829
14830
14831
14832
14833
14834
14835
14836
14837
14838
14839
14840
14841
14842
14843
14844
14845
14846
14847
14848
14849
14850
14851
14852
14853
14854
14855
14856
14857
14858
14859
14860
14861
14862
14863
14864
14865
14866
14867
14868
14869
14870
14871
14872
14873
14874
14875
14876
14877
14878
14879
14880
14881
14882
14883
14884
14885
14886
14887
14888
14889
14890
14891
14892
14893
14894
14895
14896
14897
14898
14899
14900
14901
14902
14903
14904
14905
14906
14907
14908
14909
14910
14911
14912
14913
14914
14915
14916
14917
14918
14919
14920
14921
14922
14923
14924
14925
14926
14927
14928
14929
14930
14931
14932
14933
14934
14935
14936
14937
14938
14939
14940
14941
14942
14943
14944
14945
14946
14947
14948
14949
14950
14951
14952
14953
14954
14955
14956
14957
14958
14959
14960
14961
14962
14963
14964
14965
14966
14967
14968
14969
14970
14971
14972
14973
14974
14975
14976
14977
14978
14979
14980
14981
14982
14983
14984
14985
14986
14987
14988
14989
14990
14991
14992
14993
14994
14995
14996
14997
14998
14999
15000
15001
15002
15003
15004
15005
15006
15007
15008
15009
15010
15011
15012
15013
15014
15015
15016
15017
15018
15019
15020
15021
15022
15023
15024
15025
15026
15027
15028
15029
15030
15031
15032
15033
15034
15035
15036
15037
15038
15039
15040
15041
15042
15043
15044
15045
15046
15047
15048
15049
15050
15051
15052
15053
15054
15055
15056
15057
15058
15059
15060
15061
15062
15063
15064
15065
15066
15067
15068
15069
15070
15071
15072
15073
15074
15075
15076
15077
15078
15079
15080
15081
15082
15083
15084
15085
15086
15087
15088
15089
15090
15091
15092
15093
15094
15095
15096
15097
15098
15099
15100
15101
15102
15103
15104
15105
15106
15107
15108
15109
15110
15111
15112
15113
15114
15115
15116
15117
15118
15119
15120
15121
15122
15123
15124
15125
15126
15127
15128
15129
15130
15131
15132
15133
15134
15135
15136
15137
15138
15139
15140
15141
15142
15143
15144
15145
15146
15147
15148
15149
15150
15151
15152
15153
15154
15155
15156
15157
15158
15159
15160
15161
15162
15163
15164
15165
15166
15167
15168
15169
15170
15171
15172
15173
15174
15175
15176
15177
15178
15179
15180
15181
15182
15183
15184
15185
15186
15187
15188
15189
15190
15191
15192
15193
15194
15195
15196
15197
15198
15199
15200
15201
15202
15203
15204
15205
15206
15207
15208
15209
15210
15211
15212
15213
15214
15215
15216
15217
15218
15219
15220
15221
15222
15223
15224
15225
15226
15227
15228
15229
15230
15231
15232
15233
15234
15235
15236
15237
15238
15239
15240
15241
15242
15243
15244
15245
15246
15247
15248
15249
15250
15251
15252
15253
15254
15255
15256
15257
15258
15259
15260
15261
15262
15263
15264
15265
15266
15267
15268
15269
15270
15271
15272
15273
15274
15275
15276
15277
15278
15279
15280
15281
15282
15283
15284
15285
15286
15287
15288
15289
15290
15291
15292
15293
15294
15295
15296
15297
15298
15299
15300
15301
15302
15303
15304
15305
15306
15307
15308
15309
15310
15311
15312
15313
15314
15315
15316
15317
15318
15319
15320
15321
15322
15323
15324
15325
15326
15327
15328
15329
15330
15331
15332
15333
15334
15335
15336
15337
15338
15339
15340
15341
15342
15343
15344
15345
15346
15347
15348
15349
15350
15351
15352
15353
15354
15355
15356
15357
15358
15359
15360
15361
15362
15363
15364
15365
15366
15367
15368
15369
15370
15371
15372
15373
15374
15375
15376
15377
15378
15379
15380
15381
15382
15383
15384
15385
15386
15387
15388
15389
15390
15391
15392
15393
15394
15395
15396
15397
15398
15399
15400
15401
15402
15403
15404
15405
15406
15407
15408
15409
15410
15411
15412
15413
15414
15415
15416
15417
15418
15419
15420
15421
15422
15423
15424
15425
15426
15427
15428
15429
15430
15431
15432
15433
15434
15435
15436
15437
15438
15439
15440
15441
15442
15443
15444
15445
15446
15447
15448
15449
15450
15451
15452
15453
15454
15455
15456
15457
15458
15459
15460
15461
15462
15463
15464
15465
15466
15467
15468
15469
15470
15471
15472
15473
15474
15475
15476
15477
15478
15479
15480
15481
15482
15483
15484
15485
15486
15487
15488
15489
15490
15491
15492
15493
15494
15495
15496
15497
15498
15499
15500
15501
15502
15503
15504
15505
15506
15507
15508
15509
15510
15511
15512
15513
15514
15515
15516
15517
15518
15519
15520
15521
15522
15523
15524
15525
15526
15527
15528
15529
15530
15531
15532
15533
15534
15535
15536
15537
15538
15539
15540
15541
15542
15543
15544
15545
15546
15547
15548
15549
15550
15551
15552
15553
15554
15555
15556
15557
15558
15559
15560
15561
15562
15563
15564
15565
15566
15567
15568
15569
15570
15571
15572
15573
15574
15575
15576
15577
15578
15579
15580
15581
15582
15583
15584
15585
15586
15587
15588
15589
15590
15591
15592
15593
15594
15595
15596
15597
15598
15599
15600
15601
15602
15603
15604
15605
15606
15607
15608
15609
15610
15611
15612
15613
15614
15615
15616
15617
15618
15619
15620
15621
15622
15623
15624
15625
15626
15627
15628
15629
15630
15631
15632
15633
15634
15635
15636
15637
15638
15639
15640
15641
15642
15643
15644
15645
15646
15647
15648
15649
15650
15651
15652
15653
15654
15655
15656
15657
15658
15659
15660
15661
15662
15663
15664
15665
15666
15667
15668
15669
15670
15671
15672
15673
15674
15675
15676
15677
15678
15679
15680
15681
15682
15683
15684
15685
15686
15687
15688
15689
15690
15691
15692
15693
15694
15695
15696
15697
15698
15699
15700
15701
15702
15703
15704
15705
15706
15707
15708
15709
15710
15711
15712
15713
15714
15715
15716
15717
15718
15719
15720
15721
15722
15723
15724
15725
15726
15727
15728
15729
15730
15731
15732
15733
15734
15735
15736
15737
15738
15739
15740
15741
15742
15743
15744
15745
15746
15747
15748
15749
15750
15751
15752
15753
15754
15755
15756
15757
15758
15759
15760
15761
15762
15763
15764
15765
15766
15767
15768
15769
15770
15771
15772
15773
15774
15775
15776
15777
15778
15779
15780
15781
15782
15783
15784
15785
15786
15787
15788
15789
15790
15791
15792
15793
15794
15795
15796
15797
15798
15799
15800
15801
15802
15803
15804
15805
15806
15807
15808
15809
15810
15811
15812
15813
15814
15815
15816
15817
15818
15819
15820
15821
15822
15823
15824
15825
15826
15827
15828
15829
15830
15831
15832
15833
15834
15835
15836
15837
15838
15839
15840
15841
15842
15843
15844
15845
15846
15847
15848
15849
15850
15851
15852
15853
15854
15855
15856
15857
15858
15859
15860
15861
15862
15863
15864
15865
15866
15867
15868
15869
15870
15871
15872
15873
15874
15875
15876
15877
15878
15879
15880
15881
15882
15883
15884
15885
15886
15887
15888
15889
15890
15891
15892
15893
15894
15895
15896
15897
15898
15899
15900
15901
15902
15903
15904
15905
15906
15907
15908
15909
15910
15911
15912
15913
15914
15915
15916
15917
15918
15919
15920
15921
15922
15923
15924
15925
15926
15927
15928
15929
15930
15931
15932
15933
15934
15935
15936
15937
15938
15939
15940
15941
15942
15943
15944
15945
15946
15947
15948
15949
15950
15951
15952
15953
15954
15955
15956
15957
15958
15959
15960
15961
15962
15963
15964
15965
15966
15967
15968
15969
15970
15971
15972
15973
15974
15975
15976
15977
15978
15979
15980
15981
15982
15983
15984
15985
15986
15987
15988
15989
15990
15991
15992
15993
15994
15995
15996
15997
15998
15999
16000
16001
16002
16003
16004
16005
16006
16007
16008
16009
16010
16011
16012
16013
16014
16015
16016
16017
16018
16019
16020
16021
16022
16023
16024
16025
16026
16027
16028
16029
16030
16031
16032
16033
16034
16035
16036
16037
16038
16039
16040
16041
16042
16043
16044
16045
16046
16047
16048
16049
16050
16051
16052
16053
16054
16055
16056
16057
16058
16059
16060
16061
16062
16063
16064
16065
16066
16067
16068
16069
16070
16071
16072
16073
16074
16075
16076
16077
16078
16079
16080
16081
16082
16083
16084
16085
16086
16087
16088
16089
16090
16091
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101
16102
16103
16104
16105
16106
16107
16108
16109
16110
16111
16112
16113
16114
16115
16116
16117
16118
16119
16120
16121
16122
16123
16124
16125
16126
16127
16128
16129
16130
16131
16132
16133
16134
16135
16136
16137
16138
16139
16140
16141
16142
16143
16144
16145
16146
16147
16148
16149
16150
16151
16152
16153
16154
16155
16156
16157
16158
16159
16160
16161
16162
16163
16164
16165
16166
16167
16168
16169
16170
16171
16172
16173
16174
16175
16176
16177
16178
16179
16180
16181
16182
16183
16184
16185
16186
16187
16188
16189
16190
16191
16192
16193
16194
16195
16196
16197
16198
16199
16200
16201
16202
16203
16204
16205
16206
16207
16208
16209
16210
16211
16212
16213
16214
16215
16216
16217
16218
16219
16220
16221
16222
16223
16224
16225
16226
16227
16228
16229
16230
16231
16232
16233
16234
16235
16236
16237
16238
16239
16240
16241
16242
16243
16244
16245
16246
16247
16248
16249
16250
16251
16252
16253
16254
16255
16256
16257
16258
16259
16260
16261
16262
16263
16264
16265
16266
16267
16268
16269
16270
16271
16272
16273
16274
16275
16276
16277
16278
16279
16280
16281
16282
16283
16284
16285
16286
16287
16288
16289
16290
16291
16292
16293
16294
16295
16296
16297
16298
16299
16300
16301
16302
16303
16304
16305
16306
16307
16308
16309
16310
16311
16312
16313
16314
16315
16316
16317
16318
16319
16320
16321
16322
16323
16324
16325
16326
16327
16328
16329
16330
16331
16332
16333
16334
16335
16336
16337
16338
16339
16340
16341
16342
16343
16344
16345
16346
16347
16348
16349
16350
16351
16352
16353
16354
16355
16356
16357
16358
16359
16360
16361
16362
16363
16364
16365
16366
16367
16368
16369
16370
16371
16372
16373
16374
16375
16376
16377
16378
16379
16380
16381
16382
16383
16384
16385
16386
16387
16388
16389
16390
16391
16392
16393
16394
16395
16396
16397
16398
16399
16400
16401
16402
16403
16404
16405
16406
16407
16408
16409
16410
16411
16412
16413
16414
16415
16416
16417
16418
16419
16420
16421
16422
16423
16424
16425
16426
16427
16428
16429
16430
16431
16432
16433
16434
16435
16436
16437
16438
16439
16440
16441
16442
16443
16444
16445
16446
16447
16448
16449
16450
16451
16452
16453
16454
16455
16456
16457
16458
16459
16460
16461
16462
16463
16464
16465
16466
16467
16468
16469
16470
16471
16472
16473
16474
16475
16476
16477
16478
16479
16480
16481
16482
16483
16484
16485
16486
16487
16488
16489
16490
16491
16492
16493
16494
16495
16496
16497
16498
16499
16500
16501
16502
16503
16504
16505
16506
16507
16508
16509
16510
16511
16512
16513
16514
16515
16516
16517
16518
16519
16520
16521
16522
16523
16524
16525
16526
16527
16528
16529
16530
16531
16532
16533
16534
16535
16536
16537
16538
16539
16540
16541
16542
16543
16544
16545
16546
16547
16548
16549
16550
16551
16552
16553
16554
16555
16556
16557
16558
16559
16560
16561
16562
16563
16564
16565
16566
16567
16568
16569
16570
16571
16572
16573
16574
16575
16576
16577
16578
16579
16580
16581
16582
16583
16584
16585
16586
16587
16588
16589
16590
16591
16592
16593
16594
16595
16596
16597
16598
16599
16600
16601
16602
16603
16604
16605
16606
16607
16608
16609
16610
16611
16612
16613
16614
16615
16616
16617
16618
16619
16620
16621
16622
16623
16624
16625
16626
16627
16628
16629
16630
16631
16632
16633
16634
16635
16636
16637
16638
16639
16640
16641
16642
16643
16644
16645
16646
16647
16648
16649
16650
16651
16652
16653
16654
16655
16656
16657
16658
16659
16660
16661
16662
16663
16664
16665
16666
16667
16668
16669
16670
16671
16672
16673
16674
16675
16676
16677
16678
16679
16680
16681
16682
16683
16684
16685
16686
16687
16688
16689
16690
16691
16692
16693
16694
16695
16696
16697
16698
16699
16700
16701
16702
16703
16704
16705
16706
16707
16708
16709
16710
16711
16712
16713
16714
16715
16716
16717
16718
16719
16720
16721
16722
16723
16724
16725
16726
16727
16728
16729
16730
16731
16732
16733
16734
16735
16736
16737
16738
16739
16740
16741
16742
16743
16744
16745
16746
16747
16748
16749
16750
16751
16752
16753
16754
16755
16756
16757
16758
16759
16760
16761
16762
16763
16764
16765
16766
16767
16768
16769
16770
16771
16772
16773
16774
16775
16776
16777
16778
16779
16780
16781
16782
16783
16784
16785
16786
16787
16788
16789
16790
16791
16792
16793
16794
16795
16796
16797
16798
16799
16800
16801
16802
16803
16804
16805
16806
16807
16808
16809
16810
16811
16812
16813
16814
16815
16816
16817
16818
16819
16820
16821
16822
16823
16824
16825
16826
16827
16828
16829
16830
16831
16832
16833
16834
16835
16836
16837
16838
16839
16840
16841
16842
16843
16844
16845
16846
16847
16848
16849
16850
16851
16852
16853
16854
16855
16856
16857
16858
16859
16860
16861
16862
16863
16864
16865
16866
16867
16868
16869
16870
16871
16872
16873
16874
16875
16876
16877
16878
16879
16880
16881
16882
16883
16884
16885
16886
16887
16888
16889
16890
16891
16892
16893
16894
16895
16896
16897
16898
16899
16900
16901
16902
16903
16904
16905
16906
16907
16908
16909
16910
16911
16912
16913
16914
16915
16916
16917
16918
16919
16920
16921
16922
16923
16924
16925
16926
16927
16928
16929
16930
16931
16932
16933
16934
16935
16936
16937
16938
16939
16940
16941
16942
16943
16944
16945
16946
16947
16948
16949
16950
16951
16952
16953
16954
16955
16956
16957
16958
16959
16960
16961
16962
16963
16964
16965
16966
16967
16968
16969
16970
16971
16972
16973
16974
16975
16976
16977
16978
16979
16980
16981
16982
16983
16984
16985
16986
16987
16988
16989
16990
16991
16992
16993
16994
16995
16996
16997
16998
16999
17000
17001
17002
17003
17004
17005
17006
17007
17008
17009
17010
17011
17012
17013
17014
17015
17016
17017
17018
17019
17020
17021
17022
17023
17024
17025
17026
17027
17028
17029
17030
17031
17032
17033
17034
17035
17036
17037
17038
17039
17040
17041
17042
17043
17044
17045
17046
17047
17048
17049
17050
17051
17052
17053
17054
17055
17056
17057
17058
17059
17060
17061
17062
17063
17064
17065
17066
17067
17068
17069
17070
17071
17072
17073
17074
17075
17076
17077
17078
17079
17080
17081
17082
17083
17084
17085
17086
17087
17088
17089
17090
17091
17092
17093
17094
17095
17096
17097
17098
17099
17100
17101
17102
17103
17104
17105
17106
17107
17108
17109
17110
17111
17112
17113
17114
17115
17116
17117
17118
17119
17120
17121
17122
17123
17124
17125
17126
17127
17128
17129
17130
17131
17132
17133
17134
17135
17136
17137
17138
17139
17140
17141
17142
17143
17144
17145
17146
17147
17148
17149
17150
17151
17152
17153
17154
17155
17156
17157
17158
17159
17160
17161
17162
17163
17164
17165
17166
17167
17168
17169
17170
17171
17172
17173
17174
17175
17176
17177
17178
17179
17180
17181
17182
17183
17184
17185
17186
17187
17188
17189
17190
17191
17192
17193
17194
17195
17196
17197
17198
17199
17200
17201
17202
17203
17204
17205
17206
17207
17208
17209
17210
17211
17212
17213
17214
17215
17216
17217
17218
17219
17220
17221
17222
17223
17224
17225
17226
17227
17228
17229
17230
17231
17232
17233
17234
17235
17236
17237
17238
17239
17240
17241
17242
17243
17244
17245
17246
17247
17248
17249
17250
17251
17252
17253
17254
17255
17256
17257
17258
17259
17260
17261
17262
17263
17264
17265
17266
17267
17268
17269
17270
17271
17272
17273
17274
17275
17276
17277
17278
17279
17280
17281
17282
17283
17284
17285
17286
17287
17288
17289
17290
17291
17292
17293
17294
17295
17296
17297
17298
17299
17300
17301
17302
17303
17304
17305
17306
17307
17308
17309
17310
17311
17312
17313
17314
17315
17316
17317
17318
17319
17320
17321
17322
17323
17324
17325
17326
17327
17328
17329
17330
17331
17332
17333
17334
17335
17336
17337
17338
17339
17340
17341
17342
17343
17344
17345
17346
17347
17348
17349
17350
17351
17352
17353
17354
17355
17356
17357
17358
17359
17360
17361
17362
17363
17364
17365
17366
17367
17368
17369
17370
17371
17372
17373
17374
17375
17376
17377
17378
17379
17380
17381
17382
17383
17384
17385
17386
17387
17388
17389
17390
17391
17392
17393
17394
17395
17396
17397
17398
17399
17400
17401
17402
17403
17404
17405
17406
17407
17408
17409
17410
17411
17412
17413
17414
17415
17416
17417
17418
17419
17420
17421
17422
17423
17424
17425
17426
17427
17428
17429
17430
17431
17432
17433
17434
17435
17436
17437
17438
17439
17440
17441
17442
17443
17444
17445
17446
17447
17448
17449
17450
17451
17452
17453
17454
17455
17456
17457
17458
17459
17460
17461
17462
17463
17464
17465
17466
17467
17468
17469
17470
17471
17472
17473
17474
17475
17476
17477
17478
17479
17480
17481
17482
17483
17484
17485
17486
17487
17488
17489
17490
17491
17492
17493
17494
17495
17496
17497
17498
17499
17500
17501
17502
17503
17504
17505
17506
17507
17508
17509
17510
17511
17512
17513
17514
17515
17516
17517
17518
17519
17520
17521
17522
17523
17524
17525
17526
17527
17528
17529
17530
17531
17532
17533
17534
17535
17536
17537
17538
17539
17540
17541
17542
17543
17544
17545
17546
17547
17548
17549
17550
17551
17552
17553
17554
17555
17556
17557
17558
17559
17560
17561
17562
17563
17564
17565
17566
17567
17568
17569
17570
17571
17572
17573
17574
17575
17576
17577
17578
17579
17580
17581
17582
17583
17584
17585
17586
17587
17588
17589
17590
17591
17592
17593
17594
17595
17596
17597
17598
17599
17600
17601
17602
17603
17604
17605
17606
17607
17608
17609
17610
17611
17612
17613
17614
17615
17616
17617
17618
17619
17620
17621
17622
17623
17624
17625
17626
17627
17628
17629
17630
17631
17632
17633
17634
17635
17636
17637
17638
17639
17640
17641
17642
17643
17644
17645
17646
17647
17648
17649
17650
17651
17652
17653
17654
17655
17656
17657
17658
17659
17660
17661
17662
17663
17664
17665
17666
17667
17668
17669
17670
17671
17672
17673
17674
17675
17676
17677
17678
17679
17680
17681
17682
17683
17684
17685
17686
17687
17688
17689
17690
17691
17692
17693
17694
17695
17696
17697
17698
17699
17700
17701
17702
17703
17704
17705
17706
17707
17708
17709
17710
17711
17712
17713
17714
17715
17716
17717
17718
17719
17720
17721
17722
17723
17724
17725
17726
17727
17728
17729
17730
17731
17732
17733
17734
17735
17736
17737
17738
17739
17740
17741
17742
17743
17744
17745
17746
17747
17748
17749
17750
17751
17752
17753
17754
17755
17756
17757
17758
17759
17760
17761
17762
17763
17764
17765
17766
17767
17768
17769
17770
17771
17772
17773
17774
17775
17776
17777
17778
17779
17780
17781
17782
17783
17784
17785
17786
17787
17788
17789
17790
17791
17792
17793
17794
17795
17796
17797
17798
17799
17800
17801
17802
17803
17804
17805
17806
17807
17808
17809
17810
17811
17812
17813
17814
17815
17816
17817
17818
17819
17820
17821
17822
17823
17824
17825
17826
17827
17828
17829
17830
17831
17832
17833
17834
17835
17836
17837
17838
17839
17840
17841
17842
17843
17844
17845
17846
17847
17848
17849
17850
17851
17852
17853
17854
17855
17856
17857
17858
17859
17860
17861
17862
17863
17864
17865
17866
17867
17868
17869
17870
17871
17872
17873
17874
17875
17876
17877
17878
17879
17880
17881
17882
17883
17884
17885
17886
17887
17888
17889
17890
17891
17892
17893
17894
17895
17896
17897
17898
17899
17900
17901
17902
17903
17904
17905
17906
17907
17908
17909
17910
17911
17912
17913
17914
17915
17916
17917
17918
17919
17920
17921
17922
17923
17924
17925
17926
17927
17928
17929
17930
17931
17932
17933
17934
17935
17936
17937
17938
17939
17940
17941
17942
17943
17944
17945
17946
17947
17948
17949
17950
17951
17952
17953
17954
17955
17956
17957
17958
17959
17960
17961
17962
17963
17964
17965
17966
17967
17968
17969
17970
17971
17972
17973
17974
17975
17976
17977
17978
17979
17980
17981
17982
17983
17984
17985
17986
17987
17988
17989
17990
17991
17992
17993
17994
17995
17996
17997
17998
17999
18000
18001
18002
18003
18004
18005
18006
18007
18008
18009
18010
18011
18012
18013
18014
18015
18016
18017
18018
18019
18020
18021
18022
18023
18024
18025
18026
18027
18028
18029
18030
18031
18032
18033
18034
18035
18036
18037
18038
18039
18040
18041
18042
18043
18044
18045
18046
18047
18048
18049
18050
18051
18052
18053
18054
18055
18056
18057
18058
18059
18060
18061
18062
18063
18064
18065
18066
18067
18068
18069
18070
18071
18072
18073
18074
18075
18076
18077
18078
18079
18080
18081
18082
18083
18084
18085
18086
18087
18088
18089
18090
18091
18092
18093
18094
18095
18096
18097
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
18108
18109
18110
18111
18112
18113
18114
18115
18116
18117
18118
18119
18120
18121
18122
18123
18124
18125
18126
18127
18128
18129
18130
18131
18132
18133
18134
18135
18136
18137
18138
18139
18140
18141
18142
18143
18144
18145
18146
18147
18148
18149
18150
18151
18152
18153
18154
18155
18156
18157
18158
18159
18160
18161
18162
18163
18164
18165
18166
18167
18168
18169
18170
18171
18172
18173
18174
18175
18176
18177
18178
18179
18180
18181
18182
18183
18184
18185
18186
18187
18188
18189
18190
18191
18192
18193
18194
18195
18196
18197
18198
18199
18200
18201
18202
18203
18204
18205
18206
18207
18208
18209
18210
18211
18212
18213
18214
18215
18216
18217
18218
18219
18220
18221
18222
18223
18224
18225
18226
18227
18228
18229
18230
18231
18232
18233
18234
18235
18236
18237
18238
18239
18240
18241
18242
18243
18244
18245
18246
18247
18248
18249
18250
18251
18252
18253
18254
18255
18256
18257
18258
18259
18260
18261
18262
18263
18264
18265
18266
18267
18268
18269
18270
18271
18272
18273
18274
18275
18276
18277
18278
18279
18280
18281
18282
18283
18284
18285
18286
18287
18288
18289
18290
18291
18292
18293
18294
18295
18296
18297
18298
18299
18300
18301
18302
18303
18304
18305
18306
18307
18308
18309
18310
18311
18312
18313
18314
18315
18316
18317
18318
18319
18320
18321
18322
18323
18324
18325
18326
18327
18328
18329
18330
18331
18332
18333
18334
18335
18336
18337
18338
18339
18340
18341
18342
18343
18344
18345
18346
18347
18348
18349
18350
18351
18352
18353
18354
18355
18356
18357
18358
18359
18360
18361
18362
18363
18364
18365
18366
18367
18368
18369
18370
18371
18372
18373
18374
18375
18376
18377
18378
18379
18380
18381
18382
18383
18384
18385
18386
18387
18388
18389
18390
18391
18392
18393
18394
18395
18396
18397
18398
18399
18400
18401
18402
18403
18404
18405
18406
18407
18408
18409
18410
18411
18412
18413
18414
18415
18416
18417
18418
18419
18420
18421
18422
18423
18424
18425
18426
18427
18428
18429
18430
18431
18432
18433
18434
18435
18436
18437
18438
18439
18440
18441
18442
18443
18444
18445
18446
18447
18448
18449
18450
18451
18452
18453
18454
18455
18456
18457
18458
18459
18460
18461
18462
18463
18464
18465
18466
18467
18468
18469
18470
18471
18472
18473
18474
18475
18476
18477
18478
18479
18480
18481
18482
18483
18484
18485
18486
18487
18488
18489
18490
18491
18492
18493
18494
18495
18496
18497
18498
18499
18500
18501
18502
18503
18504
18505
18506
18507
18508
18509
18510
18511
18512
18513
18514
18515
18516
18517
18518
18519
18520
18521
18522
18523
18524
18525
18526
18527
18528
18529
18530
18531
18532
18533
18534
18535
18536
18537
18538
18539
18540
18541
18542
18543
18544
18545
18546
18547
18548
18549
18550
18551
18552
18553
18554
18555
18556
18557
18558
18559
18560
18561
18562
18563
18564
18565
18566
18567
18568
18569
18570
18571
18572
18573
18574
18575
18576
18577
18578
18579
18580
18581
18582
18583
18584
18585
18586
18587
18588
18589
18590
18591
18592
18593
18594
18595
18596
18597
18598
18599
18600
18601
18602
18603
18604
18605
18606
18607
18608
18609
18610
18611
18612
18613
18614
18615
18616
18617
18618
18619
18620
18621
18622
18623
18624
18625
18626
18627
18628
18629
18630
18631
18632
18633
18634
18635
18636
18637
18638
18639
18640
18641
18642
18643
18644
18645
18646
18647
18648
18649
18650
18651
18652
18653
18654
18655
18656
18657
18658
18659
18660
18661
18662
18663
18664
18665
18666
18667
18668
18669
18670
18671
18672
18673
18674
18675
18676
18677
18678
18679
18680
18681
18682
18683
18684
18685
18686
18687
18688
18689
18690
18691
18692
18693
18694
18695
18696
18697
18698
18699
18700
18701
18702
18703
18704
18705
18706
18707
18708
18709
18710
18711
18712
18713
18714
18715
18716
18717
18718
18719
18720
18721
18722
18723
18724
18725
18726
18727
18728
18729
18730
18731
18732
18733
18734
18735
18736
18737
18738
18739
18740
18741
18742
18743
18744
18745
18746
18747
18748
18749
18750
18751
18752
18753
18754
18755
18756
18757
18758
18759
18760
18761
18762
18763
18764
18765
18766
18767
18768
18769
18770
18771
18772
18773
18774
18775
18776
18777
18778
18779
18780
18781
18782
18783
18784
18785
18786
18787
18788
18789
18790
18791
18792
18793
18794
18795
18796
18797
18798
18799
18800
18801
18802
18803
18804
18805
18806
18807
18808
18809
18810
18811
18812
18813
18814
18815
18816
18817
18818
18819
18820
18821
18822
18823
18824
18825
18826
18827
18828
18829
18830
18831
18832
18833
18834
18835
18836
18837
18838
18839
18840
18841
18842
18843
18844
18845
18846
18847
18848
18849
18850
18851
18852
18853
18854
18855
18856
18857
18858
18859
18860
18861
18862
18863
18864
18865
18866
18867
18868
18869
18870
18871
18872
18873
18874
18875
18876
18877
18878
18879
18880
18881
18882
18883
18884
18885
18886
18887
18888
18889
18890
18891
18892
18893
18894
18895
18896
18897
18898
18899
18900
18901
18902
18903
18904
18905
18906
18907
18908
18909
18910
18911
18912
18913
18914
18915
18916
18917
18918
18919
18920
18921
18922
18923
18924
18925
18926
18927
18928
18929
18930
18931
18932
18933
18934
18935
18936
18937
18938
18939
18940
18941
18942
18943
18944
18945
18946
18947
18948
18949
18950
18951
18952
18953
18954
18955
18956
18957
18958
18959
18960
18961
18962
18963
18964
18965
18966
18967
18968
18969
18970
18971
18972
18973
18974
18975
18976
18977
18978
18979
18980
18981
18982
18983
18984
18985
18986
18987
18988
18989
18990
18991
18992
18993
18994
18995
18996
18997
18998
18999
19000
19001
19002
19003
19004
19005
19006
19007
19008
19009
19010
19011
19012
19013
19014
19015
19016
19017
19018
19019
19020
19021
19022
19023
19024
19025
19026
19027
19028
19029
19030
19031
19032
19033
19034
19035
19036
19037
19038
19039
19040
19041
19042
19043
19044
19045
19046
19047
19048
19049
19050
19051
19052
19053
19054
19055
19056
19057
19058
19059
19060
19061
19062
19063
19064
19065
19066
19067
19068
19069
19070
19071
19072
19073
19074
19075
19076
19077
19078
19079
19080
19081
19082
19083
19084
19085
19086
19087
19088
19089
19090
19091
19092
19093
19094
19095
19096
19097
19098
19099
19100
19101
19102
19103
19104
19105
19106
19107
19108
19109
19110
19111
19112
19113
19114
19115
19116
19117
19118
19119
19120
19121
19122
19123
19124
19125
19126
19127
19128
19129
19130
19131
19132
19133
19134
19135
19136
19137
19138
19139
19140
19141
19142
19143
19144
19145
19146
19147
19148
19149
19150
19151
19152
19153
19154
19155
19156
19157
19158
19159
19160
19161
19162
19163
19164
19165
19166
19167
19168
19169
19170
19171
19172
19173
19174
19175
19176
19177
19178
19179
19180
19181
19182
19183
19184
19185
19186
19187
19188
19189
19190
19191
19192
19193
19194
19195
19196
19197
19198
19199
19200
19201
19202
19203
19204
19205
19206
19207
19208
19209
19210
19211
19212
19213
19214
19215
19216
19217
19218
19219
19220
19221
19222
19223
19224
19225
19226
19227
19228
19229
19230
19231
19232
19233
19234
19235
19236
19237
19238
19239
19240
19241
19242
19243
19244
19245
19246
19247
19248
19249
19250
19251
19252
19253
19254
19255
19256
19257
19258
19259
19260
19261
19262
19263
19264
19265
19266
19267
19268
19269
19270
19271
19272
19273
19274
19275
19276
19277
19278
19279
19280
19281
19282
19283
19284
19285
19286
19287
19288
19289
19290
19291
19292
19293
19294
19295
19296
19297
19298
19299
19300
19301
19302
19303
19304
19305
19306
19307
19308
19309
19310
19311
19312
19313
19314
19315
19316
19317
19318
19319
19320
19321
19322
19323
19324
19325
19326
19327
19328
19329
19330
19331
19332
19333
19334
19335
19336
19337
19338
19339
19340
19341
19342
19343
19344
19345
19346
19347
19348
19349
19350
19351
19352
19353
19354
19355
19356
19357
19358
19359
19360
19361
19362
19363
19364
19365
19366
19367
19368
19369
19370
19371
19372
19373
19374
19375
19376
19377
19378
19379
19380
19381
19382
19383
19384
19385
19386
19387
19388
19389
19390
19391
19392
19393
19394
19395
19396
19397
19398
19399
19400
19401
19402
19403
19404
19405
19406
19407
19408
19409
19410
19411
19412
19413
19414
19415
19416
19417
19418
19419
19420
19421
19422
19423
19424
19425
19426
19427
19428
19429
19430
19431
19432
19433
19434
19435
19436
19437
19438
19439
19440
19441
19442
19443
19444
19445
19446
19447
19448
19449
19450
19451
19452
19453
19454
19455
19456
19457
19458
19459
19460
19461
19462
19463
19464
19465
19466
19467
19468
19469
19470
19471
19472
19473
19474
19475
19476
19477
19478
19479
19480
19481
19482
19483
19484
19485
19486
19487
19488
19489
19490
19491
19492
19493
19494
19495
19496
19497
19498
19499
19500
19501
19502
19503
19504
19505
19506
19507
19508
19509
19510
19511
19512
19513
19514
19515
19516
19517
19518
19519
19520
19521
19522
19523
19524
19525
19526
19527
19528
19529
19530
19531
19532
19533
19534
19535
19536
19537
19538
19539
19540
19541
19542
19543
19544
19545
19546
19547
19548
19549
19550
19551
19552
19553
19554
19555
19556
19557
19558
19559
19560
19561
19562
19563
19564
19565
19566
19567
19568
19569
19570
19571
19572
19573
19574
19575
19576
19577
19578
19579
19580
19581
19582
19583
19584
19585
19586
19587
19588
19589
19590
19591
19592
19593
19594
19595
19596
19597
19598
19599
19600
19601
19602
19603
19604
19605
19606
19607
19608
19609
19610
19611
19612
19613
19614
19615
19616
19617
19618
19619
19620
19621
19622
19623
19624
19625
19626
19627
19628
19629
19630
19631
19632
19633
19634
19635
19636
19637
19638
19639
19640
19641
19642
19643
19644
19645
19646
19647
19648
19649
19650
19651
19652
19653
19654
19655
19656
19657
19658
19659
19660
19661
19662
19663
19664
19665
19666
19667
19668
19669
19670
19671
19672
19673
19674
19675
19676
19677
19678
19679
19680
19681
19682
19683
19684
19685
19686
19687
19688
19689
19690
19691
19692
19693
19694
19695
19696
19697
19698
19699
19700
19701
19702
19703
19704
19705
19706
19707
19708
19709
19710
19711
19712
19713
19714
19715
19716
19717
19718
19719
19720
19721
19722
19723
19724
19725
19726
19727
19728
19729
19730
19731
19732
19733
19734
19735
19736
19737
19738
19739
19740
19741
19742
19743
19744
19745
19746
19747
19748
19749
19750
19751
19752
19753
19754
19755
19756
19757
19758
19759
19760
19761
19762
19763
19764
19765
19766
19767
19768
19769
19770
19771
19772
19773
19774
19775
19776
19777
19778
19779
19780
19781
19782
19783
19784
19785
19786
19787
19788
19789
19790
19791
19792
19793
19794
19795
19796
19797
19798
19799
19800
19801
19802
19803
19804
19805
19806
19807
19808
19809
19810
19811
19812
19813
19814
19815
19816
19817
19818
19819
19820
19821
19822
19823
19824
19825
19826
19827
19828
19829
19830
19831
19832
19833
19834
19835
19836
19837
19838
19839
19840
19841
19842
19843
19844
19845
19846
19847
19848
19849
19850
19851
19852
19853
19854
19855
19856
19857
19858
19859
19860
19861
19862
19863
19864
19865
19866
19867
19868
19869
19870
19871
19872
19873
19874
19875
19876
19877
19878
19879
19880
19881
19882
19883
19884
19885
19886
19887
19888
19889
19890
19891
19892
19893
19894
19895
19896
19897
19898
19899
19900
19901
19902
19903
19904
19905
19906
19907
19908
19909
19910
19911
19912
19913
19914
19915
19916
19917
19918
19919
19920
19921
19922
19923
19924
19925
19926
19927
19928
19929
19930
19931
19932
19933
19934
19935
19936
19937
19938
19939
19940
19941
19942
19943
19944
19945
19946
19947
19948
19949
19950
19951
19952
19953
19954
19955
19956
19957
19958
19959
19960
19961
19962
19963
19964
19965
19966
19967
19968
19969
19970
19971
19972
19973
19974
19975
19976
19977
19978
19979
19980
19981
19982
19983
19984
19985
19986
19987
19988
19989
19990
19991
19992
19993
19994
19995
19996
19997
19998
19999
20000
20001
20002
20003
20004
20005
20006
20007
20008
20009
20010
20011
20012
20013
20014
20015
20016
20017
20018
20019
20020
20021
20022
20023
20024
20025
20026
20027
20028
20029
20030
20031
20032
20033
20034
20035
20036
20037
20038
20039
20040
20041
20042
20043
20044
20045
20046
20047
20048
20049
20050
20051
20052
20053
20054
20055
20056
20057
20058
20059
20060
20061
20062
20063
20064
20065
20066
20067
20068
20069
20070
20071
20072
20073
20074
20075
20076
20077
20078
20079
20080
20081
20082
20083
20084
20085
20086
20087
20088
20089
20090
20091
20092
20093
20094
20095
20096
20097
20098
20099
20100
20101
20102
20103
20104
20105
20106
20107
20108
20109
20110
20111
20112
20113
20114
20115
20116
20117
20118
20119
20120
20121
20122
20123
20124
20125
20126
20127
20128
20129
20130
20131
20132
20133
20134
20135
20136
20137
20138
20139
20140
20141
20142
20143
20144
20145
20146
20147
20148
20149
20150
20151
20152
20153
20154
20155
20156
20157
20158
20159
20160
20161
20162
20163
20164
20165
20166
20167
20168
20169
20170
20171
20172
20173
20174
20175
20176
20177
20178
20179
20180
20181
20182
20183
20184
20185
20186
20187
20188
20189
20190
20191
20192
20193
20194
20195
20196
20197
20198
20199
20200
20201
20202
20203
20204
20205
20206
20207
20208
20209
20210
20211
20212
20213
20214
20215
20216
20217
20218
20219
20220
20221
20222
20223
20224
20225
20226
20227
20228
20229
20230
20231
20232
20233
20234
20235
20236
20237
20238
20239
20240
20241
20242
20243
20244
20245
20246
20247
20248
20249
20250
20251
20252
20253
20254
20255
20256
20257
20258
20259
20260
20261
20262
20263
20264
20265
20266
20267
20268
20269
20270
20271
20272
20273
20274
20275
20276
20277
20278
20279
20280
20281
20282
20283
20284
20285
20286
20287
20288
20289
20290
20291
20292
20293
20294
20295
20296
20297
20298
20299
20300
20301
20302
20303
20304
20305
20306
20307
20308
20309
20310
20311
20312
20313
20314
20315
20316
20317
20318
20319
20320
20321
20322
20323
20324
20325
20326
20327
20328
20329
20330
20331
20332
20333
20334
20335
20336
20337
20338
20339
20340
20341
20342
20343
20344
20345
20346
20347
20348
20349
20350
20351
20352
20353
20354
20355
20356
20357
20358
20359
20360
20361
20362
20363
20364
20365
20366
20367
20368
20369
20370
20371
20372
20373
20374
20375
20376
20377
20378
20379
20380
20381
20382
20383
20384
20385
20386
20387
20388
20389
20390
20391
20392
20393
20394
20395
20396
20397
20398
20399
20400
20401
20402
20403
20404
20405
20406
20407
20408
20409
20410
20411
20412
20413
20414
20415
20416
20417
20418
20419
20420
20421
20422
20423
20424
20425
20426
20427
20428
20429
20430
20431
20432
20433
20434
20435
20436
20437
20438
20439
20440
20441
20442
20443
20444
20445
20446
20447
20448
20449
20450
20451
20452
20453
20454
20455
20456
20457
20458
20459
20460
20461
20462
20463
20464
20465
20466
20467
20468
20469
20470
20471
20472
20473
20474
20475
20476
20477
20478
20479
20480
20481
20482
20483
20484
20485
20486
20487
20488
20489
20490
20491
20492
20493
20494
20495
20496
20497
20498
20499
20500
20501
20502
20503
20504
20505
20506
20507
20508
20509
20510
20511
20512
20513
20514
20515
20516
20517
20518
20519
20520
20521
20522
20523
20524
20525
20526
20527
20528
20529
20530
20531
20532
20533
20534
20535
20536
20537
20538
20539
20540
20541
20542
20543
20544
20545
20546
20547
20548
20549
20550
20551
20552
20553
20554
20555
20556
20557
20558
20559
20560
20561
20562
20563
20564
20565
20566
20567
20568
20569
20570
20571
20572
20573
20574
20575
20576
20577
20578
20579
20580
20581
20582
20583
20584
20585
20586
20587
20588
20589
20590
20591
20592
20593
20594
20595
20596
20597
20598
20599
20600
20601
20602
20603
20604
20605
20606
20607
20608
20609
20610
20611
20612
20613
20614
20615
20616
20617
20618
20619
20620
20621
20622
20623
20624
20625
20626
20627
20628
20629
20630
20631
20632
20633
20634
20635
20636
20637
20638
20639
20640
20641
20642
20643
20644
20645
20646
20647
20648
20649
20650
20651
20652
20653
20654
20655
20656
20657
20658
20659
20660
20661
20662
20663
20664
20665
20666
20667
20668
20669
20670
20671
20672
20673
20674
20675
20676
20677
20678
20679
20680
20681
20682
20683
20684
20685
20686
20687
20688
20689
20690
20691
20692
20693
20694
20695
20696
20697
20698
20699
20700
20701
20702
20703
20704
20705
20706
20707
20708
20709
20710
20711
20712
20713
20714
20715
20716
20717
20718
20719
20720
20721
20722
20723
20724
20725
20726
20727
20728
20729
20730
20731
20732
20733
20734
20735
20736
20737
20738
20739
20740
20741
20742
20743
20744
20745
20746
20747
20748
20749
20750
20751
20752
20753
20754
20755
20756
20757
20758
20759
20760
20761
20762
20763
20764
20765
20766
20767
20768
20769
20770
20771
20772
20773
20774
20775
20776
20777
20778
20779
20780
20781
20782
20783
20784
20785
20786
20787
20788
20789
20790
20791
20792
20793
20794
20795
20796
20797
20798
20799
20800
20801
20802
20803
20804
20805
20806
20807
20808
20809
20810
20811
20812
20813
20814
20815
20816
20817
20818
20819
20820
20821
20822
20823
20824
20825
20826
20827
20828
20829
20830
20831
20832
20833
20834
20835
20836
20837
20838
20839
20840
20841
20842
20843
20844
20845
20846
20847
20848
20849
20850
20851
20852
20853
20854
20855
20856
20857
20858
20859
20860
20861
20862
20863
20864
20865
20866
20867
20868
20869
20870
20871
20872
20873
20874
20875
20876
20877
20878
20879
20880
20881
20882
20883
20884
20885
20886
20887
20888
20889
20890
20891
20892
20893
20894
20895
20896
20897
20898
20899
20900
20901
20902
20903
20904
20905
20906
20907
20908
20909
20910
20911
20912
20913
20914
20915
20916
20917
20918
20919
20920
20921
20922
20923
20924
20925
20926
20927
20928
20929
20930
20931
20932
20933
20934
20935
20936
20937
20938
20939
20940
20941
20942
20943
20944
20945
20946
20947
20948
20949
20950
20951
20952
20953
20954
20955
20956
20957
20958
20959
20960
20961
20962
20963
20964
20965
20966
20967
20968
20969
20970
20971
20972
20973
20974
20975
20976
20977
20978
20979
20980
20981
20982
20983
20984
20985
20986
20987
20988
20989
20990
20991
20992
20993
20994
20995
20996
20997
20998
20999
21000
21001
21002
21003
21004
21005
21006
21007
21008
21009
21010
21011
21012
21013
21014
21015
21016
21017
21018
21019
21020
21021
21022
21023
21024
21025
21026
21027
21028
21029
21030
21031
21032
21033
21034
21035
21036
21037
21038
21039
21040
21041
21042
21043
21044
21045
21046
21047
21048
21049
21050
21051
21052
21053
21054
21055
21056
21057
21058
21059
21060
21061
21062
21063
21064
21065
21066
21067
21068
21069
21070
21071
21072
21073
21074
21075
21076
21077
21078
21079
21080
21081
21082
21083
21084
21085
21086
21087
21088
21089
21090
21091
21092
21093
21094
21095
21096
21097
21098
21099
21100
21101
21102
21103
21104
21105
21106
21107
21108
21109
21110
21111
21112
21113
21114
21115
21116
21117
21118
21119
21120
21121
21122
21123
21124
21125
21126
21127
21128
21129
21130
21131
21132
21133
21134
21135
21136
21137
21138
21139
21140
21141
21142
21143
21144
21145
21146
21147
21148
21149
21150
21151
21152
21153
21154
21155
21156
21157
21158
21159
21160
21161
21162
21163
21164
21165
21166
21167
21168
21169
21170
21171
21172
21173
21174
21175
21176
21177
21178
21179
21180
21181
21182
21183
21184
21185
21186
21187
21188
21189
21190
21191
21192
21193
21194
21195
21196
21197
21198
21199
21200
21201
21202
21203
21204
21205
21206
21207
21208
21209
21210
21211
21212
21213
21214
21215
21216
21217
21218
21219
21220
21221
21222
21223
21224
21225
21226
21227
21228
21229
21230
21231
21232
21233
21234
21235
21236
21237
21238
21239
21240
21241
21242
21243
21244
21245
21246
21247
21248
21249
21250
21251
21252
21253
21254
21255
21256
21257
21258
21259
21260
21261
21262
21263
21264
21265
21266
21267
21268
21269
21270
21271
21272
21273
21274
21275
21276
21277
21278
21279
21280
21281
21282
21283
21284
21285
21286
21287
21288
21289
21290
21291
21292
21293
21294
21295
21296
21297
21298
21299
21300
21301
21302
21303
21304
21305
21306
21307
21308
21309
21310
21311
21312
21313
21314
21315
21316
21317
21318
21319
21320
21321
21322
21323
21324
21325
21326
21327
21328
21329
21330
21331
21332
21333
21334
21335
21336
21337
21338
21339
21340
21341
21342
21343
21344
21345
21346
21347
21348
21349
21350
21351
21352
21353
21354
21355
21356
21357
21358
21359
21360
21361
21362
21363
21364
21365
21366
21367
21368
21369
21370
21371
21372
21373
21374
21375
21376
21377
21378
21379
21380
21381
21382
21383
21384
21385
21386
21387
21388
21389
21390
21391
21392
21393
21394
21395
21396
21397
21398
21399
21400
21401
21402
21403
21404
21405
21406
21407
21408
21409
21410
21411
21412
21413
21414
21415
21416
21417
21418
21419
21420
21421
21422
21423
21424
21425
21426
21427
21428
21429
21430
21431
21432
21433
21434
21435
21436
21437
21438
21439
21440
21441
21442
21443
21444
21445
21446
21447
21448
21449
21450
21451
21452
21453
21454
21455
21456
21457
21458
21459
21460
21461
21462
21463
21464
21465
21466
21467
21468
21469
21470
21471
21472
21473
21474
21475
21476
21477
21478
21479
21480
21481
21482
21483
21484
21485
21486
21487
21488
21489
21490
21491
21492
21493
21494
21495
21496
21497
21498
21499
21500
21501
21502
21503
21504
21505
21506
21507
21508
21509
21510
21511
21512
21513
21514
21515
21516
21517
21518
21519
21520
21521
21522
21523
21524
21525
21526
21527
21528
21529
21530
21531
21532
21533
21534
21535
21536
21537
21538
21539
21540
21541
21542
21543
21544
21545
21546
21547
21548
21549
21550
21551
21552
21553
21554
21555
21556
21557
21558
21559
21560
21561
21562
21563
21564
21565
21566
21567
21568
21569
21570
21571
21572
21573
21574
21575
21576
21577
21578
21579
21580
21581
21582
21583
21584
21585
21586
21587
21588
21589
21590
21591
21592
21593
21594
21595
21596
21597
21598
21599
21600
21601
21602
21603
21604
21605
21606
21607
21608
21609
21610
21611
21612
21613
21614
21615
21616
21617
21618
21619
21620
21621
21622
21623
21624
21625
21626
21627
21628
21629
21630
21631
21632
21633
21634
21635
21636
21637
21638
21639
21640
21641
21642
21643
21644
21645
21646
21647
21648
21649
21650
21651
21652
21653
21654
21655
21656
21657
21658
21659
21660
21661
21662
21663
21664
21665
21666
21667
21668
21669
21670
21671
21672
21673
21674
21675
21676
21677
21678
21679
21680
21681
21682
21683
21684
21685
21686
21687
21688
21689
21690
21691
21692
21693
21694
21695
21696
21697
21698
21699
21700
21701
21702
21703
21704
21705
21706
21707
21708
21709
21710
21711
21712
21713
21714
21715
21716
21717
21718
21719
21720
21721
21722
21723
21724
21725
21726
21727
21728
21729
21730
21731
21732
21733
21734
21735
21736
21737
21738
21739
21740
21741
21742
21743
21744
21745
21746
21747
21748
21749
21750
21751
21752
21753
21754
21755
21756
21757
21758
21759
21760
21761
21762
21763
21764
21765
21766
21767
21768
21769
21770
21771
21772
21773
21774
21775
21776
21777
21778
21779
21780
21781
21782
21783
21784
21785
21786
21787
21788
21789
21790
21791
21792
21793
21794
21795
21796
21797
21798
21799
21800
21801
21802
21803
21804
21805
21806
21807
21808
21809
21810
21811
21812
21813
21814
21815
21816
21817
21818
21819
21820
21821
21822
21823
21824
21825
21826
21827
21828
21829
21830
21831
21832
21833
21834
21835
21836
21837
21838
21839
21840
21841
21842
21843
21844
21845
21846
21847
21848
21849
21850
21851
21852
21853
21854
21855
21856
21857
21858
21859
21860
21861
21862
21863
21864
21865
21866
21867
21868
21869
21870
21871
21872
21873
21874
21875
21876
21877
21878
21879
21880
21881
21882
21883
21884
21885
21886
21887
21888
21889
21890
21891
21892
21893
21894
21895
21896
21897
21898
21899
21900
21901
21902
21903
21904
21905
21906
21907
21908
21909
21910
21911
21912
21913
21914
21915
21916
21917
21918
21919
21920
21921
21922
21923
21924
21925
21926
21927
21928
21929
21930
21931
21932
21933
21934
21935
21936
21937
21938
21939
21940
21941
21942
21943
21944
21945
21946
21947
21948
21949
21950
21951
21952
21953
21954
21955
21956
21957
21958
21959
21960
21961
21962
21963
21964
21965
21966
21967
21968
21969
21970
21971
21972
21973
21974
21975
21976
21977
21978
21979
21980
21981
21982
21983
21984
21985
21986
21987
21988
21989
21990
21991
21992
21993
21994
21995
21996
21997
21998
21999
22000
22001
22002
22003
22004
22005
22006
22007
22008
22009
22010
22011
22012
22013
22014
22015
22016
22017
22018
22019
22020
22021
22022
22023
22024
22025
22026
22027
22028
22029
22030
22031
22032
22033
22034
22035
22036
22037
22038
22039
22040
22041
22042
22043
22044
22045
22046
22047
22048
22049
22050
22051
22052
22053
22054
22055
22056
22057
22058
22059
22060
22061
22062
22063
22064
22065
22066
22067
22068
22069
22070
22071
22072
22073
22074
22075
22076
22077
22078
22079
22080
22081
22082
22083
22084
22085
22086
22087
22088
22089
22090
22091
22092
22093
22094
22095
22096
22097
22098
22099
22100
22101
22102
22103
22104
22105
22106
22107
22108
22109
22110
22111
22112
22113
22114
22115
22116
22117
22118
22119
22120
22121
22122
22123
22124
22125
22126
22127
22128
22129
22130
22131
22132
22133
22134
22135
22136
22137
22138
22139
22140
22141
22142
22143
22144
22145
22146
22147
22148
22149
22150
22151
22152
22153
22154
22155
22156
22157
22158
22159
22160
22161
22162
22163
22164
22165
22166
22167
22168
22169
22170
22171
22172
22173
22174
22175
22176
22177
22178
22179
22180
22181
22182
22183
22184
22185
22186
22187
22188
22189
22190
22191
22192
22193
22194
22195
22196
22197
22198
22199
22200
22201
22202
22203
22204
22205
22206
22207
22208
22209
22210
22211
22212
22213
22214
22215
22216
22217
22218
22219
22220
22221
22222
22223
22224
22225
22226
22227
22228
22229
22230
22231
22232
22233
22234
22235
22236
22237
22238
22239
22240
22241
22242
22243
22244
22245
22246
22247
22248
22249
22250
22251
22252
22253
22254
22255
22256
22257
22258
22259
22260
22261
22262
22263
22264
22265
22266
22267
22268
22269
22270
22271
22272
22273
22274
22275
22276
22277
22278
22279
22280
22281
22282
22283
22284
22285
22286
22287
22288
22289
22290
22291
22292
22293
22294
22295
22296
22297
22298
22299
22300
22301
22302
22303
22304
22305
22306
22307
22308
22309
22310
22311
22312
22313
22314
22315
22316
22317
22318
22319
22320
22321
22322
22323
22324
22325
22326
22327
22328
22329
22330
22331
22332
22333
22334
22335
22336
22337
22338
22339
22340
22341
22342
22343
22344
22345
22346
22347
22348
22349
22350
22351
22352
22353
22354
22355
22356
22357
22358
22359
22360
22361
22362
22363
22364
22365
22366
22367
22368
22369
22370
22371
22372
22373
22374
22375
22376
22377
22378
22379
22380
22381
22382
22383
22384
22385
22386
22387
22388
22389
22390
22391
22392
22393
22394
22395
22396
22397
22398
22399
22400
22401
22402
22403
22404
22405
22406
22407
22408
22409
22410
22411
22412
22413
22414
22415
22416
22417
22418
22419
22420
22421
22422
22423
22424
22425
22426
22427
22428
22429
22430
22431
22432
22433
22434
22435
22436
22437
22438
22439
22440
22441
22442
22443
22444
22445
22446
22447
22448
22449
22450
22451
22452
22453
22454
22455
22456
22457
22458
22459
22460
22461
22462
22463
22464
22465
22466
22467
22468
22469
22470
22471
22472
22473
22474
22475
22476
22477
22478
22479
22480
22481
22482
22483
22484
22485
22486
22487
22488
22489
22490
22491
22492
22493
22494
22495
22496
22497
22498
22499
22500
22501
22502
22503
22504
22505
22506
22507
22508
22509
22510
22511
22512
22513
22514
22515
22516
22517
22518
22519
22520
22521
22522
22523
22524
22525
22526
22527
22528
22529
22530
22531
22532
22533
22534
22535
22536
22537
22538
22539
22540
22541
22542
22543
22544
22545
22546
22547
22548
22549
22550
22551
22552
22553
22554
22555
22556
22557
22558
22559
22560
22561
22562
22563
22564
22565
22566
22567
22568
22569
22570
22571
22572
22573
22574
22575
22576
22577
22578
22579
22580
22581
22582
22583
22584
22585
22586
22587
22588
22589
22590
22591
22592
22593
22594
22595
22596
22597
22598
22599
22600
22601
22602
22603
22604
22605
22606
22607
22608
22609
22610
22611
22612
22613
22614
22615
22616
22617
22618
22619
22620
22621
22622
22623
22624
22625
22626
22627
22628
22629
22630
22631
22632
22633
22634
22635
22636
22637
22638
22639
22640
22641
22642
22643
22644
22645
22646
22647
22648
22649
22650
22651
22652
22653
22654
22655
22656
22657
22658
22659
22660
22661
22662
22663
22664
22665
22666
22667
22668
22669
22670
22671
22672
22673
22674
22675
22676
22677
22678
22679
22680
22681
22682
22683
22684
22685
22686
22687
22688
22689
22690
22691
22692
22693
22694
22695
22696
22697
22698
22699
22700
22701
22702
22703
22704
22705
22706
22707
22708
22709
22710
22711
22712
22713
22714
22715
22716
22717
22718
22719
22720
22721
22722
22723
22724
22725
22726
22727
22728
22729
22730
22731
22732
22733
22734
22735
22736
22737
22738
22739
22740
22741
22742
22743
22744
22745
22746
22747
22748
22749
22750
22751
22752
22753
22754
22755
22756
22757
22758
22759
22760
22761
22762
22763
22764
22765
22766
22767
22768
22769
22770
22771
22772
22773
22774
22775
22776
22777
22778
22779
22780
22781
22782
22783
22784
22785
22786
22787
22788
22789
22790
22791
22792
22793
22794
22795
22796
22797
22798
22799
22800
22801
22802
22803
22804
22805
22806
22807
22808
22809
22810
22811
22812
22813
22814
22815
22816
22817
22818
22819
22820
22821
22822
22823
22824
22825
22826
22827
22828
22829
22830
22831
22832
22833
22834
22835
22836
22837
22838
22839
22840
22841
22842
22843
22844
22845
22846
22847
22848
22849
22850
22851
22852
22853
22854
22855
22856
22857
22858
22859
22860
22861
22862
22863
22864
22865
22866
22867
22868
22869
22870
22871
22872
22873
22874
22875
22876
22877
22878
22879
22880
22881
22882
22883
22884
22885
22886
22887
22888
22889
22890
22891
22892
22893
22894
22895
22896
22897
22898
22899
22900
22901
22902
22903
22904
22905
22906
22907
22908
22909
22910
22911
22912
22913
22914
22915
22916
22917
22918
22919
22920
22921
22922
22923
22924
22925
22926
22927
22928
22929
22930
22931
22932
22933
22934
22935
22936
22937
22938
22939
22940
22941
22942
22943
22944
22945
22946
22947
22948
22949
22950
22951
22952
22953
22954
22955
22956
22957
22958
22959
22960
22961
22962
22963
22964
22965
22966
22967
22968
22969
22970
22971
22972
22973
22974
22975
22976
22977
22978
22979
22980
22981
22982
22983
22984
22985
22986
22987
22988
22989
22990
22991
22992
22993
22994
22995
22996
22997
22998
22999
23000
23001
23002
23003
23004
23005
23006
23007
23008
23009
23010
23011
23012
23013
23014
23015
23016
23017
23018
23019
23020
23021
23022
23023
23024
23025
23026
23027
23028
23029
23030
23031
23032
23033
23034
23035
23036
23037
23038
23039
23040
23041
23042
23043
23044
23045
23046
23047
23048
23049
23050
23051
23052
23053
23054
23055
23056
23057
23058
23059
23060
23061
23062
23063
23064
23065
23066
23067
23068
23069
23070
23071
23072
23073
23074
23075
23076
23077
23078
23079
23080
23081
23082
23083
23084
23085
23086
23087
23088
23089
23090
23091
23092
23093
23094
23095
23096
23097
23098
23099
23100
23101
23102
23103
23104
23105
23106
23107
23108
23109
23110
23111
23112
23113
23114
23115
23116
23117
23118
23119
23120
23121
23122
23123
23124
23125
23126
23127
23128
23129
23130
23131
23132
23133
23134
23135
23136
23137
23138
23139
23140
23141
23142
23143
23144
23145
23146
23147
23148
23149
23150
23151
23152
23153
23154
23155
23156
23157
23158
23159
23160
23161
23162
23163
23164
23165
23166
23167
23168
23169
23170
23171
23172
23173
23174
23175
23176
23177
23178
23179
23180
23181
23182
23183
23184
23185
23186
23187
23188
23189
23190
23191
23192
23193
23194
23195
23196
23197
23198
23199
23200
23201
23202
23203
23204
23205
23206
23207
23208
23209
23210
23211
23212
23213
23214
23215
23216
23217
23218
23219
23220
23221
23222
23223
23224
23225
23226
23227
23228
23229
23230
23231
23232
23233
23234
23235
23236
23237
23238
23239
23240
23241
23242
23243
23244
23245
23246
23247
23248
23249
23250
23251
23252
23253
23254
23255
23256
23257
23258
23259
23260
23261
23262
23263
23264
23265
23266
23267
23268
23269
23270
23271
23272
23273
23274
23275
23276
23277
23278
23279
23280
23281
23282
23283
23284
23285
23286
23287
23288
23289
23290
23291
23292
23293
23294
23295
23296
23297
23298
23299
23300
23301
23302
23303
23304
23305
23306
23307
23308
23309
23310
23311
23312
23313
23314
23315
23316
23317
23318
23319
23320
23321
23322
23323
23324
23325
23326
23327
23328
23329
23330
23331
23332
23333
23334
23335
23336
23337
23338
23339
23340
23341
23342
23343
23344
23345
23346
23347
23348
23349
23350
23351
23352
23353
23354
23355
23356
23357
23358
23359
23360
23361
23362
23363
23364
23365
23366
23367
23368
23369
23370
23371
23372
23373
23374
23375
23376
23377
23378
23379
23380
23381
23382
23383
23384
23385
23386
23387
23388
23389
23390
23391
23392
23393
23394
23395
23396
23397
23398
23399
23400
23401
23402
23403
23404
23405
23406
23407
23408
23409
23410
23411
23412
23413
23414
23415
23416
23417
23418
23419
23420
23421
23422
23423
23424
23425
23426
23427
23428
23429
23430
23431
23432
23433
23434
23435
23436
23437
23438
23439
23440
23441
23442
23443
23444
23445
23446
23447
23448
23449
23450
23451
23452
23453
23454
23455
23456
23457
23458
23459
23460
23461
23462
23463
23464
23465
23466
23467
23468
23469
23470
23471
23472
23473
23474
23475
23476
23477
23478
23479
23480
23481
23482
23483
23484
23485
23486
23487
23488
23489
23490
23491
23492
23493
23494
23495
23496
23497
23498
23499
23500
23501
23502
23503
23504
23505
23506
23507
23508
23509
23510
23511
23512
23513
23514
23515
23516
23517
23518
23519
23520
23521
23522
23523
23524
23525
23526
23527
23528
23529
23530
23531
23532
23533
23534
23535
23536
23537
23538
23539
23540
23541
23542
23543
23544
23545
23546
23547
23548
23549
23550
23551
23552
23553
23554
23555
23556
23557
23558
23559
23560
23561
23562
23563
23564
23565
23566
23567
23568
23569
23570
23571
23572
23573
23574
23575
23576
23577
23578
23579
23580
23581
23582
23583
23584
23585
23586
23587
23588
23589
23590
23591
23592
23593
23594
23595
23596
23597
23598
23599
23600
23601
23602
23603
23604
23605
23606
23607
23608
23609
23610
23611
23612
23613
23614
23615
23616
23617
23618
23619
23620
23621
23622
23623
23624
23625
23626
23627
23628
23629
23630
23631
23632
23633
23634
23635
23636
23637
23638
23639
23640
23641
23642
23643
23644
23645
23646
23647
23648
23649
23650
23651
23652
23653
23654
23655
23656
23657
23658
23659
23660
23661
23662
23663
23664
23665
23666
23667
23668
23669
23670
23671
23672
23673
23674
23675
23676
23677
23678
23679
23680
23681
23682
23683
23684
23685
23686
23687
23688
23689
23690
23691
23692
23693
23694
23695
23696
23697
23698
23699
23700
23701
23702
23703
23704
23705
23706
23707
23708
23709
23710
23711
23712
23713
23714
23715
23716
23717
23718
23719
23720
23721
23722
23723
23724
23725
23726
23727
23728
23729
23730
23731
23732
23733
23734
23735
23736
23737
23738
23739
23740
23741
23742
23743
23744
23745
23746
23747
23748
23749
23750
23751
23752
23753
23754
23755
23756
23757
23758
23759
23760
23761
23762
23763
23764
23765
23766
23767
23768
23769
23770
23771
23772
23773
23774
23775
23776
23777
23778
23779
23780
23781
23782
23783
23784
23785
23786
23787
23788
23789
23790
23791
23792
23793
23794
23795
23796
23797
23798
23799
23800
23801
23802
23803
23804
23805
23806
23807
23808
23809
23810
23811
23812
23813
23814
23815
23816
23817
23818
23819
23820
23821
23822
23823
23824
23825
23826
23827
23828
23829
23830
23831
23832
23833
23834
23835
23836
23837
23838
23839
23840
23841
23842
23843
23844
23845
23846
23847
23848
23849
23850
23851
23852
23853
23854
23855
23856
23857
23858
23859
23860
23861
23862
23863
23864
23865
23866
23867
23868
23869
23870
23871
23872
23873
23874
23875
23876
23877
23878
23879
23880
23881
23882
23883
23884
23885
23886
23887
23888
23889
23890
23891
23892
23893
23894
23895
23896
23897
23898
23899
23900
23901
23902
23903
23904
23905
23906
23907
23908
23909
23910
23911
23912
23913
23914
23915
23916
23917
23918
23919
23920
23921
23922
23923
23924
23925
23926
23927
23928
23929
23930
23931
23932
23933
23934
23935
23936
23937
23938
23939
23940
23941
23942
23943
23944
23945
23946
23947
23948
23949
23950
23951
23952
23953
23954
23955
23956
23957
23958
23959
23960
23961
23962
23963
23964
23965
23966
23967
23968
23969
23970
23971
23972
23973
23974
23975
23976
23977
23978
23979
23980
23981
23982
23983
23984
23985
23986
23987
23988
23989
23990
23991
23992
23993
23994
23995
23996
23997
23998
23999
24000
24001
24002
24003
24004
24005
24006
24007
24008
24009
24010
24011
24012
24013
24014
24015
24016
24017
24018
24019
24020
24021
24022
24023
24024
24025
24026
24027
24028
24029
24030
24031
24032
24033
24034
24035
24036
24037
24038
24039
24040
24041
24042
24043
24044
24045
24046
24047
24048
24049
24050
24051
24052
24053
24054
24055
24056
24057
24058
24059
24060
24061
24062
24063
24064
24065
24066
24067
24068
24069
24070
24071
24072
24073
24074
24075
24076
24077
24078
24079
24080
24081
24082
24083
24084
24085
24086
24087
24088
24089
24090
24091
24092
24093
24094
24095
24096
24097
24098
24099
24100
24101
24102
24103
24104
24105
24106
24107
24108
24109
24110
24111
24112
24113
24114
24115
24116
24117
24118
24119
24120
24121
24122
24123
24124
24125
24126
24127
24128
24129
24130
24131
24132
24133
24134
24135
24136
24137
24138
24139
24140
24141
24142
24143
24144
24145
24146
24147
24148
24149
24150
24151
24152
24153
24154
24155
24156
24157
24158
24159
24160
24161
24162
24163
24164
24165
24166
24167
24168
24169
24170
24171
24172
24173
24174
24175
24176
24177
24178
24179
24180
24181
24182
24183
24184
24185
24186
24187
24188
24189
24190
24191
24192
24193
24194
24195
24196
24197
24198
24199
24200
24201
24202
24203
24204
24205
24206
24207
24208
24209
24210
24211
24212
24213
24214
24215
24216
24217
24218
24219
24220
24221
24222
24223
24224
24225
24226
24227
24228
24229
24230
24231
24232
24233
24234
24235
24236
24237
24238
24239
24240
24241
24242
24243
24244
24245
24246
24247
24248
24249
24250
24251
24252
24253
24254
24255
24256
24257
24258
24259
24260
24261
24262
24263
24264
24265
24266
24267
24268
24269
24270
24271
24272
24273
24274
24275
24276
24277
24278
24279
24280
24281
24282
24283
24284
24285
24286
24287
24288
24289
24290
24291
24292
24293
24294
24295
24296
24297
24298
24299
24300
24301
24302
24303
24304
24305
24306
24307
24308
24309
24310
24311
24312
24313
24314
24315
24316
24317
24318
24319
24320
24321
24322
24323
24324
24325
24326
24327
24328
24329
24330
24331
24332
24333
24334
24335
24336
24337
24338
24339
24340
24341
24342
24343
24344
24345
24346
24347
24348
24349
24350
24351
24352
24353
24354
24355
24356
24357
24358
24359
24360
24361
24362
24363
24364
24365
24366
24367
24368
24369
24370
24371
24372
24373
24374
24375
24376
24377
24378
24379
24380
24381
24382
24383
24384
24385
24386
24387
24388
24389
24390
24391
24392
24393
24394
24395
24396
24397
24398
24399
24400
24401
24402
24403
24404
24405
24406
24407
24408
24409
24410
24411
24412
24413
24414
24415
24416
24417
24418
24419
24420
24421
24422
24423
24424
24425
24426
24427
24428
24429
24430
24431
24432
24433
24434
24435
24436
24437
24438
24439
24440
24441
24442
24443
24444
24445
24446
24447
24448
24449
24450
24451
24452
24453
24454
24455
24456
24457
24458
24459
24460
24461
24462
24463
24464
24465
24466
24467
24468
24469
24470
24471
24472
24473
24474
24475
24476
24477
24478
24479
24480
24481
24482
24483
24484
24485
24486
24487
24488
24489
24490
24491
24492
24493
24494
24495
24496
24497
24498
24499
24500
24501
24502
24503
24504
24505
24506
24507
24508
24509
24510
24511
24512
24513
24514
24515
24516
24517
24518
24519
24520
24521
24522
24523
24524
24525
24526
24527
24528
24529
24530
24531
24532
24533
24534
24535
24536
24537
24538
24539
24540
24541
24542
24543
24544
24545
24546
24547
24548
24549
24550
24551
24552
24553
24554
24555
24556
24557
24558
24559
24560
24561
24562
24563
24564
24565
24566
24567
24568
24569
24570
24571
24572
24573
24574
24575
24576
24577
24578
24579
24580
24581
24582
24583
24584
24585
24586
24587
24588
24589
24590
24591
24592
24593
24594
24595
24596
24597
24598
24599
24600
24601
24602
24603
24604
24605
24606
24607
24608
24609
24610
24611
24612
24613
24614
24615
24616
24617
24618
24619
24620
24621
24622
24623
24624
24625
24626
24627
24628
24629
24630
24631
24632
24633
24634
24635
24636
24637
24638
24639
24640
24641
24642
24643
24644
24645
24646
24647
24648
24649
24650
24651
24652
24653
24654
24655
24656
24657
24658
24659
24660
24661
24662
24663
24664
24665
24666
24667
24668
24669
24670
24671
24672
24673
24674
24675
24676
24677
24678
24679
24680
24681
24682
24683
24684
24685
24686
24687
24688
24689
24690
24691
24692
24693
24694
24695
24696
24697
24698
24699
24700
24701
24702
24703
24704
24705
24706
24707
24708
24709
24710
24711
24712
24713
24714
24715
24716
24717
24718
24719
24720
24721
24722
24723
24724
24725
24726
24727
24728
24729
24730
24731
24732
24733
24734
24735
24736
24737
24738
24739
24740
24741
24742
24743
24744
24745
24746
24747
24748
24749
24750
24751
24752
24753
24754
24755
24756
24757
24758
24759
24760
24761
24762
24763
24764
24765
24766
24767
24768
24769
24770
24771
24772
24773
24774
24775
24776
24777
24778
24779
24780
24781
24782
24783
24784
24785
24786
24787
24788
24789
24790
24791
24792
24793
24794
24795
24796
24797
24798
24799
24800
24801
24802
24803
24804
24805
24806
24807
24808
24809
24810
24811
24812
24813
24814
24815
24816
24817
24818
24819
24820
24821
24822
24823
24824
24825
24826
24827
24828
24829
24830
24831
24832
24833
24834
24835
24836
24837
24838
24839
24840
24841
24842
24843
24844
24845
24846
24847
24848
24849
24850
24851
24852
24853
24854
24855
24856
24857
24858
24859
24860
24861
24862
24863
24864
24865
24866
24867
24868
24869
24870
24871
24872
24873
24874
24875
24876
24877
24878
24879
24880
24881
24882
24883
24884
24885
24886
24887
24888
24889
24890
24891
24892
24893
24894
24895
24896
24897
24898
24899
24900
24901
24902
24903
24904
24905
24906
24907
24908
24909
24910
24911
24912
24913
24914
24915
24916
24917
24918
24919
24920
24921
24922
24923
24924
24925
24926
24927
24928
24929
24930
24931
24932
24933
24934
24935
24936
24937
24938
24939
24940
24941
24942
24943
24944
24945
24946
24947
24948
24949
24950
24951
24952
24953
24954
24955
24956
24957
24958
24959
24960
24961
24962
24963
24964
24965
24966
24967
24968
24969
24970
24971
24972
24973
24974
24975
24976
24977
24978
24979
24980
24981
24982
24983
24984
24985
24986
24987
24988
24989
24990
24991
24992
24993
24994
24995
24996
24997
24998
24999
25000
25001
25002
25003
25004
25005
25006
25007
25008
25009
25010
25011
25012
25013
25014
25015
25016
25017
25018
25019
25020
25021
25022
25023
25024
25025
25026
25027
25028
25029
25030
25031
25032
25033
25034
25035
25036
25037
25038
25039
25040
25041
25042
25043
25044
25045
25046
25047
25048
25049
25050
25051
25052
25053
25054
25055
25056
25057
25058
25059
25060
25061
25062
25063
25064
25065
25066
25067
25068
25069
25070
25071
25072
25073
25074
25075
25076
25077
25078
25079
25080
25081
25082
25083
25084
25085
25086
25087
25088
25089
25090
25091
25092
25093
25094
25095
25096
25097
25098
25099
25100
25101
25102
25103
25104
25105
25106
25107
25108
25109
25110
25111
25112
25113
25114
25115
25116
25117
25118
25119
25120
25121
25122
25123
25124
25125
25126
25127
25128
25129
25130
25131
25132
25133
25134
25135
25136
25137
25138
25139
25140
25141
25142
25143
25144
25145
25146
25147
25148
25149
25150
25151
25152
25153
25154
25155
25156
25157
25158
25159
25160
25161
25162
25163
25164
25165
25166
25167
25168
25169
25170
25171
25172
25173
25174
25175
25176
25177
25178
25179
25180
25181
25182
25183
25184
25185
25186
25187
25188
25189
25190
25191
25192
25193
25194
25195
25196
25197
25198
25199
25200
25201
25202
25203
25204
25205
25206
25207
25208
25209
25210
25211
25212
25213
25214
25215
25216
25217
25218
25219
25220
25221
25222
25223
25224
25225
25226
25227
25228
25229
25230
25231
25232
25233
25234
25235
25236
25237
25238
25239
25240
25241
25242
25243
25244
25245
25246
25247
25248
25249
25250
25251
25252
25253
25254
25255
25256
25257
25258
25259
25260
25261
25262
25263
25264
25265
25266
25267
25268
25269
25270
25271
25272
25273
25274
25275
25276
25277
25278
25279
25280
25281
25282
25283
25284
25285
25286
25287
25288
25289
25290
25291
25292
25293
25294
25295
25296
25297
25298
25299
25300
25301
25302
25303
25304
25305
25306
25307
25308
25309
25310
25311
25312
25313
25314
25315
25316
25317
25318
25319
25320
25321
25322
25323
25324
25325
25326
25327
25328
25329
25330
25331
25332
25333
25334
25335
25336
25337
25338
25339
25340
25341
25342
25343
25344
25345
25346
25347
25348
25349
25350
25351
25352
25353
25354
25355
25356
25357
25358
25359
25360
25361
25362
25363
25364
25365
25366
25367
25368
25369
25370
25371
25372
25373
25374
25375
25376
25377
25378
25379
25380
25381
25382
25383
25384
25385
25386
25387
25388
25389
25390
25391
25392
25393
25394
25395
25396
25397
25398
25399
25400
25401
25402
25403
25404
25405
25406
25407
25408
25409
25410
25411
25412
25413
25414
25415
25416
25417
25418
25419
25420
25421
25422
25423
25424
25425
25426
25427
25428
25429
25430
25431
25432
25433
25434
25435
25436
25437
25438
25439
25440
25441
25442
25443
25444
25445
25446
25447
25448
25449
25450
25451
25452
25453
25454
25455
25456
25457
25458
25459
25460
25461
25462
25463
25464
25465
25466
25467
25468
25469
25470
25471
25472
25473
25474
25475
25476
25477
25478
25479
25480
25481
25482
25483
25484
25485
25486
25487
25488
25489
25490
25491
25492
25493
25494
25495
25496
25497
25498
25499
25500
25501
25502
25503
25504
25505
25506
25507
25508
25509
25510
25511
25512
25513
25514
25515
25516
25517
25518
25519
25520
25521
25522
25523
25524
25525
25526
25527
25528
25529
25530
25531
25532
25533
25534
25535
25536
25537
25538
25539
25540
25541
25542
25543
25544
25545
25546
25547
25548
25549
25550
25551
25552
25553
25554
25555
25556
25557
25558
25559
25560
25561
25562
25563
25564
25565
25566
25567
25568
25569
25570
25571
25572
25573
25574
25575
25576
25577
25578
25579
25580
25581
25582
25583
25584
25585
25586
25587
25588
25589
25590
25591
25592
25593
25594
25595
25596
25597
25598
25599
25600
25601
25602
25603
25604
25605
25606
25607
25608
25609
25610
25611
25612
25613
25614
25615
25616
25617
25618
25619
25620
25621
25622
25623
25624
25625
25626
25627
25628
25629
25630
25631
25632
25633
25634
25635
25636
25637
25638
25639
25640
25641
25642
25643
25644
25645
25646
25647
25648
25649
25650
25651
25652
25653
25654
25655
25656
25657
25658
25659
25660
25661
25662
25663
25664
25665
25666
25667
25668
25669
25670
25671
25672
25673
25674
25675
25676
25677
25678
25679
25680
25681
25682
25683
25684
25685
25686
25687
25688
25689
25690
25691
25692
25693
25694
25695
25696
25697
25698
25699
25700
25701
25702
25703
25704
25705
25706
25707
25708
25709
25710
25711
25712
25713
25714
25715
25716
25717
25718
25719
25720
25721
25722
25723
25724
25725
25726
25727
25728
25729
25730
25731
25732
25733
25734
25735
25736
25737
25738
25739
25740
25741
25742
25743
25744
25745
25746
25747
25748
25749
25750
25751
25752
25753
25754
25755
25756
25757
25758
25759
25760
25761
25762
25763
25764
25765
25766
25767
25768
25769
25770
25771
25772
25773
25774
25775
25776
25777
25778
25779
25780
25781
25782
25783
25784
25785
25786
25787
25788
25789
25790
25791
25792
25793
25794
25795
25796
25797
25798
25799
25800
25801
25802
25803
25804
25805
25806
25807
25808
25809
25810
25811
25812
25813
25814
25815
25816
25817
25818
25819
25820
25821
25822
25823
25824
25825
25826
25827
25828
25829
25830
25831
25832
25833
25834
25835
25836
25837
25838
25839
25840
25841
25842
25843
25844
25845
25846
25847
25848
25849
25850
25851
25852
25853
25854
25855
25856
25857
25858
25859
25860
25861
25862
25863
25864
25865
25866
25867
25868
25869
25870
25871
25872
25873
25874
25875
25876
25877
25878
25879
25880
25881
25882
25883
25884
25885
25886
25887
25888
25889
25890
25891
25892
25893
25894
25895
25896
25897
25898
25899
25900
25901
25902
25903
25904
25905
25906
25907
25908
25909
25910
25911
25912
25913
25914
25915
25916
25917
25918
25919
25920
25921
25922
25923
25924
25925
25926
25927
25928
25929
25930
25931
25932
25933
25934
25935
25936
25937
25938
25939
25940
25941
25942
25943
25944
25945
25946
25947
25948
25949
25950
25951
25952
25953
25954
25955
25956
25957
25958
25959
25960
25961
25962
25963
25964
25965
25966
25967
25968
25969
25970
25971
25972
25973
25974
25975
25976
25977
25978
25979
25980
25981
25982
25983
25984
25985
25986
25987
25988
25989
25990
25991
25992
25993
25994
25995
25996
25997
25998
25999
26000
26001
26002
26003
26004
26005
26006
26007
26008
26009
26010
26011
26012
26013
26014
26015
26016
26017
26018
26019
26020
26021
26022
26023
26024
26025
26026
26027
26028
26029
26030
26031
26032
26033
26034
26035
26036
26037
26038
26039
26040
26041
26042
26043
26044
26045
26046
26047
26048
26049
26050
26051
26052
26053
26054
26055
26056
26057
26058
26059
26060
26061
26062
26063
26064
26065
26066
26067
26068
26069
26070
26071
26072
26073
26074
26075
26076
26077
26078
26079
26080
26081
26082
26083
26084
26085
26086
26087
26088
26089
26090
26091
26092
26093
26094
26095
26096
26097
26098
26099
26100
26101
26102
26103
26104
26105
26106
26107
26108
26109
26110
26111
26112
26113
26114
26115
26116
26117
26118
26119
26120
26121
26122
26123
26124
26125
26126
26127
26128
26129
26130
26131
26132
26133
26134
26135
26136
26137
26138
26139
26140
26141
26142
26143
26144
26145
26146
26147
26148
26149
26150
26151
26152
26153
26154
26155
26156
26157
26158
26159
26160
26161
26162
26163
26164
26165
26166
26167
26168
26169
26170
26171
26172
26173
26174
26175
26176
26177
26178
26179
26180
26181
26182
26183
26184
26185
26186
26187
26188
26189
26190
26191
26192
26193
26194
26195
26196
26197
26198
26199
26200
26201
26202
26203
26204
26205
26206
26207
26208
26209
26210
26211
26212
26213
26214
26215
26216
26217
26218
26219
26220
26221
26222
26223
26224
26225
26226
26227
26228
26229
26230
26231
26232
26233
26234
26235
26236
26237
26238
26239
26240
26241
26242
26243
26244
26245
26246
26247
26248
26249
26250
26251
26252
26253
26254
26255
26256
26257
26258
26259
26260
26261
26262
26263
26264
26265
26266
26267
26268
26269
26270
26271
26272
26273
26274
26275
26276
26277
26278
26279
26280
26281
26282
26283
26284
26285
26286
26287
26288
26289
26290
26291
26292
26293
26294
26295
26296
26297
26298
26299
26300
26301
26302
26303
26304
26305
26306
26307
26308
26309
26310
26311
26312
26313
26314
26315
26316
26317
26318
26319
26320
26321
26322
26323
26324
26325
26326
26327
26328
26329
26330
26331
26332
26333
26334
26335
26336
26337
26338
26339
26340
26341
26342
26343
26344
26345
26346
26347
26348
26349
26350
26351
26352
26353
26354
26355
26356
26357
26358
26359
26360
26361
26362
26363
26364
26365
26366
26367
26368
26369
26370
26371
26372
26373
26374
26375
26376
26377
26378
26379
26380
26381
26382
26383
26384
26385
26386
26387
26388
26389
26390
This is setuptools.info, produced by makeinfo version 6.5 from
setuptools.texi.

     setuptools 50.3.2, Dec 04, 2020

     Python Packaging Authority

     Copyright © Python Packaging Authority

INFO-DIR-SECTION Miscellaneous
START-INFO-DIR-ENTRY
* setuptools: (setuptools.info). One line description of project
END-INFO-DIR-ENTRY


   Generated by Sphinx 2.3.1.


File: setuptools.info,  Node: Top,  Next: Building and Distributing Packages with Setuptools,  Up: (dir)

setuptools
**********

     setuptools 50.3.2, Dec 04, 2020

     Python Packaging Authority

     Copyright © Python Packaging Authority

Setuptools is a fully-featured, actively-maintained, and stable library
designed to facilitate packaging Python projects.

Documentation content:

* Menu:

* Building and Distributing Packages with Setuptools::
* Build System Support::
* Package Discovery and Resource Access using pkg_resources::
* Keywords::
* Roadmap::
* Building and Distributing Packages with Setuptools: Building and Distributing Packages with Setuptools<2>.
* Development on Setuptools::
* Guides on backward compatibility & deprecated practice::
* History: History<2>.
* Credits::
* Index::

 — The Detailed Node Listing —

Building and Distributing Packages with Setuptools

* Transition to PEP517::

Transition to PEP517

* setuptools Quickstart::
* Package Discovery and Namespace Package::
* Entry Points::
* Dependencies Management in Setuptools::
* Data Files Support::
* “Development Mode”::
* Tagging and “Daily Build” or “Snapshot” Releases::
* Generating Source Distributions::
* Distributing Extensions compiled with Cython::
* Specifying Your Project’s Version::
* Creating distutils Extensions::
* Configuring setup() using setup.cfg files: Configuring setup using setup cfg files.
* New and Changed setup() Keywords: New and Changed setup Keywords.
* Command Reference::
* Using setuptools to package and distribute your project::
* Automatic Resource Extraction::
* Defining Additional Metadata::
* Setting the zip_safe flag::

setuptools Quickstart

* Installation::
* Python packaging at a glance::
* Basic Use::
* Automatic package discovery::
* Entry points and automatic script creation::
* Dependency management::
* Including Data Files::
* Development mode::
* Uploading your package to PyPI::
* Transitioning from setup.py to setup.cfg: Transitioning from setup py to setup cfg.
* Resources on Python packaging::

Package Discovery and Namespace Package

* Using find; or find_packages: Using find or find_packages.
* Using find_namespace; or find_namespace_packages: Using find_namespace or find_namespace_packages.
* Legacy Namespace Packages::

Legacy Namespace Packages

* pkg_resource style namespace package::
* pkgutil style namespace package::

Entry Points

* Console Scripts::
* Advertising Behavior::
* Dependency Management::

Dependencies Management in Setuptools

* Build system requirement::
* Declaring required dependency::
* Optional dependencies::
* Python requirement::

Build system requirement

* Package requirement::

Declaring required dependency

* Platform specific dependencies::
* Dependencies that aren’t in PyPI::

Data Files Support

* Accessing Data Files at Runtime::
* Non-Package Data Files::

Generating Source Distributions

* Making “Official” (Non-Snapshot) Releases: Making “Official” Non-Snapshot Releases.

Creating distutils Extensions

* Adding Commands::
* Adding setup() Arguments: Adding setup Arguments.
* Customizing Distribution Options::
* Adding new EGG-INFO Files::
* Adding Support for Revision Control Systems::

Configuring setup() using setup.cfg files

* Using a src/ layout::
* Specifying values::

Specifying values

* Metadata::
* Options::

Command Reference

* alias - Define shortcuts for commonly used commands::
* bdist_egg - Create a Python Egg for the project::
* develop - Deploy the project source in “Development Mode”::
* egg_info - Create egg metadata and set build tags::
* rotate - Delete outdated distribution files::
* saveopts - Save used options to a configuration file::
* setopt - Set a distutils or setuptools option in a config file::
* test - Build package and run a unittest suite::
* upload - Upload source and/or egg distributions to PyPI::

egg_info - Create egg metadata and set build tags

* Release Tagging Options::
* Other egg_info Options::
* egg_info Examples::

saveopts - Save used options to a configuration file

* Configuration File Options::

Build System Support

* What is it?::
* How to use it?::

Package Discovery and Resource Access using pkg_resources

* Overview::
* API Reference::

API Reference

* Namespace Package Support::
* WorkingSet Objects::
* Environment Objects::
* Requirement Objects::
* Entry Points: Entry Points<2>.
* Distribution Objects::
* ResourceManager API::
* Metadata API::
* Exceptions::
* Supporting Custom Importers::
* Utility Functions::

WorkingSet Objects

* Basic WorkingSet Methods::
* WorkingSet Methods and Attributes::
* Receiving Change Notifications::
* Locating Plugins::

Requirement Objects

* Requirements Parsing::
* Requirement Methods and Attributes::

Entry Points

* Convenience API::
* Creating and Parsing::
* EntryPoint Objects::

Distribution Objects

* Getting or Creating Distributions::
* Distribution Attributes::
* Distribution Methods::

ResourceManager API

* Basic Resource Access::
* Resource Extraction::
* “Provider” Interface::

Metadata API

* IMetadataProvider Methods::

Supporting Custom Importers

* IResourceProvider::
* Built-in Resource Providers::

Utility Functions

* Parsing Utilities::
* Platform Utilities::
* PEP 302 Utilities::
* File/Path Utilities::
* History::

Building and Distributing Packages with Setuptools

* Developer’s Guide::

Developer’s Guide

* TRANSITIONAL NOTE::

TRANSITIONAL NOTE

* setup.cfg-only projects: setup cfg-only projects.
* Configuration API::
* Mailing List and Bug Tracker::

Development on Setuptools

* Developer’s Guide for Setuptools::
* Release Process::

Developer’s Guide for Setuptools

* Recommended Reading::
* Project Management::
* Authoring Tickets::
* Making a pull request::
* Auto-Merge Requests::
* Testing::
* Semantic Versioning::
* Building Documentation::
* Vendored Dependencies::

Making a pull request

* Adding change notes with your PRs::
* Alright! So how to add a news fragment?::
* Examples for adding changelog entries to your Pull Requests::

Release Process

* Release Frequency::
* Release Managers::

Guides on backward compatibility & deprecated practice

* Supporting both Python 2 and Python 3 with Setuptools::
* The Internal Structure of Python Eggs::
* Easy Install::
* Porting from Distutils::
* “Eggsecutable” Scripts::

Supporting both Python 2 and Python 3 with Setuptools

* Using 2to3::
* Distributing Python 3 modules::
* Advanced features::

Using 2to3

* Differential conversion::

The Internal Structure of Python Eggs

* Eggs and their Formats::
* Standard Metadata::
* Other Technical Considerations::

Eggs and their Formats

* Code and Resources::
* Project Metadata::
* Filename-Embedded Metadata::
* Egg Links::

Standard Metadata

* .txt File Formats: txt File Formats.
* Dependency Metadata::
* namespace_packages.txt – Namespace Package Metadata: namespace_packages txt – Namespace Package Metadata.
* entry_points.txt – “Entry Point”/Plugin Metadata: entry_points txt – “Entry Point”/Plugin Metadata.
* The scripts Subdirectory::
* Zip Support Metadata::
* top_level.txt – Conflict Management Metadata: top_level txt – Conflict Management Metadata.
* SOURCES.txt – Source Files Manifest: SOURCES txt – Source Files Manifest.

Dependency Metadata

* requires.txt: requires txt.
* setup_requires.txt: setup_requires txt.
* dependency_links.txt: dependency_links txt.
* depends.txt – Obsolete, do not create!: depends txt – Obsolete do not create!.

Zip Support Metadata

* native_libs.txt: native_libs txt.
* eager_resources.txt: eager_resources txt.
* zip-safe and not-zip-safe::

Other Technical Considerations

* Zip File Issues::
* Installation and Path Management Issues::

Zip File Issues

* The Extraction Process::
* Extension Import Wrappers::

Installation and Path Management Issues

* Script Wrappers::

Easy Install

* Using “Easy Install”::
* Reference Manual::

Using “Easy Install”

* Installing “Easy Install”::
* Downloading and Installing a Package::
* Upgrading a Package::
* Changing the Active Version::
* Uninstalling Packages::
* Managing Scripts::
* Executables and Launchers::
* Tips & Techniques::
* Password-Protected Sites::
* Using .pypirc Credentials: Using pypirc Credentials.

Installing “Easy Install”

* Troubleshooting::
* Windows Notes::

Executables and Launchers

* Windows Executable Launcher::
* Natural Script Launcher::

Tips & Techniques

* Multiple Python Versions::
* Restricting Downloads with --allow-hosts::
* Installing on Un-networked Machines::
* Packaging Others’ Projects As Eggs::
* Creating your own Package Index::

Using .pypirc Credentials

* Controlling Build Options::
* Editing and Viewing Source Packages::
* Dealing with Installation Conflicts::
* Compressed Installation::

Reference Manual

* Configuration Files::
* Command-Line Options::
* Custom Installation Locations::
* Package Index “API”::

Custom Installation Locations

* Use the “–user” option::
* Use the “–user” option and customize “PYTHONUSERBASE”::
* Use “virtualenv”::

Porting from Distutils

* Prefer Setuptools::

History

* v50.3.2: v50 3 2.
* v50.3.1: v50 3 1.
* v50.3.0: v50 3 0.
* v50.2.0: v50 2 0.
* v50.1.0: v50 1 0.
* v50.0.3: v50 0 3.
* v50.0.2: v50 0 2.
* v50.0.1: v50 0 1.
* v50.0.0: v50 0 0.
* v49.6.0: v49 6 0.
* v49.5.0: v49 5 0.
* v49.4.0: v49 4 0.
* v49.3.2: v49 3 2.
* v49.3.1: v49 3 1.
* v49.3.0: v49 3 0.
* v49.2.1: v49 2 1.
* v49.2.0: v49 2 0.
* v49.1.3: v49 1 3.
* v49.1.2: v49 1 2.
* v49.1.1: v49 1 1.
* v49.0.1: v49 0 1.
* v49.1.0: v49 1 0.
* v49.0.0: v49 0 0.
* v48.0.0: v48 0 0.
* v47.3.2: v47 3 2.
* v47.3.1: v47 3 1.
* v47.3.0: v47 3 0.
* v47.2.0: v47 2 0.
* v47.1.1: v47 1 1.
* v44.1.1: v44 1 1.
* v47.1.0: v47 1 0.
* v47.0.0: v47 0 0.
* v46.4.0: v46 4 0.
* v46.3.1: v46 3 1.
* v46.3.0: v46 3 0.
* v46.2.0: v46 2 0.
* v46.1.3: v46 1 3.
* v46.1.2: v46 1 2.
* v46.1.1: v46 1 1.
* v46.1.0: v46 1 0.
* v44.1.0: v44 1 0.
* v46.0.0: v46 0 0.
* v45.3.0: v45 3 0.
* v45.2.0: v45 2 0.
* v45.1.0: v45 1 0.
* v45.0.0: v45 0 0.
* v44.0.0: v44 0 0.
* v43.0.0: v43 0 0.
* v42.0.2: v42 0 2.
* v42.0.1: v42 0 1.
* v42.0.0: v42 0 0.
* v41.6.0: v41 6 0.
* v41.5.1: v41 5 1.
* v41.5.0: v41 5 0.
* v41.4.0: v41 4 0.
* v41.3.0: v41 3 0.
* v41.2.0: v41 2 0.
* v41.1.0: v41 1 0.
* v41.0.1: v41 0 1.
* v41.0.0: v41 0 0.
* v40.9.0: v40 9 0.
* v40.8.0: v40 8 0.
* v40.7.3: v40 7 3.
* v40.7.2: v40 7 2.
* v40.7.1: v40 7 1.
* v40.7.0: v40 7 0.
* v40.6.3: v40 6 3.
* v40.6.2: v40 6 2.
* v40.6.1: v40 6 1.
* v40.6.0: v40 6 0.
* v40.5.0: v40 5 0.
* v40.4.3: v40 4 3.
* v40.4.2: v40 4 2.
* v40.4.1: v40 4 1.
* v40.4.0: v40 4 0.
* v40.3.0: v40 3 0.
* v40.2.0: v40 2 0.
* v40.1.1: v40 1 1.
* v40.1.0: v40 1 0.
* v40.0.0: v40 0 0.
* v39.2.0: v39 2 0.
* v39.1.0: v39 1 0.
* v39.0.1: v39 0 1.
* v39.0.0: v39 0 0.
* v38.7.0: v38 7 0.
* v38.6.1: v38 6 1.
* v38.6.0: v38 6 0.
* v38.5.2: v38 5 2.
* v38.5.1: v38 5 1.
* v38.5.0: v38 5 0.
* v38.4.1: v38 4 1.
* v38.4.0: v38 4 0.
* v38.3.0: v38 3 0.
* v38.2.5: v38 2 5.
* v38.2.4: v38 2 4.
* v38.2.3: v38 2 3.
* v38.2.2: v38 2 2.
* v38.2.1: v38 2 1.
* v38.2.0: v38 2 0.
* v38.1.0: v38 1 0.
* v38.0.0: v38 0 0.
* v37.0.0: v37 0 0.
* v36.8.0: v36 8 0.
* v36.7.3: v36 7 3.
* v36.7.2: v36 7 2.
* v36.7.1: v36 7 1.
* v36.7.0: v36 7 0.
* v36.6.1: v36 6 1.
* v36.6.0: v36 6 0.
* v36.5.0: v36 5 0.
* v36.4.0: v36 4 0.
* v36.3.0: v36 3 0.
* v36.2.7: v36 2 7.
* v36.2.6: v36 2 6.
* v36.2.5: v36 2 5.
* v36.2.4: v36 2 4.
* v36.2.3: v36 2 3.
* v36.2.2: v36 2 2.
* v36.2.1: v36 2 1.
* v36.2.0: v36 2 0.
* v36.1.1: v36 1 1.
* v36.1.0: v36 1 0.
* v36.0.1: v36 0 1.
* v36.0.0: v36 0 0.
* v35.0.2: v35 0 2.
* v35.0.1: v35 0 1.
* v35.0.0: v35 0 0.
* v34.4.1: v34 4 1.
* v34.4.0: v34 4 0.
* v34.3.3: v34 3 3.
* v34.3.2: v34 3 2.
* v34.3.1: v34 3 1.
* v34.3.0: v34 3 0.
* v34.2.0: v34 2 0.
* v34.1.1: v34 1 1.
* v34.1.0: v34 1 0.
* v34.0.3: v34 0 3.
* v34.0.2: v34 0 2.
* v34.0.1: v34 0 1.
* v34.0.0: v34 0 0.
* v33.1.1: v33 1 1.
* v33.1.0: v33 1 0.
* v33.0.0: v33 0 0.
* v32.3.1: v32 3 1.
* v32.3.0: v32 3 0.
* v32.2.0: v32 2 0.
* v32.1.3: v32 1 3.
* v32.1.2: v32 1 2.
* v32.1.1: v32 1 1.
* v32.1.0: v32 1 0.
* v32.0.0: v32 0 0.
* v31.0.1: v31 0 1.
* v31.0.0: v31 0 0.
* v30.4.0: v30 4 0.
* v30.3.0: v30 3 0.
* v30.2.1: v30 2 1.
* v30.2.0: v30 2 0.
* v30.1.0: v30 1 0.
* v30.0.0: v30 0 0.
* v29.0.1: v29 0 1.
* v29.0.0: v29 0 0.
* v28.8.0: v28 8 0.
* v28.7.1: v28 7 1.
* v28.7.0: v28 7 0.
* v28.6.1: v28 6 1.
* v28.6.0: v28 6 0.
* v28.5.0: v28 5 0.
* v28.4.0: v28 4 0.
* v28.3.0: v28 3 0.
* v28.1.0: v28 1 0.
* v28.0.0: v28 0 0.
* v27.3.1: v27 3 1.
* v27.3.0: v27 3 0.
* v27.2.0: v27 2 0.
* v27.1.2: v27 1 2.
* v27.1.1: v27 1 1.
* v27.1.0: v27 1 0.
* v27.0.0: v27 0 0.
* v26.1.1: v26 1 1.
* v26.1.0: v26 1 0.
* v26.0.0: v26 0 0.
* v25.4.0: v25 4 0.
* v25.3.0: v25 3 0.
* v25.2.0: v25 2 0.
* v25.1.6: v25 1 6.
* v25.1.5: v25 1 5.
* v25.1.4: v25 1 4.
* v25.1.3: v25 1 3.
* v25.1.2: v25 1 2.
* v25.1.1: v25 1 1.
* v25.1.0: v25 1 0.
* v25.0.2: v25 0 2.
* v25.0.1: v25 0 1.
* v25.0.0: v25 0 0.
* v24.3.1: v24 3 1.
* v24.3.0: v24 3 0.
* v24.2.1: v24 2 1.
* v24.2.0: v24 2 0.
* v24.1.1: v24 1 1.
* v24.1.0: v24 1 0.
* v24.0.3: v24 0 3.
* v24.0.2: v24 0 2.
* v24.0.1: v24 0 1.
* v24.0.0: v24 0 0.
* v23.2.1: v23 2 1.
* v23.1.0: v23 1 0.
* v23.0.0: v23 0 0.
* v22.0.5: v22 0 5.
* v22.0.4: v22 0 4.
* v22.0.3: v22 0 3.
* v22.0.2: v22 0 2.
* v22.0.1: v22 0 1.
* v22.0.0: v22 0 0.
* v21.2.2: v21 2 2.
* v21.2.1: v21 2 1.
* v21.2.0: v21 2 0.
* v21.1.0: v21 1 0.
* v21.0.0: v21 0 0.
* v20.10.0: v20 10 0.
* v20.9.0: v20 9 0.
* v20.8.1: v20 8 1.
* v20.8.0: v20 8 0.
* v20.7.0: v20 7 0.
* v20.6.8: v20 6 8.
* v20.6.7: v20 6 7.
* v20.6.6: v20 6 6.
* v20.6.0: v20 6 0.
* 20.5: 20 5.
* 20.4: 20 4.
* 20.3.1: 20 3 1.
* 20.3: 20 3.
* 20.2.2: 20 2 2.
* 20.2.1: 20 2 1.
* 20.2: 20 2.
* 20.1.1: 20 1 1.
* 20.1: 20 1.
* 20.0: 20 0.
* 19.7: 19 7.
* 19.6.2: 19 6 2.
* 19.6.1: 19 6 1.
* 19.6: 19 6.
* 19.5: 19 5.
* 19.4.1: 19 4 1.
* 19.4: 19 4.
* 19.3: 19 3.
* 19.2: 19 2.
* 19.1.1: 19 1 1.
* 19.1: 19 1.
* 19.0: 19 0.
* 18.8.1: 18 8 1.
* 18.8: 18 8.
* 18.7.1: 18 7 1.
* 18.7: 18 7.
* 18.6.1: 18 6 1.
* 18.6: 18 6.
* 18.5: 18 5.
* 18.4: 18 4.
* 18.3.2: 18 3 2.
* 18.3.1: 18 3 1.
* 18.3: 18 3.
* 18.2: 18 2.
* 18.1: 18 1.
* 18.0.1: 18 0 1.
* 18.0: 18 0.
* 17.1.1: 17 1 1.
* 17.1: 17 1.
* 17.0: 17 0.
* 16.0: 16 0.
* 15.2: 15 2.
* 15.1: 15 1.
* 15.0: 15 0.
* 14.3.1: 14 3 1.
* 14.3: 14 3.
* 14.2: 14 2.
* 14.1.1: 14 1 1.
* 14.1: 14 1.
* 14.0: 14 0.
* 13.0.2: 13 0 2.
* 13.0.1: 13 0 1.
* 13.0: 13 0.
* 12.4: 12 4.
* 12.3: 12 3.
* 12.2: 12 2.
* 12.1: 12 1.
* 12.0.5: 12 0 5.
* 12.0.4: 12 0 4.
* 12.0.3: 12 0 3.
* 12.0.2: 12 0 2.
* 12.0.1: 12 0 1.
* 12.0: 12 0.
* 11.3.1: 11 3 1.
* 11.3: 11 3.
* 11.2: 11 2.
* 11.1: 11 1.
* 11.0: 11 0.
* 10.2.1: 10 2 1.
* 10.2: 10 2.
* 10.1: 10 1.
* 10.0.1: 10 0 1.
* 10.0: 10 0.
* 9.1: 9 1.
* 9.0.1: 9 0 1.
* 9.0: 9 0.
* 8.4: 8 4.
* 8.3: 8 3.
* 8.2.1: 8 2 1.
* 8.2: 8 2.
* 8.1: 8 1.
* 8.0.4: 8 0 4.
* 8.0.3: 8 0 3.
* 8.0.2: 8 0 2.
* 8.0.1: 8 0 1.
* 8.0: 8 0.
* 7.0: 7 0.
* 6.1: 6 1.
* 6.0.2: 6 0 2.
* 6.0.1: 6 0 1.
* 6.0: 6 0.
* 5.8: 5 8.
* 5.7: 5 7.
* 5.6: 5 6.
* 5.5.1: 5 5 1.
* 5.5: 5 5.
* 5.4.2: 5 4 2.
* 5.4.1: 5 4 1.
* 5.4: 5 4.
* 5.3: 5 3.
* 5.2: 5 2.
* 5.1: 5 1.
* 5.0.2: 5 0 2.
* 5.0.1: 5 0 1.
* 5.0: 5 0.
* 3.7.1 and 3.8.1 and 4.0.1: 3 7 1 and 3 8 1 and 4 0 1.
* 4.0: 4 0.
* 3.8: 3 8.
* 3.7: 3 7.
* 3.6: 3 6.
* 3.5.2: 3 5 2.
* 3.5.1: 3 5 1.
* 3.5: 3 5.
* 3.4.4: 3 4 4.
* 3.4.3: 3 4 3.
* 3.4.2: 3 4 2.
* 3.4.1: 3 4 1.
* 3.4: 3 4.
* 3.3: 3 3.
* 3.2: 3 2.
* 3.1: 3 1.
* 3.0.2: 3 0 2.
* 3.0.1: 3 0 1.
* 3.0: 3 0.
* 2.2: 2 2.
* 2.1.2: 2 1 2.
* 2.1.1: 2 1 1.
* 2.1: 2 1.
* 2.0.2: 2 0 2.
* 2.0.1: 2 0 1.
* 2.0: 2 0.
* 1.4.2: 1 4 2.
* 1.4.1: 1 4 1.
* 1.4: 1 4.
* 1.3.2: 1 3 2.
* 1.3.1: 1 3 1.
* 1.3: 1 3.
* 1.2: 1 2.
* 1.1.7: 1 1 7.
* 1.1.6: 1 1 6.
* 1.1.5: 1 1 5.
* 1.1.4: 1 1 4.
* 1.1.3: 1 1 3.
* 1.1.2: 1 1 2.
* 1.1.1: 1 1 1.
* 1.1: 1 1.
* 1.0: 1 0.
* 0.9.8: 0 9 8.
* 0.9.7: 0 9 7.
* 0.9.6: 0 9 6.
* 0.9.5: 0 9 5.
* 0.9.4: 0 9 4.
* 0.9.3: 0 9 3.
* 0.9.2: 0 9 2.
* 0.9.1: 0 9 1.
* 0.9: 0 9.
* 0.8: 0 8.
* 0.7.8: 0 7 8.
* 0.7.7: 0 7 7.
* 0.7.6: 0 7 6.
* 0.7.5: 0 7 5.
* 0.7.4: 0 7 4.
* 0.7.3: 0 7 3.
* 0.7.2: 0 7 2.
* 0.7.1: 0 7 1.
* 0.7: 0 7.
* 0.7b4: 0 7b4.
* 0.6.49: 0 6 49.
* 0.6.48: 0 6 48.
* 0.6.47: 0 6 47.
* 0.6.46: 0 6 46.
* 0.6.45: 0 6 45.
* 0.6.44: 0 6 44.
* 0.6.43: 0 6 43.
* 0.6.42: 0 6 42.
* 0.6.41: 0 6 41.
* 0.6.40: 0 6 40.
* 0.6.39: 0 6 39.
* 0.6.38: 0 6 38.
* 0.6.37: 0 6 37.
* 0.6.36: 0 6 36.
* 0.6.35: 0 6 35.
* 0.6.34: 0 6 34.
* 0.6.33: 0 6 33.
* 0.6.32: 0 6 32.
* 0.6.31: 0 6 31.
* 0.6.30: 0 6 30.
* 0.6.29: 0 6 29.
* 0.6.28: 0 6 28.
* 0.6.27: 0 6 27.
* 0.6.26: 0 6 26.
* 0.6.25: 0 6 25.
* 0.6.24: 0 6 24.
* 0.6.23: 0 6 23.
* 0.6.21: 0 6 21.
* 0.6.20: 0 6 20.
* 0.6.19: 0 6 19.
* 0.6.18: 0 6 18.
* 0.6.17: 0 6 17.
* 0.6.16: 0 6 16.
* 0.6.15: 0 6 15.
* 0.6.14: 0 6 14.
* 0.6.13: 0 6 13.
* 0.6.12: 0 6 12.
* 0.6.11: 0 6 11.
* 0.6.10: 0 6 10.
* 0.6.9: 0 6 9.
* 0.6.8: 0 6 8.
* 0.6.7: 0 6 7.
* 0.6.6: 0 6 6.
* 0.6.5: 0 6 5.
* 0.6.4: 0 6 4.
* 0.6.3: 0 6 3.
* 0.6.2: 0 6 2.
* 0.6.1: 0 6 1.
* 0.6: 0 6.
* 0.6c9: 0 6c9.
* 0.6c7: 0 6c7.
* 0.6c6: 0 6c6.
* 0.6c5: 0 6c5.
* 0.6c4: 0 6c4.
* 0.6c3: 0 6c3.
* 0.6c2: 0 6c2.
* 0.6c1: 0 6c1.
* 0.6b4: 0 6b4.
* 0.6b3: 0 6b3.
* 0.6b2: 0 6b2.
* 0.6b1: 0 6b1.
* 0.6a11: 0 6a11.
* 0.6a10: 0 6a10.
* 0.6a9: 0 6a9.
* 0.6a8: 0 6a8.
* 0.6a7: 0 6a7.
* 0.6a6: 0 6a6.
* 0.6a5: 0 6a5.
* 0.6a3: 0 6a3.
* 0.6a2: 0 6a2.
* 0.6a1: 0 6a1.
* 0.5a12: 0 5a12.
* 0.5a11: 0 5a11.
* 0.5a10: 0 5a10.
* 0.5a9: 0 5a9.
* 0.5a8: 0 5a8.
* 0.5a7: 0 5a7.
* 0.5a6: 0 5a6.
* 0.5a5: 0 5a5.
* 0.5a4: 0 5a4.
* 0.5a3: 0 5a3.
* 0.5a2: 0 5a2.
* 0.5a1: 0 5a1.
* 0.4a4: 0 4a4.
* 0.4a3: 0 4a3.
* 0.4a2: 0 4a2.
* 0.4a1: 0 4a1.
* 0.3a4: 0 3a4.
* 0.3a3: 0 3a3.
* 0.3a2: 0 3a2.
* 0.3a1: 0 3a1.

v50.3.2

* Documentation changes::
* Misc::

v50.3.1

* Documentation changes: Documentation changes<2>.
* Misc: Misc<2>.

v50.3.0

* Changes::

v50.2.0

* Changes: Changes<2>.

v50.1.0

* Changes: Changes<3>.

v50.0.3

* Misc: Misc<3>.

v50.0.2

* Misc: Misc<4>.

v50.0.1

* Misc: Misc<5>.

v50.0.0

* Breaking Changes::
* Changes: Changes<4>.

v49.6.0

* Changes: Changes<5>.

v49.5.0

* Changes: Changes<6>.

v49.4.0

* Changes: Changes<7>.

v49.3.2

* Documentation changes: Documentation changes<3>.
* Misc: Misc<6>.

v49.3.1

* Changes: Changes<8>.

v49.3.0

* Changes: Changes<9>.

v49.2.1

* Misc: Misc<7>.

v49.2.0

* Changes: Changes<10>.

v49.1.3

* Misc: Misc<8>.

v49.1.2

* Changes: Changes<11>.

v49.1.1

* Misc: Misc<9>.

v49.0.1

* Misc: Misc<10>.

v49.1.0

* Changes: Changes<12>.

v49.0.0

* Breaking Changes: Breaking Changes<2>.
* Changes: Changes<13>.
* Misc: Misc<11>.

v48.0.0

* Breaking Changes: Breaking Changes<3>.

v47.3.2

* Misc: Misc<12>.

v47.3.1

* Misc: Misc<13>.

v47.3.0

* Changes: Changes<14>.
* Misc: Misc<14>.

v47.2.0

* Changes: Changes<15>.

v47.1.1

* Documentation changes: Documentation changes<4>.
* Incorporate changes from v44.1.1;: Incorporate changes from v44 1 1.

v44.1.1

* Misc: Misc<15>.

v47.1.0

* Changes: Changes<16>.

v47.0.0

* Breaking Changes: Breaking Changes<4>.
* Changes: Changes<17>.

v46.4.0

* Changes: Changes<18>.

v46.3.0

* Changes: Changes<19>.
* Misc: Misc<16>.

v46.2.0

* Changes: Changes<20>.
* Documentation changes: Documentation changes<5>.
* Misc: Misc<17>.

v46.1.2

* Misc: Misc<18>.

v46.1.0

* Changes: Changes<21>.
* Incorporate changes from v44.1.0;: Incorporate changes from v44 1 0.

v44.1.0

* Changes: Changes<22>.

v46.0.0

* Breaking Changes: Breaking Changes<5>.
* Changes: Changes<23>.
* Documentation changes: Documentation changes<6>.
* Misc: Misc<19>.

v45.3.0

* Changes: Changes<24>.

v45.2.0

* Changes: Changes<25>.
* Misc: Misc<20>.

v45.1.0

* Changes: Changes<26>.

v45.0.0

* Breaking Changes: Breaking Changes<6>.
* Changes: Changes<27>.

v44.0.0

* Breaking Changes: Breaking Changes<7>.

v43.0.0

* Breaking Changes: Breaking Changes<8>.
* Changes: Changes<28>.

v42.0.2

* Changes: Changes<29>.

v42.0.1

* Changes: Changes<30>.

v42.0.0

* Breaking Changes: Breaking Changes<9>.
* Changes: Changes<31>.

v41.6.0

* Changes: Changes<32>.

v41.5.1

* Changes: Changes<33>.

v41.5.0

* Changes: Changes<34>.
* Documentation changes: Documentation changes<7>.
* Misc: Misc<21>.

v41.4.0

* Changes: Changes<35>.

v41.3.0

* Changes: Changes<36>.
* Misc: Misc<22>.

v41.2.0

* Changes: Changes<37>.
* Misc: Misc<23>.

v41.1.0

* Misc: Misc<24>.
* Documentation changes: Documentation changes<8>.

v41.0.1

* Changes: Changes<38>.

v41.0.0

* Breaking Changes: Breaking Changes<10>.

v40.9.0

* Changes: Changes<39>.
* Documentation changes: Documentation changes<9>.

v40.8.0

* Changes: Changes<40>.

v40.7.3

* Changes: Changes<41>.

v40.7.2

* Changes: Changes<42>.

v40.7.1

* Changes: Changes<43>.

v40.7.0

* Breaking Changes: Breaking Changes<11>.
* Changes: Changes<44>.

v40.6.3

* Changes: Changes<45>.

v40.6.2

* Changes: Changes<46>.

v40.6.1

* Changes: Changes<47>.

v40.6.0

* Deprecations::
* Changes: Changes<48>.
* Documentation changes: Documentation changes<10>.
* Misc: Misc<25>.

v40.5.0

* Changes: Changes<49>.
* Documentation changes: Documentation changes<11>.

v40.4.3

* Changes: Changes<50>.

v40.4.2

* Misc: Misc<26>.

v40.4.1

* Changes: Changes<51>.

v40.4.0

* Changes: Changes<52>.

v40.3.0

* Changes: Changes<53>.
* Misc: Misc<27>.

v40.2.0

* Changes: Changes<54>.

v40.1.1

* Changes: Changes<55>.

v40.1.0

* Changes: Changes<56>.
* Misc: Misc<28>.

v40.0.0

* Breaking Changes: Breaking Changes<12>.
* Changes: Changes<57>.
* Documentation changes: Documentation changes<12>.
* Misc: Misc<29>.

v39.2.0

* Changes: Changes<58>.
* Documentation changes: Documentation changes<13>.
* Misc: Misc<30>.

1.0

* Backward-Incompatible Changes::

0.6.3

* setuptools::
* bootstrapping::

0.6.2

* setuptools: setuptools<2>.
* bootstrapping: bootstrapping<2>.

0.6.1

* setuptools: setuptools<3>.
* bootstrapping: bootstrapping<3>.

0.6

* setuptools: setuptools<4>.
* pkg_resources::
* easy_install::



File: setuptools.info,  Node: Building and Distributing Packages with Setuptools,  Next: Build System Support,  Prev: Top,  Up: Top

1 Building and Distributing Packages with Setuptools
****************************************************

‘Setuptools’ is a collection of enhancements to the Python ‘distutils’
that allow developers to more easily build and distribute Python
packages, especially ones that have dependencies on other packages.

Packages built and distributed using ‘setuptools’ look to the user like
ordinary Python packages based on the ‘distutils’.

* Menu:

* Transition to PEP517::


File: setuptools.info,  Node: Transition to PEP517,  Up: Building and Distributing Packages with Setuptools

1.1 Transition to PEP517
========================

Since setuptools no longer serves as the default build tool, one must
explicitly opt in (by providing a ‘pyproject.toml’ file) to use this
library.  The user facing part is provided by tools such as pip and
backend interface is described *note in this document: 5.  The
quickstart provides an overview of the new workflow.

* Menu:

* setuptools Quickstart::
* Package Discovery and Namespace Package::
* Entry Points::
* Dependencies Management in Setuptools::
* Data Files Support::
* “Development Mode”::
* Tagging and “Daily Build” or “Snapshot” Releases::
* Generating Source Distributions::
* Distributing Extensions compiled with Cython::
* Specifying Your Project’s Version::
* Creating distutils Extensions::
* Configuring setup() using setup.cfg files: Configuring setup using setup cfg files.
* New and Changed setup() Keywords: New and Changed setup Keywords.
* Command Reference::
* Using setuptools to package and distribute your project::
* Automatic Resource Extraction::
* Defining Additional Metadata::
* Setting the zip_safe flag::


File: setuptools.info,  Node: setuptools Quickstart,  Next: Package Discovery and Namespace Package,  Up: Transition to PEP517

1.1.1 ‘setuptools’ Quickstart
-----------------------------

* Menu:

* Installation::
* Python packaging at a glance::
* Basic Use::
* Automatic package discovery::
* Entry points and automatic script creation::
* Dependency management::
* Including Data Files::
* Development mode::
* Uploading your package to PyPI::
* Transitioning from setup.py to setup.cfg: Transitioning from setup py to setup cfg.
* Resources on Python packaging::


File: setuptools.info,  Node: Installation,  Next: Python packaging at a glance,  Up: setuptools Quickstart

1.1.1.1 Installation
....................

To install the latest version of setuptools, use:

     pip install --upgrade setuptools


File: setuptools.info,  Node: Python packaging at a glance,  Next: Basic Use,  Prev: Installation,  Up: setuptools Quickstart

1.1.1.2 Python packaging at a glance
....................................

The landscape of Python packaging is shifting and ‘Setuptools’ has
evolved to only provide backend support, no longer being the de-facto
packaging tool in the market.  All python package must provide a
‘pyproject.toml’ and specify the backend (build system) it wants to use.
The distribution can then be generated with whatever tools that provides
a ‘build sdist’-alike functionality.  While this may appear cumbersome,
given the added pieces, it in fact tremendously enhances the portability
of your package.  The change is driven under 517(1).  To learn more
about Python packaging in general, navigate to the bottom(2) of this
page.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0517#build-requirements

   (2) Resourcesonpythonpackaging


File: setuptools.info,  Node: Basic Use,  Next: Automatic package discovery,  Prev: Python packaging at a glance,  Up: setuptools Quickstart

1.1.1.3 Basic Use
.................

For basic use of setuptools, you will need a ‘pyproject.toml’ with the
exact following info, which declares you want to use ‘setuptools’ to
package your project:

     [build-system]
     requires = ["setuptools", "wheel"]
     build-backend = "setuptools.build_meta"

Then, you will need a ‘setup.cfg’ to specify your package information,
such as metadata, contents, dependencies, etc.  Here we demonstrate the
minimum

     [metadata]
     name = "mypackage"
     version = 0.0.1

     [options]
     packages = "mypackage"
     install_requires =
       requests
       importlib; python_version == "2.6"

This is what your project would look like:

     ~/mypackage/
         pyproject.toml
         setup.cfg
         mypackage/__init__.py

Then, you need an installer, such as pep517(1) which you can obtain via
‘pip install pep517’.  After downloading it, invoke the installer:

     python -m pep517.build

You now have your distribution ready (e.g.  a ‘tar.gz’ file and a ‘.whl’
file in the ‘dist’ directory), which you can upload to PyPI!

Of course, before you release your project to PyPI, you’ll want to add a
bit more information to your setup script to help people find or learn
about your project.  And maybe your project will have grown by then to
include a few dependencies, and perhaps some data files and scripts.  In
the next few section, we will walk through those additional but
essential information you need to specify to properly package your
project.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/pep517/


File: setuptools.info,  Node: Automatic package discovery,  Next: Entry points and automatic script creation,  Prev: Basic Use,  Up: setuptools Quickstart

1.1.1.4 Automatic package discovery
...................................

For simple projects, it’s usually easy enough to manually add packages
to the ‘packages’ keyword in ‘setup.cfg’.  However, for very large
projects , it can be a big burden to keep the package list updated.
‘setuptools’ therefore provides two convenient tools to ease the burden:
‘find:’ and ‘find_namespace:’.  To use it in your project:

     [options]
     packages = find:

     [options.packages.find] #optional
     include=pkg1, pkg2
     exclude=pk3, pk4

When you pass the above information, alongside other necessary ones,
‘setuptools’ walks through the directory specified in ‘where’ (omitted
here as the package reside in current directory) and filters the
packages it can find following the ‘include’ (default to none), then
remove those that match the ‘exclude’ and return a list of Python
packages.  Note that each entry in the ‘[options.packages.find]’ is
optional.  The above setup also allows you to adopt a ‘src/’ layout.
For more details and advanced use, go to *note Package Discovery and
Namespace Package: c.


File: setuptools.info,  Node: Entry points and automatic script creation,  Next: Dependency management,  Prev: Automatic package discovery,  Up: setuptools Quickstart

1.1.1.5 Entry points and automatic script creation
..................................................

Setuptools support automatic creation of scripts upon installation, that
runs code within your package if you specify them with the
‘entry_points’ keyword.  This is what allows you to run commands like
‘pip install’ instead of having to type ‘python -m pip install’.  To
accomplish this, add the entry_points keyword in your ‘setup.cfg’:

     [options.entry_points]
     console_scripts =
         main = mypkg:some_func

When this project is installed, a ‘main’ script will be installed and
will invoke the ‘some_func’ in the ‘__init__.py’ file when called by the
user.  For detailed usage, including managing the additional or optional
dependencies, go to *note Entry Points: e.


File: setuptools.info,  Node: Dependency management,  Next: Including Data Files,  Prev: Entry points and automatic script creation,  Up: setuptools Quickstart

1.1.1.6 Dependency management
.............................

‘setuptools’ supports automatically installing dependencies when a
package is installed.  The simplest way to include requirement
specifiers is to use the ‘install_requires’ argument to ‘setup.cfg’.  It
takes a string or list of strings containing requirement specifiers (A
version specifier is one of the operators <, >, <=, >=, == or !=,
followed by a version identifier):

     [options]
     install_requires =
         docutils >= 0.3
         requests <= 0.4

When your project is installed, all of the dependencies not already
installed will be located (via PyPI), downloaded, built (if necessary),
and installed.  This, of course, is a simplified scenarios.
‘setuptools’ also provide additional keywords such as ‘setup_requires’
that allows you to install dependencies before running the script, and
‘extras_requires’ that take care of those needed by automatically
generated scripts.  It also provides mechanisms to handle dependencies
that are not in PyPI. For more advanced use, see *note Dependencies
Management in Setuptools: 10.


File: setuptools.info,  Node: Including Data Files,  Next: Development mode,  Prev: Dependency management,  Up: setuptools Quickstart

1.1.1.7 Including Data Files
............................

The distutils have traditionally allowed installation of “data files”,
which are placed in a platform-specific location.  Setuptools offers
three ways to specify data files to be included in your packages.  For
the simpliest use, you can simply use the ‘include_package_data’
keyword:

     [options]
     include_package_data = True

This tells setuptools to install any data files it finds in your
packages.  The data files must be specified via the distutils’
‘MANIFEST.in’ file.  For more details, see *note Data Files Support: 13.


File: setuptools.info,  Node: Development mode,  Next: Uploading your package to PyPI,  Prev: Including Data Files,  Up: setuptools Quickstart

1.1.1.8 Development mode
........................

‘setuptools’ allows you to install a package without copying any files
to your interpretor directory (e.g.  the ‘site-packages’ directory).
This allows you to modify your source code and have the changes take
effect without you having to rebuild and reinstall.  This is currently
incompatible with PEP 517 and therefore it requires a ‘setup.py’ script
with the following content:

     import setuptools
     setuptools.setup()

Then:

     pip install --editable .

This creates a link file in your interpretor site package directory
which associate with your source code.  For more information, see: (WIP)


File: setuptools.info,  Node: Uploading your package to PyPI,  Next: Transitioning from setup py to setup cfg,  Prev: Development mode,  Up: setuptools Quickstart

1.1.1.9 Uploading your package to PyPI
......................................

After generating the distribution files, next step would be to upload
your distribution so others can use it.  This functionality is provided
by twine(1) and we will only demonstrate the basic use here.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/twine/


File: setuptools.info,  Node: Transitioning from setup py to setup cfg,  Next: Resources on Python packaging,  Prev: Uploading your package to PyPI,  Up: setuptools Quickstart

1.1.1.10 Transitioning from ‘setup.py’ to ‘setup.cfg’
.....................................................

To avoid executing arbitary scripts and boilerplate code, we are
transitioning into a full-fledged ‘setup.cfg’ to declare your package
information instead of running ‘setup()’.  This inevitably brings
challenges due to a different syntax.  Here we provide a quick guide to
understanding how ‘setup.cfg’ is parsed by ‘setuptool’ to ease the pain
of transition.


File: setuptools.info,  Node: Resources on Python packaging,  Prev: Transitioning from setup py to setup cfg,  Up: setuptools Quickstart

1.1.1.11 Resources on Python packaging
......................................

Packaging in Python is hard.  Here we provide a list of links for those
that want to learn more.


File: setuptools.info,  Node: Package Discovery and Namespace Package,  Next: Entry Points,  Prev: setuptools Quickstart,  Up: Transition to PEP517

1.1.2 Package Discovery and Namespace Package
---------------------------------------------

     Note: a full specification for the keyword supplied to ‘setup.cfg’
     or ‘setup.py’ can be found at *note keywords reference: 1a.

     Note: the examples provided here are only to demonstrate the
     functionality introduced.  More metadata and options arguments need
     to be supplied if you want to replicate them on your system.  If
     you are completely new to setuptools, the *note quickstart section:
     6. is a good place to start.

‘Setuptools’ provide powerful tools to handle package discovery,
including support for namespace package.  Normally, you would specify
the package to be included manually in the following manner:

     [options]
     #...
     packages =
         mypkg1
         mypkg2

     setup(
         #...
         packages = ['mypkg1', 'mypkg2']
     )

This can get tiresome reallly quickly.  To speed things up, we introduce
two functions provided by setuptools:

     [options]
     packages = find:
     #or
     packages = find_namespace:

     from setuptools import find_packages
     #or
     from setuptools import find_namespace_packages

* Menu:

* Using find; or find_packages: Using find or find_packages.
* Using find_namespace; or find_namespace_packages: Using find_namespace or find_namespace_packages.
* Legacy Namespace Packages::


File: setuptools.info,  Node: Using find or find_packages,  Next: Using find_namespace or find_namespace_packages,  Up: Package Discovery and Namespace Package

1.1.2.1 Using ‘find:’ or ‘find_packages’
........................................

Let’s start with the first tool.  ‘find:’ (‘find_packages’) takes a
source directory and two lists of package name patterns to exclude and
include, and then return a list of ‘str’ representing the packages it
could find.  To use it, consider the following directory

     mypkg/
         src/
             pkg1/__init__.py
             pkg2/__init__.py
             additional/__init__.py

         setup.cfg #or setup.py

To have your setup.cfg or setup.py to automatically include packages
found in ‘src’ that starts with the name ‘pkg’ and not ‘additional’:

     [options]
     packages = find:
     package_dir =
         =src

     [options.packages.find]
     where = src
     include = pkg*
     exclude = additional

     setup(
         #...
         packages = find_packages(
             where = 'src',
             include = ['pkg*',],
             exclude = ['additional',]
         ),
         package_dir = {"":"src"}
         #...
     )


File: setuptools.info,  Node: Using find_namespace or find_namespace_packages,  Next: Legacy Namespace Packages,  Prev: Using find or find_packages,  Up: Package Discovery and Namespace Package

1.1.2.2 Using ‘find_namespace:’ or ‘find_namespace_packages’
............................................................

‘setuptools’ provides the ‘find_namespace:’ (‘find_namespace_packages’)
which behaves similarly to ‘find:’ but works with namespace package.
Before diving in, it is important to have a good understanding of what
namespace packages are.  Here is a quick recap:

Suppose you have two packages named as follows:

     /Users/Desktop/timmins/foo/__init__.py
     /Library/timmins/bar/__init__.py

If both ‘Desktop’ and ‘Library’ are on your ‘PYTHONPATH’, then a
namespace package called ‘timmins’ will be created automatically for you
when you invoke the import mechanism, allowing you to accomplish the
following

     >>> import timmins.foo
     >>> import timmins.bar

as if there is only one ‘timmins’ on your system.  The two packages can
then be distributed separately and installed individually without
affecting the other one.  Suppose you are packaging the ‘foo’ part:

     foo/
         src/
             timmins/foo/__init__.py
         setup.cfg # or setup.py

and you want the ‘foo’ to be automatically included, ‘find:’ won’t work
because timmins doesn’t contain ‘__init__.py’ directly, instead, you
have to use ‘find_namespace:’:

     [options]
     package_dir =
         =src
     packages = find_namespace:

     [options.packages.find_namespace]
     where = src

When you install the zipped distribution, ‘timmins.foo’ would become
available to your interpreter.

You can think of ‘find_namespace:’ as identical to ‘find:’ except it
would count a directory as a package even if it doesn’t contain
‘__init__.py’ file directly.  As a result, this creates an interesting
side effect.  If you organize your package like this:

     foo/
         timmins/
             foo/__init__.py
         setup.cfg # or setup.py
         tests/
             test_foo/__init__.py

a naive ‘find_namespace:’ would include tests as part of your package to
be installed.  A simple way to fix it is to adopt the aforementioned
‘src’ layout.


File: setuptools.info,  Node: Legacy Namespace Packages,  Prev: Using find_namespace or find_namespace_packages,  Up: Package Discovery and Namespace Package

1.1.2.3 Legacy Namespace Packages
.................................

The fact you can create namespace package so effortlessly above is
credited to PEP 420(1).  It use to be more cumbersome to accomplish the
same result.  Historically, there were two methods to create namespace
packages.  One is the ‘pkg_resources’ style supported by ‘setuptools’
and the other one being ‘pkgutils’ style offered by ‘pkgutils’ module in
Python.  Both are now considered deprecated despite the fact they still
linger in many existing packages.  These two differ in many subtle yet
significant aspects and you can find out more on Python packaging user
guide(2)

* Menu:

* pkg_resource style namespace package::
* pkgutil style namespace package::

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0420/

   (2) https://packaging.python.org/guides/packaging-namespace-packages/


File: setuptools.info,  Node: pkg_resource style namespace package,  Next: pkgutil style namespace package,  Up: Legacy Namespace Packages

1.1.2.4 ‘pkg_resource’ style namespace package
..............................................

This is the method ‘setuptools’ directly supports.  Starting with the
same layout, there are two pieces you need to add to it.  First, an
‘__init__.py’ file directly under your namespace package directory that
contains the following:

     __import__("pkg_resources").declare_namespace(__name__)

And the ‘namespace_packages’ keyword in your ‘setup.cfg’ or ‘setup.py’:

     [options]
     namespace_packages = timmins

     setup(
         # ...
         namespace_packages = ['timmins']
     )

And your directory should look like this

     /foo/
         src/
             timmins/
                 __init__.py
                 foo/__init__.py
         setup.cfg #or setup.py

Repeat the same for other packages and you can achieve the same result
as the previous section.


File: setuptools.info,  Node: pkgutil style namespace package,  Prev: pkg_resource style namespace package,  Up: Legacy Namespace Packages

1.1.2.5 ‘pkgutil’ style namespace package
.........................................

This method is almost identical to the ‘pkg_resource’ except that the
‘namespace_packages’ declaration is omitted and the ‘__init__.py’ file
contains the following:

     __path__ = __import__('pkgutil').extend_path(__path__, __name__)

The project layout remains the same and ‘setup.cfg’ remains the same.


File: setuptools.info,  Node: Entry Points,  Next: Dependencies Management in Setuptools,  Prev: Package Discovery and Namespace Package,  Up: Transition to PEP517

1.1.3 Entry Points
------------------

Packages may provide commands to be run at the console (console
scripts), such as the ‘pip’ command.  These commands are defined for a
package as a specific kind of entry point in the ‘setup.cfg’ or
‘setup.py’.

* Menu:

* Console Scripts::
* Advertising Behavior::
* Dependency Management::


File: setuptools.info,  Node: Console Scripts,  Next: Advertising Behavior,  Up: Entry Points

1.1.3.1 Console Scripts
.......................

First consider an example without entry points.  Imagine a package
defined thus:

     timmins/
         timmins/__init__.py
         timmins/__main__.py
         setup.cfg # or setup.py
         #other necessary files

with ‘__init__.py’ as:

     def helloworld():
         print("Hello world")

and ‘__main__.py’ providing a hook:

     from . import hello_world
     if __name__ == '__main__':
         hello_world()

After installing the package, the function may be invoked through the
runpy(1) module:

     python -m timmins

Adding a console script entry point allows the package to define a
user-friendly name for installers of the package to execute.  Installers
like pip will create wrapper scripts to execute a function.  In the
above example, to create a command ‘hello-world’ that invokes
‘timmins.hello_world’, add a console script entry point to ‘setup.cfg’:

     [options.entry_points]
     console_scripts =
         hello-world = timmins:hello_world

After installing the package, a user may invoke that function by simply
calling ‘hello-world’ on the command line.

The syntax for entry points is specified as follows:

     <name> = [<package>.[<subpackage>.]]<module>[:<object>.<object>]

where ‘name’ is the name for the script you want to create, the left
hand side of ‘:’ is the module that contains your function and the right
hand side is the object you want to invoke (e.g.  a function).

In addition to ‘console_scripts’, Setuptools supports ‘gui_scripts’,
which will launch a GUI application without running in a terminal
window.

   ---------- Footnotes ----------

   (1) https://docs.python.org/3/library/runpy.html


File: setuptools.info,  Node: Advertising Behavior,  Next: Dependency Management,  Prev: Console Scripts,  Up: Entry Points

1.1.3.2 Advertising Behavior
............................

Console scripts are one use of the more general concept of entry points.
Entry points more generally allow a packager to advertise behavior for
discovery by other libraries and applications.  This feature enables
“plug-in”-like functionality, where one library solicits entry points
and any number of other libraries provide those entry points.

A good example of this plug-in behavior can be seen in pytest
plugins(1), where pytest is a test framework that allows other libraries
to extend or modify its functionality through the ‘pytest11’ entry
point.

The console scripts work similarly, where libraries advertise their
commands and tools like ‘pip’ create wrapper scripts that invoke those
commands.

For a project wishing to solicit entry points, Setuptools recommends the
importlib.metadata(2) module (part of stdlib since Python 3.8) or its
backport, importlib_metadata(3).

For example, to find the console script entry points from the example
above:

     >>> from importlib import metadata
     >>> eps = metadata.entry_points()['console_scripts']

‘eps’ is now a list of ‘EntryPoint’ objects, one of which corresponds to
the ‘hello-world = timmins:hello_world’ defined above.  Each
‘EntryPoint’ contains the ‘name’, ‘group’, and ‘value’.  It also
supplies a ‘.load()’ method to import and load that entry point (module
or object).

     [options.entry_points]
     my.plugins =
         hello-world = timmins:hello_world

Then, a different project wishing to load ‘my.plugins’ plugins could run
the following routine to load (and invoke) such plugins:

     >>> from importlib import metadata
     >>> eps = metadata.entry_points()['my.plugins']
     >>> for ep in eps:
     ...     plugin = ep.load()
     ...     plugin()

The project soliciting the entry points needs not to have any dependency
or prior knowledge about the libraries implementing the entry points,
and downstream users are able to compose functionality by pulling
together libraries implementing the entry points.

   ---------- Footnotes ----------

   (1) https://docs.pytest.org/en/latest/writing_plugins.html

   (2) https://docs.python.org/3/library/importlib.metadata.html

   (3) https://pypi.org/project/importlib_metadata


File: setuptools.info,  Node: Dependency Management,  Prev: Advertising Behavior,  Up: Entry Points

1.1.3.3 Dependency Management
.............................

Some entry points may require additional dependencies to properly
function.  For such an entry point, declare in square brakets any number
of dependency ‘extras’ following the entry point definition.  Such entry
points will only be viable if their extras were declared and installed.
See the *note guide on dependencies management: 10. for more information
on defining extra requirements.  Consider from the above example:

     [options.entry_points]
     console_scripts =
         hello-world = timmins:hello_world [pretty-printer]

In this case, the ‘hello-world’ script is only viable if the
‘pretty-printer’ extra is indicated, and so a plugin host might exclude
that entry point (i.e.  not install a console script) if the relevant
extra dependencies are not installed.


File: setuptools.info,  Node: Dependencies Management in Setuptools,  Next: Data Files Support,  Prev: Entry Points,  Up: Transition to PEP517

1.1.4 Dependencies Management in Setuptools
-------------------------------------------

There are three types of dependency styles offered by setuptools: 1)
build system requirement, required dependency and 3) optional
dependency.

     Note: Packages that are added to dependency can be optionally
     specified with the version by following PEP 440(1)

* Menu:

* Build system requirement::
* Declaring required dependency::
* Optional dependencies::
* Python requirement::

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0440/


File: setuptools.info,  Node: Build system requirement,  Next: Declaring required dependency,  Up: Dependencies Management in Setuptools

1.1.4.1 Build system requirement
................................

* Menu:

* Package requirement::


File: setuptools.info,  Node: Package requirement,  Up: Build system requirement

1.1.4.2 Package requirement
...........................

After organizing all the scripts and files and getting ready for
packaging, there needs to be a way to tell Python what programs it need
to actually do the packgaging (in our case, ‘setuptools’ of course).
Usually, you also need the ‘wheel’ package as well since it is
recommended that you upload a ‘.whl’ file to PyPI alongside your
‘.tar.gz’ file.  Unlike the other two types of dependency keyword, this
one is specified in your ‘pyproject.toml’ file (if you have forgot what
this is, go to *note setuptools Quickstart: 6. or (WIP)):

     [build-system]
     requires = ["setuptools", "wheel"]
     #...

     Note: This used to be accomplished with the ‘setup_requires’
     keyword but is now considered deprecated in favor of the PEP 517
     style described above.  To peek into how this legacy keyword is
     used, consult our *note guide on deprecated practice (WIP): 2a.


File: setuptools.info,  Node: Declaring required dependency,  Next: Optional dependencies,  Prev: Build system requirement,  Up: Dependencies Management in Setuptools

1.1.4.3 Declaring required dependency
.....................................

This is where a package declares its core dependencies, without which it
won’t be able to run.  ‘setuptools’ support automatically download and
install these dependencies when the package is installed.  Although
there is more finess to it, let’s start with a simple example.

     [options]
     #...
     install_requires =
         docutils
         BazSpam ==1.1

     setup(
         #...,
         install_requires = [
             'docutils',
             'BazSpam ==1.1'
         ]
     )

When your project is installed (e.g.  using pip), all of the
dependencies not already installed will be located (via PyPI),
downloaded, built (if necessary), and installed and 2) Any scripts in
your project will be installed with wrappers that verify the
availability of the specified dependencies at runtime.

* Menu:

* Platform specific dependencies::
* Dependencies that aren’t in PyPI::


File: setuptools.info,  Node: Platform specific dependencies,  Next: Dependencies that aren’t in PyPI,  Up: Declaring required dependency

1.1.4.4 Platform specific dependencies
......................................

Setuptools offer the capability to evaluate certain conditions before
blindly installing everything listed in ‘install_requires’.  This is
great for platform specific dependencies.  For example, the ‘enum’
package was added in Python 3.4, therefore, package that depends on it
can elect to install it only when the Python version is older than 3.4.
To accomplish this

     [options]
     #...
     install_requires =
         enum34;python_version<'3.4'

     setup(
         #...
         install_requires=[
             "enum34;python_version<'3.4'",]
     )

Similarly, if you also wish to declare ‘pywin32’ with a minimal version
of 1.0 and only install it if the user is using a Windows operating
system:

     [options]
     #...
     install_requires =
         enum34;python_version<'3.4'
         pywin32 >= 1.0;platform_system=='Windows'

     setup(
         #...
         install_requires=[
             "enum34;python_version<'3.4'",
             "pywin32 >= 1.0;platform_system=='Windows'"
             ]
     )

The environmental markers that may be used for testing platform types
are detailed in PEP 508(1).

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0508/


File: setuptools.info,  Node: Dependencies that aren’t in PyPI,  Prev: Platform specific dependencies,  Up: Declaring required dependency

1.1.4.5 Dependencies that aren’t in PyPI
........................................

     Warning: Dependency links support has been dropped by pip starting
     with version 19.0 (released 2019-01-22).

If your project depends on packages that don’t exist on PyPI, you may
still be able to depend on them, as long as they are available for
download as:

   - an egg, in the standard distutils ‘sdist’ format,

   - a single ‘.py’ file, or

   - a VCS repository (Subversion, Mercurial, or Git).

You just need to add some URLs to the ‘dependency_links’ argument to
‘setup()’.

The URLs must be either:

  1. direct download URLs,

  2. the URLs of web pages that contain direct download links, or

  3. the repository’s URL

In general, it’s better to link to web pages, because it is usually less
complex to update a web page than to release a new version of your
project.  You can also use a SourceForge ‘showfiles.php’ link in the
case where a package you depend on is distributed via SourceForge.

If you depend on a package that’s distributed as a single ‘.py’ file,
you must include an ‘"#egg=project-version"’ suffix to the URL, to give
a project name and version number.  (Be sure to escape any dashes in the
name or version by replacing them with underscores.)  EasyInstall will
recognize this suffix and automatically create a trivial ‘setup.py’ to
wrap the single ‘.py’ file as an egg.

In the case of a VCS checkout, you should also append
‘#egg=project-version’ in order to identify for what package that
checkout should be used.  You can append ‘@REV’ to the URL’s path
(before the fragment) to specify a revision.  Additionally, you can also
force the VCS being used by prepending the URL with a certain prefix.
Currently available are:

   - ‘svn+URL’ for Subversion,

   - ‘git+URL’ for Git, and

   - ‘hg+URL’ for Mercurial

A more complete example would be:

     ‘vcs+proto://host/path@revision#egg=project-version’

Be careful with the version.  It should match the one inside the project
files.  If you want to disregard the version, you have to omit it both
in the ‘requires’ and in the URL’s fragment.

This will do a checkout (or a clone, in Git and Mercurial parlance) to a
temporary folder and run ‘setup.py bdist_egg’.

The ‘dependency_links’ option takes the form of a list of URL strings.
For example, this will cause a search of the specified page for eggs or
source distributions, if the package’s dependencies aren’t already
installed:

     [options]
     #...
     dependency_links = http://peak.telecommunity.com/snapshots/

     setup(
         #...
         dependency_links=[
             "http://peak.telecommunity.com/snapshots/"
         ],
     )


File: setuptools.info,  Node: Optional dependencies,  Next: Python requirement,  Prev: Declaring required dependency,  Up: Dependencies Management in Setuptools

1.1.4.6 Optional dependencies
.............................

Setuptools allows you to declare dependencies that only get installed
under specific circumstances.  These dependencies are specified with
‘extras_require’ keyword and are only installed if another package
depends on it (either directly or indirectly) This makes it convenient
to declare dependencies for ancillary functions such as “tests” and
“docs”.

     Note: ‘tests_require’ is now deprecated

For example, Package-A offers optional PDF support and requires two
other dependencies for it to work:

     [metadata]
     name = Package-A

     [options.extras_require]
     PDF = ReportLab>=1.2; RXP

     setup(
         name="Project-A",
         #...
         extras_require={
             "PDF":  ["ReportLab>=1.2", "RXP"],
         }
     )

The name ‘PDF’ is an arbitary identifier of such a list of dependencies,
to which other components can refer and have them installed.  There are
two common use cases.

First is the console_scripts entry point:

     [metadata]
     name = Project A
     #...

     [options]
     #...
     entry_points=
         [console_scripts]
         rst2pdf = project_a.tools.pdfgen [PDF]
         rst2html = project_a.tools.htmlgen

     setup(
         name = "Project-A"
         #...,
         entry_points={
             "console_scripts": [
                 "rst2pdf = project_a.tools.pdfgen [PDF]",
                 "rst2html = project_a.tools.htmlgen",
             ],
         }
     )

When the script ‘rst2pdf’ is run, it will trigger the installation of
the two dependencies ‘PDF’ maps to.

The second use case is that other package can use this “extra” for their
own dependencies.  For example, if “Project-B” needs “project A” with
PDF support installed, it might declare the dependency like this:

     [metadata]
     name = Project-B
     #...

     [options]
     #...
     install_requires =
         Project-A[PDF]

     setup(
         name="Project-B",
         install_requires=["Project-A[PDF]"],
         ...
     )

This will cause ReportLab to be installed along with project A, if
project B is installed – even if project A was already installed.  In
this way, a project can encapsulate groups of optional “downstream
dependencies” under a feature name, so that packages that depend on it
don’t have to know what the downstream dependencies are.  If a later
version of Project A builds in PDF support and no longer needs
ReportLab, or if it ends up needing other dependencies besides ReportLab
in order to provide PDF support, Project B’s setup information does not
need to change, but the right packages will still be installed if
needed.

     Note: Best practice: if a project ends up not needing any other
     packages to support a feature, it should keep an empty requirements
     list for that feature in its ‘extras_require’ argument, so that
     packages depending on that feature don’t break (due to an invalid
     feature name).


File: setuptools.info,  Node: Python requirement,  Prev: Optional dependencies,  Up: Dependencies Management in Setuptools

1.1.4.7 Python requirement
..........................

In some cases, you might need to specify the minimum required python
version.  This is handled with the ‘python_requires’ keyword supplied to
‘setup.cfg’ or ‘setup.py’.

Example WIP


File: setuptools.info,  Node: Data Files Support,  Next: “Development Mode”,  Prev: Dependencies Management in Setuptools,  Up: Transition to PEP517

1.1.5 Data Files Support
------------------------

The distutils have traditionally allowed installation of “data files”,
which are placed in a platform-specific location.  However, the most
common use case for data files distributed with a package is for use
`by' the package, usually by including the data files in the package
directory.

Setuptools offers three ways to specify data files to be included in
your packages.  First, you can simply use the ‘include_package_data’
keyword, e.g.:

     from setuptools import setup, find_packages
     setup(
         ...
         include_package_data=True
     )

This tells setuptools to install any data files it finds in your
packages.  The data files must be specified via the distutils’
‘MANIFEST.in’ file.  (They can also be tracked by a revision control
system, using an appropriate plugin.  See the section below on *note
Adding Support for Revision Control Systems: 32. for information on how
to write such plugins.)

If you want finer-grained control over what files are included (for
example, if you have documentation files in your package directories and
want to exclude them from installation), then you can also use the
‘package_data’ keyword, e.g.:

     from setuptools import setup, find_packages
     setup(
         ...
         package_data={
             # If any package contains *.txt or *.rst files, include them:
             "": ["*.txt", "*.rst"],
             # And include any *.msg files found in the "hello" package, too:
             "hello": ["*.msg"],
         }
     )

The ‘package_data’ argument is a dictionary that maps from package names
to lists of glob patterns.  The globs may include subdirectory names, if
the data files are contained in a subdirectory of the package.  For
example, if the package tree looks like this:

     setup.py
     src/
         mypkg/
             __init__.py
             mypkg.txt
             data/
                 somefile.dat
                 otherdata.dat

The setuptools setup file might look like this:

     from setuptools import setup, find_packages
     setup(
         ...
         packages=find_packages("src"),  # include all packages under src
         package_dir={"": "src"},   # tell distutils packages are under src

         package_data={
             # If any package contains *.txt files, include them:
             "": ["*.txt"],
             # And include any *.dat files found in the "data" subdirectory
             # of the "mypkg" package, also:
             "mypkg": ["data/*.dat"],
         }
     )

Notice that if you list patterns in ‘package_data’ under the empty
string, these patterns are used to find files in every package, even
ones that also have their own patterns listed.  Thus, in the above
example, the ‘mypkg.txt’ file gets included even though it’s not listed
in the patterns for ‘mypkg’.

Also notice that if you use paths, you `must' use a forward slash (‘/’)
as the path separator, even if you are on Windows.  Setuptools
automatically converts slashes to appropriate platform-specific
separators at build time.

If datafiles are contained in a subdirectory of a package that isn’t a
package itself (no ‘__init__.py’), then the subdirectory names (or ‘*’)
are required in the ‘package_data’ argument (as shown above with
‘"data/*.dat"’).

When building an ‘sdist’, the datafiles are also drawn from the
‘package_name.egg-info/SOURCES.txt’ file, so make sure that this is
removed if the ‘setup.py’ ‘package_data’ list is updated before calling
‘setup.py’.

(Note: although the ‘package_data’ argument was previously only
available in ‘setuptools’, it was also added to the Python ‘distutils’
package as of Python 2.4; there is some documentation for the feature(1)
available on the python.org website.  If using the setuptools-specific
‘include_package_data’ argument, files specified by ‘package_data’ will
`not' be automatically added to the manifest unless they are listed in
the MANIFEST.in file.)

Sometimes, the ‘include_package_data’ or ‘package_data’ options alone
aren’t sufficient to precisely define what files you want included.  For
example, you may want to include package README files in your revision
control system and source distributions, but exclude them from being
installed.  So, setuptools offers an ‘exclude_package_data’ option as
well, that allows you to do things like this:

     from setuptools import setup, find_packages
     setup(
         ...
         packages=find_packages("src"),  # include all packages under src
         package_dir={"": "src"},   # tell distutils packages are under src

         include_package_data=True,    # include everything in source control

         # ...but exclude README.txt from all packages
         exclude_package_data={"": ["README.txt"]},
     )

The ‘exclude_package_data’ option is a dictionary mapping package names
to lists of wildcard patterns, just like the ‘package_data’ option.
And, just as with that option, a key of ‘""’ will apply the given
pattern(s) to all packages.  However, any files that match these
patterns will be `excluded' from installation, even if they were listed
in ‘package_data’ or were included as a result of using
‘include_package_data’.

In summary, the three options allow you to:

‘include_package_data’

     Accept all data files and directories matched by ‘MANIFEST.in’.

‘package_data’

     Specify additional patterns to match files that may or may not be
     matched by ‘MANIFEST.in’ or found in source control.

‘exclude_package_data’

     Specify patterns for data files and directories that should `not'
     be included when a package is installed, even if they would
     otherwise have been included due to the use of the preceding
     options.

NOTE: Due to the way the distutils build process works, a data file that
you include in your project and then stop including may be “orphaned” in
your project’s build directories, requiring you to run ‘setup.py clean
--all’ to fully remove them.  This may also be important for your users
and contributors if they track intermediate revisions of your project
using Subversion; be sure to let them know when you make changes that
remove files from inclusion so they can run ‘setup.py clean --all’.

* Menu:

* Accessing Data Files at Runtime::
* Non-Package Data Files::

   ---------- Footnotes ----------

   (1) 
https://docs.python.org/3/distutils/setupscript.html#installing-package-data


File: setuptools.info,  Node: Accessing Data Files at Runtime,  Next: Non-Package Data Files,  Up: Data Files Support

1.1.5.1 Accessing Data Files at Runtime
.......................................

Typically, existing programs manipulate a package’s ‘__file__’ attribute
in order to find the location of data files.  However, this manipulation
isn’t compatible with PEP 302-based import hooks, including importing
from zip files and Python Eggs.  It is strongly recommended that, if you
are using data files, you should use the *note ResourceManager API: 35.
of ‘pkg_resources’ to access them.  The ‘pkg_resources’ module is
distributed as part of setuptools, so if you’re using setuptools to
distribute your package, there is no reason not to use its resource
management API. See also Importlib Resources(1) for a quick example of
converting code that uses ‘__file__’ to use ‘pkg_resources’ instead.

   ---------- Footnotes ----------

   (1) 
https://docs.python.org/3/library/importlib.html#module-importlib.resources


File: setuptools.info,  Node: Non-Package Data Files,  Prev: Accessing Data Files at Runtime,  Up: Data Files Support

1.1.5.2 Non-Package Data Files
..............................

Historically, ‘setuptools’ by way of ‘easy_install’ would encapsulate
data files from the distribution into the egg (see the old docs(1)).  As
eggs are deprecated and pip-based installs fall back to the
platform-specific location for installing data files, there is no
supported facility to reliably retrieve these resources.

Instead, the PyPA recommends that any data files you wish to be
accessible at run time be included in the package.

   ---------- Footnotes ----------

   (1) 
https://github.com/pypa/setuptools/blob/52aacd5b276fedd6849c3a648a0014f5da563e93/docs/setuptools.txt#L970-L1001


File: setuptools.info,  Node: “Development Mode”,  Next: Tagging and “Daily Build” or “Snapshot” Releases,  Prev: Data Files Support,  Up: Transition to PEP517

1.1.6 “Development Mode”
------------------------

Under normal circumstances, the ‘distutils’ assume that you are going to
build a distribution of your project, not use it in its “raw” or
“unbuilt” form.  If you were to use the ‘distutils’ that way, you would
have to rebuild and reinstall your project every time you made a change
to it during development.

Another problem that sometimes comes up with the ‘distutils’ is that you
may need to do development on two related projects at the same time.
You may need to put both projects’ packages in the same directory to run
them, but need to keep them separate for revision control purposes.  How
can you do this?

Setuptools allows you to deploy your projects for use in a common
directory or staging area, but without copying any files.  Thus, you can
edit each project’s code in its checkout directory, and only need to run
build commands when you change a project’s C extensions or similarly
compiled files.  You can even deploy a project into another project’s
checkout directory, if that’s your preferred way of working (as opposed
to using a common independent staging area or the site-packages
directory).

To do this, use the ‘setup.py develop’ command.  It works very similarly
to ‘setup.py install’, except that it doesn’t actually install anything.
Instead, it creates a special ‘.egg-link’ file in the deployment
directory, that links to your project’s source code.  And, if your
deployment directory is Python’s ‘site-packages’ directory, it will also
update the ‘easy-install.pth’ file to include your project’s source
code, thereby making it available on ‘sys.path’ for all programs using
that Python installation.

If you have enabled the ‘use_2to3’ flag, then of course the ‘.egg-link’
will not link directly to your source code when run under Python 3,
since that source code would be made for Python 2 and not work under
Python 3.  Instead the ‘setup.py develop’ will build Python 3 code under
the ‘build’ directory, and link there.  This means that after doing code
changes you will have to run ‘setup.py build’ before these changes are
picked up by your Python 3 installation.

In addition, the ‘develop’ command creates wrapper scripts in the target
script directory that will run your in-development scripts after
ensuring that all your ‘install_requires’ packages are available on
‘sys.path’.

You can deploy the same project to multiple staging areas, e.g.  if you
have multiple projects on the same machine that are sharing the same
project you’re doing development work.

When you’re done with a given development task, you can remove the
project source from a staging area using ‘setup.py develop --uninstall’,
specifying the desired staging area if it’s not the default.

There are several options to control the precise behavior of the
‘develop’ command; see the section on the *note develop: 3a. command
below for more details.

Note that you can also apply setuptools commands to non-setuptools
projects, using commands like this:

     python -c "import setuptools; with open('setup.py') as f: exec(compile(f.read(), 'setup.py', 'exec'))" develop

That is, you can simply list the normal setup commands and options
following the quoted part.


File: setuptools.info,  Node: Tagging and “Daily Build” or “Snapshot” Releases,  Next: Generating Source Distributions,  Prev: “Development Mode”,  Up: Transition to PEP517

1.1.7 Tagging and “Daily Build” or “Snapshot” Releases
------------------------------------------------------

When a set of related projects are under development, it may be
important to track finer-grained version increments than you would
normally use for e.g.  “stable” releases.  While stable releases might
be measured in dotted numbers with alpha/beta/etc.  status codes,
development versions of a project often need to be tracked by revision
or build number or even build date.  This is especially true when
projects in development need to refer to one another, and therefore may
literally need an up-to-the-minute version of something!

To support these scenarios, ‘setuptools’ allows you to “tag” your source
and egg distributions by adding one or more of the following to the
project’s “official” version identifier:

   * A manually-specified pre-release tag, such as “build” or “dev”, or
     a manually-specified post-release tag, such as a build or revision
     number (‘--tag-build=STRING, -bSTRING’)

   * An 8-character representation of the build date (‘--tag-date, -d’),
     as a postrelease tag

You can add these tags by adding ‘egg_info’ and the desired options to
the command line ahead of the ‘sdist’ or ‘bdist’ commands that you want
to generate a daily build or snapshot for.  See the section below on the
*note egg_info: 3d. command for more details.

(Also, before you release your project, be sure to see the section above
on *note Specifying Your Project’s Version: 3e. for more information
about how pre- and post-release tags affect how version numbers are
interpreted.  This is important in order to make sure that dependency
processing tools will know which versions of your project are newer than
others.)

Finally, if you are creating builds frequently, and either building them
in a downloadable location or are copying them to a distribution server,
you should probably also check out the *note rotate: 3f. command, which
lets you automatically delete all but the N most-recently-modified
distributions matching a glob pattern.  So, you can use a command line
like:

     setup.py egg_info -rbDEV bdist_egg rotate -m.egg -k3

to build an egg whose version info includes “DEV-rNNNN” (where NNNN is
the most recent Subversion revision that affected the source tree), and
then delete any egg files from the distribution directory except for the
three that were built most recently.

If you have to manage automated builds for multiple packages, each with
different tagging and rotation policies, you may also want to check out
the *note alias: 40. command, which would let each package define an
alias like ‘daily’ that would perform the necessary tag, build, and
rotate commands.  Then, a simpler script or cron job could just run
‘setup.py daily’ in each project directory.  (And, you could also define
sitewide or per-user default versions of the ‘daily’ alias, so that
projects that didn’t define their own would use the appropriate
defaults.)


File: setuptools.info,  Node: Generating Source Distributions,  Next: Distributing Extensions compiled with Cython,  Prev: Tagging and “Daily Build” or “Snapshot” Releases,  Up: Transition to PEP517

1.1.8 Generating Source Distributions
-------------------------------------

‘setuptools’ enhances the distutils’ default algorithm for source file
selection with pluggable endpoints for looking up files to include.  If
you are using a revision control system, and your source distributions
only need to include files that you’re tracking in revision control, use
a corresponding plugin instead of writing a ‘MANIFEST.in’ file.  See the
section below on *note Adding Support for Revision Control Systems: 32.
for information on plugins.

If you need to include automatically generated files, or files that are
kept in an unsupported revision control system, you’ll need to create a
‘MANIFEST.in’ file to specify any files that the default file location
algorithm doesn’t catch.  See the distutils documentation for more
information on the format of the ‘MANIFEST.in’ file.

But, be sure to ignore any part of the distutils documentation that
deals with ‘MANIFEST’ or how it’s generated from ‘MANIFEST.in’;
setuptools shields you from these issues and doesn’t work the same way
in any case.  Unlike the distutils, setuptools regenerates the source
distribution manifest file every time you build a source distribution,
and it builds it inside the project’s ‘.egg-info’ directory, out of the
way of your main project directory.  You therefore need not worry about
whether it is up-to-date or not.

Indeed, because setuptools’ approach to determining the contents of a
source distribution is so much simpler, its ‘sdist’ command omits nearly
all of the options that the distutils’ more complex ‘sdist’ process
requires.  For all practical purposes, you’ll probably use only the
‘--formats’ option, if you use any option at all.

* Menu:

* Making “Official” (Non-Snapshot) Releases: Making “Official” Non-Snapshot Releases.


File: setuptools.info,  Node: Making “Official” Non-Snapshot Releases,  Up: Generating Source Distributions

1.1.8.1 Making “Official” (Non-Snapshot) Releases
.................................................

When you make an official release, creating source or binary
distributions, you will need to override the tag settings from
‘setup.cfg’, so that you don’t end up registering versions like
‘foobar-0.7a1.dev-r34832’.  This is easy to do if you are developing on
the trunk and using tags or branches for your releases - just make the
change to ‘setup.cfg’ after branching or tagging the release, so the
trunk will still produce development snapshots.

Alternately, if you are not branching for releases, you can override the
default version options on the command line, using something like:

     setup.py egg_info -Db "" sdist bdist_egg

The first part of this command (‘egg_info -Db ""’) will override the
configured tag information, before creating source and binary eggs.
Thus, these commands will use the plain version from your ‘setup.py’,
without adding the build designation string.

Of course, if you will be doing this a lot, you may wish to create a
personal alias for this operation, e.g.:

     setup.py alias -u release egg_info -Db ""

You can then use it like this:

     setup.py release sdist bdist_egg

Or of course you can create more elaborate aliases that do all of the
above.  See the sections below on the *note egg_info: 3d. and *note
alias: 40. commands for more ideas.


File: setuptools.info,  Node: Distributing Extensions compiled with Cython,  Next: Specifying Your Project’s Version,  Prev: Generating Source Distributions,  Up: Transition to PEP517

1.1.9 Distributing Extensions compiled with Cython
--------------------------------------------------

‘setuptools’ will detect at build time whether Cython is installed or
not.  If Cython is not found ‘setuptools’ will ignore pyx files.

To ensure Cython is available, include Cython in the build-requires
section of your pyproject.toml:

     [build-system]
     requires=[..., "cython"]

Built with pip 10 or later, that declaration is sufficient to include
Cython in the build.  For broader compatibility, declare the dependency
in your setup-requires of setup.cfg:

     [options]
     setup_requires =
         ...
         cython

As long as Cython is present in the build environment, ‘setuptools’
includes transparent support for building Cython extensions, as long as
extensions are defined using ‘setuptools.Extension’.

If you follow these rules, you can safely list ‘.pyx’ files as the
source of your ‘Extension’ objects in the setup script.  If it is, then
‘setuptools’ will use it.

Of course, for this to work, your source distributions must include the
C code generated by Cython, as well as your original ‘.pyx’ files.  This
means that you will probably want to include current ‘.c’ files in your
revision control system, rebuilding them whenever you check changes in
for the ‘.pyx’ source files.  This will ensure that people tracking your
project in a revision control system will be able to build it even if
they don’t have Cython installed, and that your source releases will be
similarly usable with or without Cython.


File: setuptools.info,  Node: Specifying Your Project’s Version,  Next: Creating distutils Extensions,  Prev: Distributing Extensions compiled with Cython,  Up: Transition to PEP517

1.1.10 Specifying Your Project’s Version
----------------------------------------

Setuptools can work well with most versioning schemes; there are,
however, a few special things to watch out for, in order to ensure that
setuptools and other tools can always tell what version of your package
is newer than another version.  Knowing these things will also help you
correctly specify what versions of other projects your project depends
on.

A version consists of an alternating series of release numbers and
pre-release or post-release tags.  A release number is a series of
digits punctuated by dots, such as ‘2.4’ or ‘0.5’.  Each series of
digits is treated numerically, so releases ‘2.1’ and ‘2.1.0’ are
different ways to spell the same release number, denoting the first
subrelease of release 2.  But ‘2.10’ is the `tenth' subrelease of
release 2, and so is a different and newer release from ‘2.1’ or
‘2.1.0’.  Leading zeros within a series of digits are also ignored, so
‘2.01’ is the same as ‘2.1’, and different from ‘2.0.1’.

Following a release number, you can have either a pre-release or
post-release tag.  Pre-release tags make a version be considered `older'
than the version they are appended to.  So, revision ‘2.4’ is `newer'
than revision ‘2.4c1’, which in turn is newer than ‘2.4b1’ or ‘2.4a1’.
Postrelease tags make a version be considered `newer' than the version
they are appended to.  So, revisions like ‘2.4-1’ and ‘2.4pl3’ are newer
than ‘2.4’, but are `older' than ‘2.4.1’ (which has a higher release
number).

A pre-release tag is a series of letters that are alphabetically before
“final”.  Some examples of prerelease tags would include ‘alpha’,
‘beta’, ‘a’, ‘c’, ‘dev’, and so on.  You do not have to place a dot or
dash before the prerelease tag if it’s immediately after a number, but
it’s okay to do so if you prefer.  Thus, ‘2.4c1’ and ‘2.4.c1’ and
‘2.4-c1’ all represent release candidate 1 of version ‘2.4’, and are
treated as identical by setuptools.

In addition, there are three special prerelease tags that are treated as
if they were the letter ‘c’: ‘pre’, ‘preview’, and ‘rc’.  So, version
‘2.4rc1’, ‘2.4pre1’ and ‘2.4preview1’ are all the exact same version as
‘2.4c1’, and are treated as identical by setuptools.

A post-release tag is either a series of letters that are alphabetically
greater than or equal to “final”, or a dash (‘-’).  Post-release tags
are generally used to separate patch numbers, port numbers, build
numbers, revision numbers, or date stamps from the release number.  For
example, the version ‘2.4-r1263’ might denote Subversion revision 1263
of a post-release patch of version ‘2.4’.  Or you might use
‘2.4-20051127’ to denote a date-stamped post-release.

Notice that after each pre or post-release tag, you are free to place
another release number, followed again by more pre- or post-release
tags.  For example, ‘0.6a9.dev-r41475’ could denote Subversion revision
41475 of the in- development version of the ninth alpha of release 0.6.
Notice that ‘dev’ is a pre-release tag, so this version is a `lower'
version number than ‘0.6a9’, which would be the actual ninth alpha of
release 0.6.  But the ‘-r41475’ is a post-release tag, so this version
is `newer' than ‘0.6a9.dev’.

For the most part, setuptools’ interpretation of version numbers is
intuitive, but here are a few tips that will keep you out of trouble in
the corner cases:

   * Don’t stick adjoining pre-release tags together without a dot or
     number between them.  Version ‘1.9adev’ is the ‘adev’ prerelease of
     ‘1.9’, `not' a development pre-release of ‘1.9a’.  Use ‘.dev’
     instead, as in ‘1.9a.dev’, or separate the prerelease tags with a
     number, as in ‘1.9a0dev’.  ‘1.9a.dev’, ‘1.9a0dev’, and even
     ‘1.9.a.dev’ are identical versions from setuptools’ point of view,
     so you can use whatever scheme you prefer.

   * If you want to be certain that your chosen numbering scheme works
     the way you think it will, you can use the
     ‘pkg_resources.parse_version()’ function to compare different
     version numbers:

          >>> from pkg_resources import parse_version
          >>> parse_version("1.9.a.dev") == parse_version("1.9a0dev")
          True
          >>> parse_version("2.1-rc2") < parse_version("2.1")
          True
          >>> parse_version("0.6a9dev-r41475") < parse_version("0.6a9")
          True

Once you’ve decided on a version numbering scheme for your project, you
can have setuptools automatically tag your in-development releases with
various pre- or post-release tags.  See the following sections for more
details:

   * *note Tagging and "Daily Build" or "Snapshot" Releases: 3c.

   * The *note egg_info: 3d. command


File: setuptools.info,  Node: Creating distutils Extensions,  Next: Configuring setup using setup cfg files,  Prev: Specifying Your Project’s Version,  Up: Transition to PEP517

1.1.11 Creating ‘distutils’ Extensions
--------------------------------------

It can be hard to add new commands or setup arguments to the distutils.
But the ‘setuptools’ package makes it a bit easier, by allowing you to
distribute a distutils extension as a separate project, and then have
projects that need the extension just refer to it in their
‘setup_requires’ argument.

With ‘setuptools’, your distutils extension projects can hook in new
commands and ‘setup()’ arguments just by defining “entry points”.  These
are mappings from command or argument names to a specification of where
to import a handler from.  (See the section on *note Advertising
Behavior: 25. above for some more background on entry points.)

* Menu:

* Adding Commands::
* Adding setup() Arguments: Adding setup Arguments.
* Customizing Distribution Options::
* Adding new EGG-INFO Files::
* Adding Support for Revision Control Systems::


File: setuptools.info,  Node: Adding Commands,  Next: Adding setup Arguments,  Up: Creating distutils Extensions

1.1.11.1 Adding Commands
........................

You can add new ‘setup’ commands by defining entry points in the
‘distutils.commands’ group.  For example, if you wanted to add a ‘foo’
command, you might add something like this to your distutils extension
project’s setup script:

     setup(
         # ...
         entry_points={
             "distutils.commands": [
                 "foo = mypackage.some_module:foo",
             ],
         },
     )

(Assuming, of course, that the ‘foo’ class in ‘mypackage.some_module’ is
a ‘setuptools.Command’ subclass.)

Once a project containing such entry points has been activated on
‘sys.path’, (e.g.  by running “install” or “develop” with a
site-packages installation directory) the command(s) will be available
to any ‘setuptools’-based setup scripts.  It is not necessary to use the
‘--command-packages’ option or to monkeypatch the ‘distutils.command’
package to install your commands; ‘setuptools’ automatically adds a
wrapper to the distutils to search for entry points in the active
distributions on ‘sys.path’.  In fact, this is how setuptools’ own
commands are installed: the setuptools project’s setup script defines
entry points for them!


File: setuptools.info,  Node: Adding setup Arguments,  Next: Customizing Distribution Options,  Prev: Adding Commands,  Up: Creating distutils Extensions

1.1.11.2 Adding ‘setup()’ Arguments
...................................

     Warning: Adding arguments to setup is discouraged as such arguments
     are only supported through imperative execution and not supported
     through declarative config.

Sometimes, your commands may need additional arguments to the ‘setup()’
call.  You can enable this by defining entry points in the
‘distutils.setup_keywords’ group.  For example, if you wanted a
‘setup()’ argument called ‘bar_baz’, you might add something like this
to your distutils extension project’s setup script:

     setup(
         # ...
         entry_points={
             "distutils.commands": [
                 "foo = mypackage.some_module:foo",
             ],
             "distutils.setup_keywords": [
                 "bar_baz = mypackage.some_module:validate_bar_baz",
             ],
         },
     )

The idea here is that the entry point defines a function that will be
called to validate the ‘setup()’ argument, if it’s supplied.  The
‘Distribution’ object will have the initial value of the attribute set
to ‘None’, and the validation function will only be called if the
‘setup()’ call sets it to a non-None value.  Here’s an example
validation function:

     def assert_bool(dist, attr, value):
         """Verify that value is True, False, 0, or 1"""
         if bool(value) != value:
             raise DistutilsSetupError(
                 "%r must be a boolean value (got %r)" % (attr,value)
             )

Your function should accept three arguments: the ‘Distribution’ object,
the attribute name, and the attribute value.  It should raise a
‘DistutilsSetupError’ (from the ‘distutils.errors’ module) if the
argument is invalid.  Remember, your function will only be called with
non-None values, and the default value of arguments defined this way is
always None.  So, your commands should always be prepared for the
possibility that the attribute will be ‘None’ when they access it later.

If more than one active distribution defines an entry point for the same
‘setup()’ argument, `all' of them will be called.  This allows multiple
distutils extensions to define a common argument, as long as they agree
on what values of that argument are valid.

Also note that as with commands, it is not necessary to subclass or
monkeypatch the distutils ‘Distribution’ class in order to add your
arguments; it is sufficient to define the entry points in your
extension, as long as any setup script using your extension lists your
project in its ‘setup_requires’ argument.


File: setuptools.info,  Node: Customizing Distribution Options,  Next: Adding new EGG-INFO Files,  Prev: Adding setup Arguments,  Up: Creating distutils Extensions

1.1.11.3 Customizing Distribution Options
.........................................

Plugins may wish to extend or alter the options on a Distribution object
to suit the purposes of that project.  For example, a tool that infers
the ‘Distribution.version’ from SCM-metadata may need to hook into the
option finalization.  To enable this feature, Setuptools offers an entry
point “setuptools.finalize_distribution_options”.  That entry point must
be a callable taking one argument (the Distribution instance).

If the callable has an ‘.order’ property, that value will be used to
determine the order in which the hook is called.  Lower numbers are
called first and the default is zero (0).

Plugins may read, alter, and set properties on the distribution, but
each plugin is encouraged to load the configuration/settings for their
behavior independently.


File: setuptools.info,  Node: Adding new EGG-INFO Files,  Next: Adding Support for Revision Control Systems,  Prev: Customizing Distribution Options,  Up: Creating distutils Extensions

1.1.11.4 Adding new EGG-INFO Files
..................................

Some extensible applications or frameworks may want to allow third
parties to develop plugins with application or framework-specific
metadata included in the plugins’ EGG-INFO directory, for easy access
via the ‘pkg_resources’ metadata API. The easiest way to allow this is
to create a distutils extension to be used from the plugin projects’
setup scripts (via ‘setup_requires’) that defines a new setup keyword,
and then uses that data to write an EGG-INFO file when the ‘egg_info’
command is run.

The ‘egg_info’ command looks for extension points in an
‘egg_info.writers’ group, and calls them to write the files.  Here’s a
simple example of a distutils extension defining a setup argument
‘foo_bar’, which is a list of lines that will be written to
‘foo_bar.txt’ in the EGG-INFO directory of any project that uses the
argument:

     setup(
         # ...
         entry_points={
             "distutils.setup_keywords": [
                 "foo_bar = setuptools.dist:assert_string_list",
             ],
             "egg_info.writers": [
                 "foo_bar.txt = setuptools.command.egg_info:write_arg",
             ],
         },
     )

This simple example makes use of two utility functions defined by
setuptools for its own use: a routine to validate that a setup keyword
is a sequence of strings, and another one that looks up a setup argument
and writes it to a file.  Here’s what the writer utility looks like:

     def write_arg(cmd, basename, filename):
         argname = os.path.splitext(basename)[0]
         value = getattr(cmd.distribution, argname, None)
         if value is not None:
             value = "\n".join(value) + "\n"
         cmd.write_or_delete_file(argname, filename, value)

As you can see, ‘egg_info.writers’ entry points must be a function
taking three arguments: a ‘egg_info’ command instance, the basename of
the file to write (e.g.  ‘foo_bar.txt’), and the actual full filename
that should be written to.

In general, writer functions should honor the command object’s ‘dry_run’
setting when writing files, and use the ‘distutils.log’ object to do any
console output.  The easiest way to conform to this requirement is to
use the ‘cmd’ object’s ‘write_file()’, ‘delete_file()’, and
‘write_or_delete_file()’ methods exclusively for your file operations.
See those methods’ docstrings for more details.


File: setuptools.info,  Node: Adding Support for Revision Control Systems,  Prev: Adding new EGG-INFO Files,  Up: Creating distutils Extensions

1.1.11.5 Adding Support for Revision Control Systems
....................................................

If the files you want to include in the source distribution are tracked
using Git, Mercurial or SVN, you can use the following packages to
achieve that:

   - Git and Mercurial: setuptools_scm(1)

   - SVN: setuptools_svn(2)

If you would like to create a plugin for ‘setuptools’ to find files
tracked by another revision control system, you can do so by adding an
entry point to the ‘setuptools.file_finders’ group.  The entry point
should be a function accepting a single directory name, and should yield
all the filenames within that directory (and any subdirectories thereof)
that are under revision control.

For example, if you were going to create a plugin for a revision control
system called “foobar”, you would write a function something like this:

     def find_files_for_foobar(dirname):
         # loop to yield paths that start with `dirname`

And you would register it in a setup script using something like this:

     entry_points={
         "setuptools.file_finders": [
             "foobar = my_foobar_module:find_files_for_foobar",
         ]
     }

Then, anyone who wants to use your plugin can simply install it, and
their local setuptools installation will be able to find the necessary
files.

It is not necessary to distribute source control plugins with projects
that simply use the other source control system, or to specify the
plugins in ‘setup_requires’.  When you create a source distribution with
the ‘sdist’ command, setuptools automatically records what files were
found in the ‘SOURCES.txt’ file.  That way, recipients of source
distributions don’t need to have revision control at all.  However, if
someone is working on a package by checking out with that system, they
will need the same plugin(s) that the original author is using.

A few important points for writing revision control file finders:

   * Your finder function MUST return relative paths, created by
     appending to the passed-in directory name.  Absolute paths are NOT
     allowed, nor are relative paths that reference a parent directory
     of the passed-in directory.

   * Your finder function MUST accept an empty string as the directory
     name, meaning the current directory.  You MUST NOT convert this to
     a dot; just yield relative paths.  So, yielding a subdirectory
     named ‘some/dir’ under the current directory should NOT be rendered
     as ‘./some/dir’ or ‘/somewhere/some/dir’, but `always' as simply
     ‘some/dir’

   * Your finder function SHOULD NOT raise any errors, and SHOULD deal
     gracefully with the absence of needed programs (i.e., ones
     belonging to the revision control system itself.  It `may',
     however, use ‘distutils.log.warn()’ to inform the user of the
     missing program(s).

   ---------- Footnotes ----------

   (1) https://pypi.org/project/setuptools_scm/

   (2) https://pypi.org/project/setuptools_svn/


File: setuptools.info,  Node: Configuring setup using setup cfg files,  Next: New and Changed setup Keywords,  Prev: Creating distutils Extensions,  Up: Transition to PEP517

1.1.12 Configuring setup() using setup.cfg files
------------------------------------------------

     Note: New in 30.3.0 (8 Dec 2016).

     Important: If compatibility with legacy builds (i.e.  those not
     using the PEP 517(1) build API) is desired, a ‘setup.py’ file
     containing a ‘setup()’ function call is still required even if your
     configuration resides in ‘setup.cfg’.

‘Setuptools’ allows using configuration files (usually ‘setup.cfg’) to
define a package’s metadata and other options that are normally supplied
to the ‘setup()’ function (declarative config).

This approach not only allows automation scenarios but also reduces
boilerplate code in some cases.

     Note: This implementation has limited compatibility with the
     distutils2-like ‘setup.cfg’ sections used by the ‘pbr’ and ‘d2to1’
     packages.

     Namely: only metadata-related keys from ‘metadata’ section are
     supported (except for ‘description-file’); keys from ‘files’,
     ‘entry_points’ and ‘backwards_compat’ are not supported.

     [metadata]
     name = my_package
     version = attr: src.VERSION
     description = My package description
     long_description = file: README.rst, CHANGELOG.rst, LICENSE.rst
     keywords = one, two
     license = BSD 3-Clause License
     classifiers =
         Framework :: Django
         License :: OSI Approved :: BSD License
         Programming Language :: Python :: 3
         Programming Language :: Python :: 3.5

     [options]
     zip_safe = False
     include_package_data = True
     packages = find:
     scripts =
         bin/first.py
         bin/second.py
     install_requires =
         requests
         importlib; python_version == "2.6"

     [options.package_data]
     * = *.txt, *.rst
     hello = *.msg

     [options.extras_require]
     pdf = ReportLab>=1.2; RXP
     rest = docutils>=0.3; pack ==1.1, ==1.3

     [options.packages.find]
     exclude =
         src.subpackage1
         src.subpackage2

     [options.data_files]
     /etc/my_package =
         site.d/00_default.conf
         host.d/00_default.conf
     data = data/img/logo.png, data/svg/icon.svg

Metadata and options are set in the config sections of the same name.

   * Keys are the same as the keyword arguments one provides to the
     ‘setup()’ function.

   * Complex values can be written comma-separated or placed one per
     line in `dangling' config values.  The following are equivalent:

          [metadata]
          keywords = one, two

          [metadata]
          keywords =
              one
              two

   * In some cases, complex values can be provided in dedicated
     subsections for clarity.

   * Some keys allow ‘file:’, ‘attr:’, ‘find:’, and ‘find_namespace:’
     directives in order to cover common usecases.

   * Unknown keys are ignored.

* Menu:

* Using a src/ layout::
* Specifying values::

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0517


File: setuptools.info,  Node: Using a src/ layout,  Next: Specifying values,  Up: Configuring setup using setup cfg files

1.1.12.1 Using a ‘src/’ layout
..............................

One commonly used package configuration has all the module source code
in a subdirectory (often called the ‘src/’ layout), like this:

     ├── src
     │   └── mypackage
     │       ├── __init__.py
     │       └── mod1.py
     ├── setup.py
     └── setup.cfg

You can set up your ‘setup.cfg’ to automatically find all your packages
in the subdirectory like this:

     # This example contains just the necessary options for a src-layout, set up
     # the rest of the file as described above.

     [options]
     package_dir=
         =src
     packages=find:

     [options.packages.find]
     where=src


File: setuptools.info,  Node: Specifying values,  Prev: Using a src/ layout,  Up: Configuring setup using setup cfg files

1.1.12.2 Specifying values
..........................

Some values are treated as simple strings, some allow more logic.

Type names used below:

   * ‘str’ - simple string

   * ‘list-comma’ - dangling list or string of comma-separated values

   * ‘list-semi’ - dangling list or string of semicolon-separated values

   * ‘bool’ - ‘True’ is 1, yes, true

   * ‘dict’ - list-comma where keys are separated from values by ‘=’

   * ‘section’ - values are read from a dedicated (sub)section

Special directives:

   * ‘attr:’ - Value is read from a module attribute.  ‘attr:’ supports
     callables and iterables; unsupported types are cast using ‘str()’.

     In order to support the common case of a literal value assigned to
     a variable in a module containing (directly or indirectly)
     third-party imports, ‘attr:’ first tries to read the value from the
     module by examining the module’s AST. If that fails, ‘attr:’ falls
     back to importing the module.

   * ‘file:’ - Value is read from a list of files and then concatenated

     Note: The ‘file:’ directive is sandboxed and won’t reach anything
     outside the directory containing ‘setup.py’.

* Menu:

* Metadata::
* Options::


File: setuptools.info,  Node: Metadata,  Next: Options,  Up: Specifying values

1.1.12.3 Metadata
.................

     Note: The aliases given below are supported for compatibility
     reasons, but their use is not advised.

Key                                Aliases               Type                  Minimum Version     Notes
                                                                                                   
-------------------------------------------------------------------------------------------------------------
                                                                                                   
name                                                     str
                                                         
                                                                                                   
version                                                  attr:, file:, str     39.2.0                1. 
                                                                               
                                                                                                   
url                                home-page             str
                                                         
                                                                                                   
download_url                       download-url          str
                                                         
                                                                                                   
project_urls                                             dict                  38.3.0
                                                                               
                                                                                                   
author                                                   str
                                                         
                                                                                                   
author_email                       author-email          str
                                                         
                                                                                                   
maintainer                                               str
                                                         
                                                                                                   
maintainer_email                   maintainer-email      str
                                                         
                                                                                                   
classifiers                        classifier            file:, list-comma
                                                         
                                                                                                   
license                                                  str
                                                         
                                                                                                   
license_file                                             str
                                                         
                                                                                                   
license_files                                            list-comma
                                                         
                                                                                                   
description                        summary               file:, str
                                                         
                                                                                                   
long_description                   long-description      file:, str
                                                         
                                                                                                   
long_description_content_type                            str                   38.6.0
                                                                               
                                                                                                   
keywords                                                 list-comma
                                                         
                                                                                                   
platforms                          platform              list-comma
                                                         
                                                                                                   
provides                                                 list-comma
                                                         
                                                                                                   
requires                                                 list-comma
                                                         
                                                                                                   
obsoletes                                                list-comma
                                                         

     Note: A version loaded using the ‘file:’ directive must comply with
     PEP 440.  It is easy to accidentally put something other than a
     valid version string in such a file, so validation is stricter in
     this case.

Notes: 1.  The ‘version’ file attribute has only been supported since
39.2.0.


File: setuptools.info,  Node: Options,  Prev: Metadata,  Up: Specifying values

1.1.12.4 Options
................

Key                         Type                                    Minimum Version     Notes
                                                                                        
--------------------------------------------------------------------------------------------------
                                                                                        
zip_safe                    bool
                            
                                                                                        
setup_requires              list-semi
                            
                                                                                        
install_requires            list-semi
                            
                                                                                        
extras_require              section
                            
                                                                                        
python_requires             str
                            
                                                                                        
entry_points                file:, section
                            
                                                                                        
use_2to3                    bool
                            
                                                                                        
use_2to3_fixers             list-comma
                            
                                                                                        
use_2to3_exclude_fixers     list-comma
                            
                                                                                        
convert_2to3_doctests       list-comma
                            
                                                                                        
scripts                     list-comma
                            
                                                                                        
eager_resources             list-comma
                            
                                                                                        
dependency_links            list-comma
                            
                                                                                        
tests_require               list-semi
                            
                                                                                        
include_package_data        bool
                            
                                                                                        
packages                    find:, find_namespace:, list-comma
                            
                                                                                        
package_dir                 dict
                            
                                                                                        
package_data                section                                                       1. 
                            
                                                                                        
exclude_package_data        section
                            
                                                                                        
namespace_packages          list-comma
                            
                                                                                        
py_modules                  list-comma
                            
                                                                                        
data_files                  dict                                    40.6.0
                                                                    

     Note: `packages' - The ‘find:’ and ‘find_namespace:’ directive can
     be further configured in a dedicated subsection
     ‘options.packages.find’.  This subsection accepts the same keys as
     the ‘setuptools.find_packages’ and the
     ‘setuptools.find_namespace_packages’ function: ‘where’, ‘include’,
     and ‘exclude’.

     `find_namespace directive' - The ‘find_namespace:’ directive is
     supported since Python >=3.3.

Notes: 1.  In the ‘package_data’ section, a key named with a single
asterisk (‘*’) refers to all packages, in lieu of the empty string used
in ‘setup.py’.


File: setuptools.info,  Node: New and Changed setup Keywords,  Next: Command Reference,  Prev: Configuring setup using setup cfg files,  Up: Transition to PEP517

1.1.13 New and Changed ‘setup()’ Keywords
-----------------------------------------

The following keyword arguments to ‘setup()’ are added or changed by
‘setuptools’.  All of them are optional; you do not have to supply them
unless you need the associated ‘setuptools’ feature.

‘include_package_data’

     If set to ‘True’, this tells ‘setuptools’ to automatically include
     any data files it finds inside your package directories that are
     specified by your ‘MANIFEST.in’ file.  For more information, see
     the section on *note Including Data Files: 12.

‘exclude_package_data’

     A dictionary mapping package names to lists of glob patterns that
     should be `excluded' from your package directories.  You can use
     this to trim back any excess files included by
     ‘include_package_data’.  For a complete description and examples,
     see the section on *note Including Data Files: 12.

‘package_data’

     A dictionary mapping package names to lists of glob patterns.  For
     a complete description and examples, see the section on *note
     Including Data Files: 12.  You do not need to use this option if
     you are using ‘include_package_data’, unless you need to add e.g.
     files that are generated by your setup script and build process.
     (And are therefore not in source control or are files that you
     don’t want to include in your source distribution.)

‘zip_safe’

     A boolean (True or False) flag specifying whether the project can
     be safely installed and run from a zip file.  If this argument is
     not supplied, the ‘bdist_egg’ command will have to analyze all of
     your project’s contents for possible problems each time it builds
     an egg.

‘install_requires’

     A string or list of strings specifying what other distributions
     need to be installed when this one is.  See the section on *note
     Declaring required dependency: 2b. for details and examples of the
     format of this argument.

‘entry_points’

     A dictionary mapping entry point group names to strings or lists of
     strings defining the entry points.  Entry points are used to
     support dynamic discovery of services or plugins provided by a
     project.  See *note Advertising Behavior: 25. for details and
     examples of the format of this argument.  In addition, this keyword
     is used to support *note Automatic Script Creation: 21.

‘extras_require’

     A dictionary mapping names of “extras” (optional features of your
     project) to strings or lists of strings specifying what other
     distributions must be installed to support those features.  See the
     section on *note Declaring required dependency: 2b. for details and
     examples of the format of this argument.

‘python_requires’

     A string corresponding to a version specifier (as defined in PEP
     440) for the Python version, used to specify the Requires-Python
     defined in PEP 345.

‘setup_requires’

     A string or list of strings specifying what other distributions
     need to be present in order for the `setup script' to run.
     ‘setuptools’ will attempt to obtain these (using pip if available)
     before processing the rest of the setup script or commands.  This
     argument is needed if you are using distutils extensions as part of
     your build process; for example, extensions that process setup()
     arguments and turn them into EGG-INFO metadata files.

     (Note: projects listed in ‘setup_requires’ will NOT be
     automatically installed on the system where the setup script is
     being run.  They are simply downloaded to the ./.eggs directory if
     they’re not locally available already.  If you want them to be
     installed, as well as being available when the setup script is run,
     you should add them to ‘install_requires’ `and' ‘setup_requires’.)

‘dependency_links’

     A list of strings naming URLs to be searched when satisfying
     dependencies.  These links will be used if needed to install
     packages specified by ‘setup_requires’ or ‘tests_require’.  They
     will also be written into the egg’s metadata for use during install
     by tools that support them.

‘namespace_packages’

     A list of strings naming the project’s “namespace packages”.  A
     namespace package is a package that may be split across multiple
     project distributions.  For example, Zope 3’s ‘zope’ package is a
     namespace package, because subpackages like ‘zope.interface’ and
     ‘zope.publisher’ may be distributed separately.  The egg runtime
     system can automatically merge such subpackages into a single
     parent package at runtime, as long as you declare them in each
     project that contains any subpackages of the namespace package, and
     as long as the namespace package’s ‘__init__.py’ does not contain
     any code other than a namespace declaration.  See the section below
     on *note Using find_namespace; or find_namespace_packages: 1c. for
     more information.

‘test_suite’

     A string naming a ‘unittest.TestCase’ subclass (or a package or
     module containing one or more of them, or a method of such a
     subclass), or naming a function that can be called with no
     arguments and returns a ‘unittest.TestSuite’.  If the named suite
     is a module, and the module has an ‘additional_tests()’ function,
     it is called and the results are added to the tests to be run.  If
     the named suite is a package, any submodules and subpackages are
     recursively added to the overall test suite.

     Specifying this argument enables use of the *note test: 56. command
     to run the specified test suite, e.g.  via ‘setup.py test’.  See
     the section on the *note test: 56. command below for more details.

     New in 41.5.0: Deprecated the test command.

‘tests_require’

     If your project’s tests need one or more additional packages
     besides those needed to install it, you can use this option to
     specify them.  It should be a string or list of strings specifying
     what other distributions need to be present for the package’s tests
     to run.  When you run the ‘test’ command, ‘setuptools’ will attempt
     to obtain these (using pip if available).  Note that these required
     projects will `not' be installed on the system where the tests are
     run, but only downloaded to the project’s setup directory if
     they’re not already installed locally.

     New in 41.5.0: Deprecated the test command.

‘test_loader’

     If you would like to use a different way of finding tests to run
     than what setuptools normally uses, you can specify a module name
     and class name in this argument.  The named class must be
     instantiable with no arguments, and its instances must support the
     ‘loadTestsFromNames()’ method as defined in the Python ‘unittest’
     module’s ‘TestLoader’ class.  Setuptools will pass only one test
     “name” in the ‘names’ argument: the value supplied for the
     ‘test_suite’ argument.  The loader you specify may interpret this
     string in any way it likes, as there are no restrictions on what
     may be contained in a ‘test_suite’ string.

     The module name and class name must be separated by a ‘:’.  The
     default value of this argument is
     ‘"setuptools.command.test:ScanningLoader"’.  If you want to use the
     default ‘unittest’ behavior, you can specify
     ‘"unittest:TestLoader"’ as your ‘test_loader’ argument instead.
     This will prevent automatic scanning of submodules and subpackages.

     The module and class you specify here may be contained in another
     package, as long as you use the ‘tests_require’ option to ensure
     that the package containing the loader class is available when the
     ‘test’ command is run.

     New in 41.5.0: Deprecated the test command.

‘eager_resources’

     A list of strings naming resources that should be extracted
     together, if any of them is needed, or if any C extensions included
     in the project are imported.  This argument is only useful if the
     project will be installed as a zipfile, and there is a need to have
     all of the listed resources be extracted to the filesystem `as a
     unit'.  Resources listed here should be “/”-separated paths,
     relative to the source root, so to list a resource ‘foo.png’ in
     package ‘bar.baz’, you would include the string ‘bar/baz/foo.png’
     in this argument.

     If you only need to obtain resources one at a time, or you don’t
     have any C extensions that access other files in the project (such
     as data files or shared libraries), you probably do NOT need this
     argument and shouldn’t mess with it.  For more details on how this
     argument works, see the section below on *note Automatic Resource
     Extraction: 58.

‘use_2to3’

     Convert the source code from Python 2 to Python 3 with 2to3 during
     the build process.  See *note Supporting both Python 2 and Python 3
     with Setuptools: 59. for more details.

‘convert_2to3_doctests’

     List of doctest source files that need to be converted with 2to3.
     See *note Supporting both Python 2 and Python 3 with Setuptools:
     59. for more details.

‘use_2to3_fixers’

     A list of modules to search for additional fixers to be used during
     the 2to3 conversion.  See *note Supporting both Python 2 and Python
     3 with Setuptools: 59. for more details.

‘project_urls’

     An arbitrary map of URL names to hyperlinks, allowing more
     extensible documentation of where various resources can be found
     than the simple ‘url’ and ‘download_url’ options provide.


File: setuptools.info,  Node: Command Reference,  Next: Using setuptools to package and distribute your project,  Prev: New and Changed setup Keywords,  Up: Transition to PEP517

1.1.14 Command Reference
------------------------

* Menu:

* alias - Define shortcuts for commonly used commands::
* bdist_egg - Create a Python Egg for the project::
* develop - Deploy the project source in “Development Mode”::
* egg_info - Create egg metadata and set build tags::
* rotate - Delete outdated distribution files::
* saveopts - Save used options to a configuration file::
* setopt - Set a distutils or setuptools option in a config file::
* test - Build package and run a unittest suite::
* upload - Upload source and/or egg distributions to PyPI::


File: setuptools.info,  Node: alias - Define shortcuts for commonly used commands,  Next: bdist_egg - Create a Python Egg for the project,  Up: Command Reference

1.1.14.1 ‘alias’ - Define shortcuts for commonly used commands
..............................................................

Sometimes, you need to use the same commands over and over, but you
can’t necessarily set them as defaults.  For example, if you produce
both development snapshot releases and “stable” releases of a project,
you may want to put the distributions in different places, or use
different ‘egg_info’ tagging options, etc.  In these cases, it doesn’t
make sense to set the options in a distutils configuration file, because
the values of the options changed based on what you’re trying to do.

Setuptools therefore allows you to define “aliases” - shortcut names for
an arbitrary string of commands and options, using ‘setup.py alias
aliasname expansion’, where aliasname is the name of the new alias, and
the remainder of the command line supplies its expansion.  For example,
this command defines a sitewide alias called “daily”, that sets various
‘egg_info’ tagging options:

     setup.py alias --global-config daily egg_info --tag-build=development

Once the alias is defined, it can then be used with other setup
commands, e.g.:

     setup.py daily bdist_egg        # generate a daily-build .egg file
     setup.py daily sdist            # generate a daily-build source distro
     setup.py daily sdist bdist_egg  # generate both

The above commands are interpreted as if the word ‘daily’ were replaced
with ‘egg_info --tag-build=development’.

Note that setuptools will expand each alias `at most once' in a given
command line.  This serves two purposes.  First, if you accidentally
create an alias loop, it will have no effect; you’ll instead get an
error message about an unknown command.  Second, it allows you to define
an alias for a command, that uses that command.  For example, this
(project-local) alias:

     setup.py alias bdist_egg bdist_egg rotate -k1 -m.egg

redefines the ‘bdist_egg’ command so that it always runs the ‘rotate’
command afterwards to delete all but the newest egg file.  It doesn’t
loop indefinitely on ‘bdist_egg’ because the alias is only expanded once
when used.

You can remove a defined alias with the ‘--remove’ (or ‘-r’) option,
e.g.:

     setup.py alias --global-config --remove daily

would delete the “daily” alias we defined above.

Aliases can be defined on a project-specific, per-user, or sitewide
basis.  The default is to define or remove a project-specific alias, but
you can use any of the *note configuration file options: 5d. (listed
under the *note saveopts: 5e. command, below) to determine which
distutils configuration file an aliases will be added to (or removed
from).

Note that if you omit the “expansion” argument to the ‘alias’ command,
you’ll get output showing that alias’ current definition (and what
configuration file it’s defined in).  If you omit the alias name as
well, you’ll get a listing of all current aliases along with their
configuration file locations.


File: setuptools.info,  Node: bdist_egg - Create a Python Egg for the project,  Next: develop - Deploy the project source in “Development Mode”,  Prev: alias - Define shortcuts for commonly used commands,  Up: Command Reference

1.1.14.2 ‘bdist_egg’ - Create a Python Egg for the project
..........................................................

     Warning: `eggs' are deprecated in favor of wheels, and not
     supported by pip.

This command generates a Python Egg (‘.egg’ file) for the project.
Python Eggs are the preferred binary distribution format for
EasyInstall, because they are cross-platform (for “pure” packages),
directly importable, and contain project metadata including scripts and
information about the project’s dependencies.  They can be simply
downloaded and added to ‘sys.path’ directly, or they can be placed in a
directory on ‘sys.path’ and then automatically discovered by the egg
runtime system.

This command runs the *note egg_info: 3d. command (if it hasn’t already
run) to update the project’s metadata (‘.egg-info’) directory.  If you
have added any extra metadata files to the ‘.egg-info’ directory, those
files will be included in the new egg file’s metadata directory, for use
by the egg runtime system or by any applications or frameworks that use
that metadata.

You won’t usually need to specify any special options for this command;
just use ‘bdist_egg’ and you’re done.  But there are a few options that
may be occasionally useful:

‘--dist-dir=DIR, -d DIR’

     Set the directory where the ‘.egg’ file will be placed.  If you
     don’t supply this, then the ‘--dist-dir’ setting of the ‘bdist’
     command will be used, which is usually a directory named ‘dist’ in
     the project directory.

‘--plat-name=PLATFORM, -p PLATFORM’

     Set the platform name string that will be embedded in the egg’s
     filename (assuming the egg contains C extensions).  This can be
     used to override the distutils default platform name with something
     more meaningful.  Keep in mind, however, that the egg runtime
     system expects to see eggs with distutils platform names, so it may
     ignore or reject eggs with non-standard platform names.  Similarly,
     the EasyInstall program may ignore them when searching web pages
     for download links.  However, if you are cross-compiling or doing
     some other unusual things, you might find a use for this option.

‘--exclude-source-files’

     Don’t include any modules’ ‘.py’ files in the egg, just compiled
     Python, C, and data files.  (Note that this doesn’t affect any
     ‘.py’ files in the EGG-INFO directory or its subdirectories, since
     for example there may be scripts with a ‘.py’ extension which must
     still be retained.)  We don’t recommend that you use this option
     except for packages that are being bundled for proprietary end-user
     applications, or for “embedded” scenarios where space is at an
     absolute premium.  On the other hand, if your package is going to
     be installed and used in compressed form, you might as well exclude
     the source because Python’s ‘traceback’ module doesn’t currently
     understand how to display zipped source code anyway, or how to deal
     with files that are in a different place from where their code was
     compiled.

There are also some options you will probably never need, but which are
there because they were copied from similar ‘bdist’ commands used as an
example for creating this one.  They may be useful for testing and
debugging, however, which is why we kept them:

‘--keep-temp, -k’

     Keep the contents of the ‘--bdist-dir’ tree around after creating
     the ‘.egg’ file.

‘--bdist-dir=DIR, -b DIR’

     Set the temporary directory for creating the distribution.  The
     entire contents of this directory are zipped to create the ‘.egg’
     file, after running various installation commands to copy the
     package’s modules, data, and extensions here.

‘--skip-build’

     Skip doing any “build” commands; just go straight to the
     install-and-compress phases.


File: setuptools.info,  Node: develop - Deploy the project source in “Development Mode”,  Next: egg_info - Create egg metadata and set build tags,  Prev: bdist_egg - Create a Python Egg for the project,  Up: Command Reference

1.1.14.3 ‘develop’ - Deploy the project source in “Development Mode”
....................................................................

This command allows you to deploy your project’s source for use in one
or more “staging areas” where it will be available for importing.  This
deployment is done in such a way that changes to the project source are
immediately available in the staging area(s), without needing to run a
build or install step after each change.

The ‘develop’ command works by creating an ‘.egg-link’ file (named for
the project) in the given staging area.  If the staging area is Python’s
‘site-packages’ directory, it also updates an ‘easy-install.pth’ file so
that the project is on ‘sys.path’ by default for all programs run using
that Python installation.

The ‘develop’ command also installs wrapper scripts in the staging area
(or a separate directory, as specified) that will ensure the project’s
dependencies are available on ‘sys.path’ before running the project’s
source scripts.  And, it ensures that any missing project dependencies
are available in the staging area, by downloading and installing them if
necessary.

Last, but not least, the ‘develop’ command invokes the ‘build_ext -i’
command to ensure any C extensions in the project have been built and
are up-to-date, and the ‘egg_info’ command to ensure the project’s
metadata is updated (so that the runtime and wrappers know what the
project’s dependencies are).  If you make any changes to the project’s
setup script or C extensions, you should rerun the ‘develop’ command
against all relevant staging areas to keep the project’s scripts,
metadata and extensions up-to-date.  Most other kinds of changes to your
project should not require any build operations or rerunning ‘develop’,
but keep in mind that even minor changes to the setup script (e.g.
changing an entry point definition) require you to re-run the ‘develop’
or ‘test’ commands to keep the distribution updated.

Here are some of the options that the ‘develop’ command accepts.  Note
that they affect the project’s dependencies as well as the project
itself, so if you have dependencies that need to be installed and you
use ‘--exclude-scripts’ (for example), the dependencies’ scripts will
not be installed either!  For this reason, you may want to use pip to
install the project’s dependencies before using the ‘develop’ command,
if you need finer control over the installation options for
dependencies.

‘--uninstall, -u’

     Un-deploy the current project.  You may use the ‘--install-dir’ or
     ‘-d’ option to designate the staging area.  The created ‘.egg-link’
     file will be removed, if present and it is still pointing to the
     project directory.  The project directory will be removed from
     ‘easy-install.pth’ if the staging area is Python’s ‘site-packages’
     directory.

     Note that this option currently does `not' uninstall script
     wrappers!  You must uninstall them yourself, or overwrite them by
     using pip to install a different version of the package.  You can
     also avoid installing script wrappers in the first place, if you
     use the ‘--exclude-scripts’ (aka ‘-x’) option when you run
     ‘develop’ to deploy the project.

‘--multi-version, -m’

     “Multi-version” mode.  Specifying this option prevents ‘develop’
     from adding an ‘easy-install.pth’ entry for the project(s) being
     deployed, and if an entry for any version of a project already
     exists, the entry will be removed upon successful deployment.  In
     multi-version mode, no specific version of the package is available
     for importing, unless you use ‘pkg_resources.require()’ to put it
     on ‘sys.path’, or you are running a wrapper script generated by
     ‘setuptools’.  (In which case the wrapper script calls ‘require()’
     for you.)

     Note that if you install to a directory other than ‘site-packages’,
     this option is automatically in effect, because ‘.pth’ files can
     only be used in ‘site-packages’ (at least in Python 2.3 and 2.4).
     So, if you use the ‘--install-dir’ or ‘-d’ option (or they are set
     via configuration file(s)) your project and its dependencies will
     be deployed in multi- version mode.

‘--install-dir=DIR, -d DIR’

     Set the installation directory (staging area).  If this option is
     not directly specified on the command line or in a distutils
     configuration file, the distutils default installation location is
     used.  Normally, this will be the ‘site-packages’ directory, but if
     you are using distutils configuration files, setting things like
     ‘prefix’ or ‘install_lib’, then those settings are taken into
     account when computing the default staging area.

‘--script-dir=DIR, -s DIR’

     Set the script installation directory.  If you don’t supply this
     option (via the command line or a configuration file), but you
     `have' supplied an ‘--install-dir’ (via command line or config
     file), then this option defaults to the same directory, so that the
     scripts will be able to find their associated package installation.
     Otherwise, this setting defaults to the location where the
     distutils would normally install scripts, taking any distutils
     configuration file settings into account.

‘--exclude-scripts, -x’

     Don’t deploy script wrappers.  This is useful if you don’t want to
     disturb existing versions of the scripts in the staging area.

‘--always-copy, -a’

     Copy all needed distributions to the staging area, even if they are
     already present in another directory on ‘sys.path’.  By default, if
     a requirement can be met using a distribution that is already
     available in a directory on ‘sys.path’, it will not be copied to
     the staging area.

‘--egg-path=DIR’

     Force the generated ‘.egg-link’ file to use a specified relative
     path to the source directory.  This can be useful in circumstances
     where your installation directory is being shared by code running
     under multiple platforms (e.g.  Mac and Windows) which have
     different absolute locations for the code under development, but
     the same `relative' locations with respect to the installation
     directory.  If you use this option when installing, you must supply
     the same relative path when uninstalling.

In addition to the above options, the ‘develop’ command also accepts all
of the same options accepted by ‘easy_install’.  If you’ve configured
any ‘easy_install’ settings in your ‘setup.cfg’ (or other distutils
config files), the ‘develop’ command will use them as defaults, unless
you override them in a ‘[develop]’ section or on the command line.


File: setuptools.info,  Node: egg_info - Create egg metadata and set build tags,  Next: rotate - Delete outdated distribution files,  Prev: develop - Deploy the project source in “Development Mode”,  Up: Command Reference

1.1.14.4 ‘egg_info’ - Create egg metadata and set build tags
............................................................

This command performs two operations: it updates a project’s ‘.egg-info’
metadata directory (used by the ‘bdist_egg’, ‘develop’, and ‘test’
commands), and it allows you to temporarily change a project’s version
string, to support “daily builds” or “snapshot” releases.  It is run
automatically by the ‘sdist’, ‘bdist_egg’, ‘develop’, and ‘test’
commands in order to update the project’s metadata, but you can also
specify it explicitly in order to temporarily change the project’s
version string while executing other commands.  (It also generates the
‘.egg-info/SOURCES.txt’ manifest file, which is used when you are
building source distributions.)

In addition to writing the core egg metadata defined by ‘setuptools’ and
required by ‘pkg_resources’, this command can be extended to write other
metadata files as well, by defining entry points in the
‘egg_info.writers’ group.  See the section on *note Adding new EGG-INFO
Files: 4b. below for more details.  Note that using additional metadata
writers may require you to include a ‘setup_requires’ argument to
‘setup()’ in order to ensure that the desired writers are available on
‘sys.path’.

* Menu:

* Release Tagging Options::
* Other egg_info Options::
* egg_info Examples::


File: setuptools.info,  Node: Release Tagging Options,  Next: Other egg_info Options,  Up: egg_info - Create egg metadata and set build tags

1.1.14.5 Release Tagging Options
................................

The following options can be used to modify the project’s version string
for all remaining commands on the setup command line.  The options are
processed in the order shown, so if you use more than one, the requested
tags will be added in the following order:

‘--tag-build=NAME, -b NAME’

     Append NAME to the project’s version string.  Due to the way
     setuptools processes “pre-release” version suffixes beginning with
     the letters “a” through “e” (like “alpha”, “beta”, and
     “candidate”), you will usually want to use a tag like “.build” or
     “.dev”, as this will cause the version number to be considered
     `lower' than the project’s default version.  (If you want to make
     the version number `higher' than the default version, you can
     always leave off –tag-build and then use one or both of the
     following options.)

     If you have a default build tag set in your ‘setup.cfg’, you can
     suppress it on the command line using ‘-b ""’ or ‘--tag-build=""’
     as an argument to the ‘egg_info’ command.

‘--tag-date, -d’

     Add a date stamp of the form “-YYYYMMDD” (e.g.  “-20050528”) to the
     project’s version number.

‘--no-date, -D’

     Don’t include a date stamp in the version number.  This option is
     included so you can override a default setting in ‘setup.cfg’.

(Note: Because these options modify the version number used for source
and binary distributions of your project, you should first make sure
that you know how the resulting version numbers will be interpreted by
automated tools like pip.  See the section above on *note Specifying
Your Project’s Version: 3e. for an explanation of pre- and post-release
tags, as well as tips on how to choose and verify a versioning scheme
for your project.)

For advanced uses, there is one other option that can be set, to change
the location of the project’s ‘.egg-info’ directory.  Commands that need
to find the project’s source directory or metadata should get it from
this setting:


File: setuptools.info,  Node: Other egg_info Options,  Next: egg_info Examples,  Prev: Release Tagging Options,  Up: egg_info - Create egg metadata and set build tags

1.1.14.6 Other ‘egg_info’ Options
.................................

‘--egg-base=SOURCEDIR, -e SOURCEDIR’

     Specify the directory that should contain the .egg-info directory.
     This should normally be the root of your project’s source tree
     (which is not necessarily the same as your project directory; some
     projects use a ‘src’ or ‘lib’ subdirectory as the source root).
     You should not normally need to specify this directory, as it is
     normally determined from the ‘package_dir’ argument to the
     ‘setup()’ function, if any.  If there is no ‘package_dir’ set, this
     option defaults to the current directory.


File: setuptools.info,  Node: egg_info Examples,  Prev: Other egg_info Options,  Up: egg_info - Create egg metadata and set build tags

1.1.14.7 ‘egg_info’ Examples
............................

Creating a dated “nightly build” snapshot egg:

     setup.py egg_info --tag-date --tag-build=DEV bdist_egg

Creating a release with no version tags, even if some default tags are
specified in ‘setup.cfg’:

     setup.py egg_info -RDb "" sdist bdist_egg

(Notice that ‘egg_info’ must always appear on the command line `before'
any commands that you want the version changes to apply to.)


File: setuptools.info,  Node: rotate - Delete outdated distribution files,  Next: saveopts - Save used options to a configuration file,  Prev: egg_info - Create egg metadata and set build tags,  Up: Command Reference

1.1.14.8 ‘rotate’ - Delete outdated distribution files
......................................................

As you develop new versions of your project, your distribution (‘dist’)
directory will gradually fill up with older source and/or binary
distribution files.  The ‘rotate’ command lets you automatically clean
these up, keeping only the N most-recently modified files matching a
given pattern.

‘--match=PATTERNLIST, -m PATTERNLIST’

     Comma-separated list of glob patterns to match.  This option is
     `required'.  The project name and ‘-*’ is prepended to the supplied
     patterns, in order to match only distributions belonging to the
     current project (in case you have a shared distribution directory
     for multiple projects).  Typically, you will use a glob pattern
     like ‘.zip’ or ‘.egg’ to match files of the specified type.  Note
     that each supplied pattern is treated as a distinct group of files
     for purposes of selecting files to delete.

‘--keep=COUNT, -k COUNT’

     Number of matching distributions to keep.  For each group of files
     identified by a pattern specified with the ‘--match’ option, delete
     all but the COUNT most-recently-modified files in that group.  This
     option is `required'.

‘--dist-dir=DIR, -d DIR’

     Directory where the distributions are.  This defaults to the value
     of the ‘bdist’ command’s ‘--dist-dir’ option, which will usually be
     the project’s ‘dist’ subdirectory.

`Example 1': Delete all .tar.gz files from the distribution directory,
except for the 3 most recently modified ones:

     setup.py rotate --match=.tar.gz --keep=3

`Example 2': Delete all Python 2.3 or Python 2.4 eggs from the
distribution directory, except the most recently modified one for each
Python version:

     setup.py rotate --match=-py2.3*.egg,-py2.4*.egg --keep=1


File: setuptools.info,  Node: saveopts - Save used options to a configuration file,  Next: setopt - Set a distutils or setuptools option in a config file,  Prev: rotate - Delete outdated distribution files,  Up: Command Reference

1.1.14.9 ‘saveopts’ - Save used options to a configuration file
...............................................................

Finding and editing ‘distutils’ configuration files can be a pain,
especially since you also have to translate the configuration options
from command-line form to the proper configuration file format.  You can
avoid these hassles by using the ‘saveopts’ command.  Just add it to the
command line to save the options you used.  For example, this command
builds the project using the ‘mingw32’ C compiler, then saves the
–compiler setting as the default for future builds (even those run
implicitly by the ‘install’ command):

     setup.py build --compiler=mingw32 saveopts

The ‘saveopts’ command saves all options for every command specified on
the command line to the project’s local ‘setup.cfg’ file, unless you use
one of the *note configuration file options: 5d. to change where the
options are saved.  For example, this command does the same as above,
but saves the compiler setting to the site-wide (global) distutils
configuration:

     setup.py build --compiler=mingw32 saveopts -g

Note that it doesn’t matter where you place the ‘saveopts’ command on
the command line; it will still save all the options specified for all
commands.  For example, this is another valid way to spell the last
example:

     setup.py saveopts -g build --compiler=mingw32

Note, however, that all of the commands specified are always run,
regardless of where ‘saveopts’ is placed on the command line.

* Menu:

* Configuration File Options::


File: setuptools.info,  Node: Configuration File Options,  Up: saveopts - Save used options to a configuration file

1.1.14.10 Configuration File Options
....................................

Normally, settings such as options and aliases are saved to the
project’s local ‘setup.cfg’ file.  But you can override this and save
them to the global or per-user configuration files, or to a
manually-specified filename.

‘--global-config, -g’

     Save settings to the global ‘distutils.cfg’ file inside the
     ‘distutils’ package directory.  You must have write access to that
     directory to use this option.  You also can’t combine this option
     with ‘-u’ or ‘-f’.

‘--user-config, -u’

     Save settings to the current user’s ‘~/.pydistutils.cfg’ (POSIX) or
     ‘$HOME/pydistutils.cfg’ (Windows) file.  You can’t combine this
     option with ‘-g’ or ‘-f’.

‘--filename=FILENAME, -f FILENAME’

     Save settings to the specified configuration file to use.  You
     can’t combine this option with ‘-g’ or ‘-u’.  Note that if you
     specify a non-standard filename, the ‘distutils’ and ‘setuptools’
     will not use the file’s contents.  This option is mainly included
     for use in testing.

These options are used by other ‘setuptools’ commands that modify
configuration files, such as the *note alias: 40. and *note setopt: 67.
commands.


File: setuptools.info,  Node: setopt - Set a distutils or setuptools option in a config file,  Next: test - Build package and run a unittest suite,  Prev: saveopts - Save used options to a configuration file,  Up: Command Reference

1.1.14.11 ‘setopt’ - Set a distutils or setuptools option in a config file
..........................................................................

This command is mainly for use by scripts, but it can also be used as a
quick and dirty way to change a distutils configuration option without
having to remember what file the options are in and then open an editor.

`Example 1'.  Set the default C compiler to ‘mingw32’ (using long option
names):

     setup.py setopt --command=build --option=compiler --set-value=mingw32

`Example 2'.  Remove any setting for the distutils default package
installation directory (short option names):

     setup.py setopt -c install -o install_lib -r

Options for the ‘setopt’ command:

‘--command=COMMAND, -c COMMAND’

     Command to set the option for.  This option is required.

‘--option=OPTION, -o OPTION’

     The name of the option to set.  This option is required.

‘--set-value=VALUE, -s VALUE’

     The value to set the option to.  Not needed if ‘-r’ or ‘--remove’
     is set.

‘--remove, -r’

     Remove (unset) the option, instead of setting it.

In addition to the above options, you may use any of the *note
configuration file options: 5d. (listed under the *note saveopts: 5e.
command, above) to determine which distutils configuration file the
option will be added to (or removed from).


File: setuptools.info,  Node: test - Build package and run a unittest suite,  Next: upload - Upload source and/or egg distributions to PyPI,  Prev: setopt - Set a distutils or setuptools option in a config file,  Up: Command Reference

1.1.14.12 ‘test’ - Build package and run a unittest suite
.........................................................

     Warning: ‘test’ is deprecated and will be removed in a future
     version.  Users looking for a generic test entry point independent
     of test runner are encouraged to use tox(1).

When doing test-driven development, or running automated builds that
need testing before they are deployed for downloading or use, it’s often
useful to be able to run a project’s unit tests without actually
deploying the project anywhere, even using the ‘develop’ command.  The
‘test’ command runs a project’s unit tests without actually deploying
it, by temporarily putting the project’s source on ‘sys.path’, after
first running ‘build_ext -i’ and ‘egg_info’ to ensure that any C
extensions and project metadata are up-to-date.

To use this command, your project’s tests must be wrapped in a
‘unittest’ test suite by either a function, a ‘TestCase’ class or
method, or a module or package containing ‘TestCase’ classes.  If the
named suite is a module, and the module has an ‘additional_tests()’
function, it is called and the result (which must be a
‘unittest.TestSuite’) is added to the tests to be run.  If the named
suite is a package, any submodules and subpackages are recursively added
to the overall test suite.  (Note: if your project specifies a
‘test_loader’, the rules for processing the chosen ‘test_suite’ may
differ; see the *note test_loader: 57. documentation for more details.)

Note that many test systems including ‘doctest’ support wrapping their
non-‘unittest’ tests in ‘TestSuite’ objects.  So, if you are using a
test package that does not support this, we suggest you encourage its
developers to implement test suite support, as this is a convenient and
standard way to aggregate a collection of tests to be run under a common
test harness.

By default, tests will be run in the “verbose” mode of the ‘unittest’
package’s text test runner, but you can get the “quiet” mode (just dots)
if you supply the ‘-q’ or ‘--quiet’ option, either as a global option to
the setup script (e.g.  ‘setup.py -q test’) or as an option for the
‘test’ command itself (e.g.  ‘setup.py test -q’).  There is one other
option available:

‘--test-suite=NAME, -s NAME’

     Specify the test suite (or module, class, or method) to be run
     (e.g.  ‘some_module.test_suite’).  The default for this option can
     be set by giving a ‘test_suite’ argument to the ‘setup()’ function,
     e.g.:

          setup(
              # ...
              test_suite="my_package.tests.test_all"
          )

     If you did not set a ‘test_suite’ in your ‘setup()’ call, and do
     not provide a ‘--test-suite’ option, an error will occur.

New in 41.5.0: Deprecated the test command.

   ---------- Footnotes ----------

   (1) https://tox.readthedocs.io


File: setuptools.info,  Node: upload - Upload source and/or egg distributions to PyPI,  Prev: test - Build package and run a unittest suite,  Up: Command Reference

1.1.14.13 ‘upload’ - Upload source and/or egg distributions to PyPI
...................................................................

The ‘upload’ command was deprecated in version 40.0 and removed in
version 42.0.  Use twine(1) instead.

For more information on the current best practices in uploading your
packages to PyPI, see the Python Packaging User Guide’s “Packaging
Python Projects” tutorial specifically the section on uploading the
distribution archives(2).

   ---------- Footnotes ----------

   (1) https://pypi.org/p/twine

   (2) 
https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives


File: setuptools.info,  Node: Using setuptools to package and distribute your project,  Next: Automatic Resource Extraction,  Prev: Command Reference,  Up: Transition to PEP517

1.1.15 Using setuptools to package and distribute your project
--------------------------------------------------------------

‘setuptools’ offers a variety of functionalities that make it easy to
build and distribute your python package.  Here we provide an overview
on the commonly used ones.


File: setuptools.info,  Node: Automatic Resource Extraction,  Next: Defining Additional Metadata,  Prev: Using setuptools to package and distribute your project,  Up: Transition to PEP517

1.1.16 Automatic Resource Extraction
------------------------------------

If you are using tools that expect your resources to be “real” files, or
your project includes non-extension native libraries or other files that
your C extensions expect to be able to access, you may need to list
those files in the ‘eager_resources’ argument to ‘setup()’, so that the
files will be extracted together, whenever a C extension in the project
is imported.

This is especially important if your project includes shared libraries
`other' than distutils-built C extensions, and those shared libraries
use file extensions other than ‘.dll’, ‘.so’, or ‘.dylib’, which are the
extensions that setuptools 0.6a8 and higher automatically detects as
shared libraries and adds to the ‘native_libs.txt’ file for you.  Any
shared libraries whose names do not end with one of those extensions
should be listed as ‘eager_resources’, because they need to be present
in the filesystem when he C extensions that link to them are used.

The ‘pkg_resources’ runtime for compressed packages will automatically
extract `all' C extensions and ‘eager_resources’ at the same time,
whenever `any' C extension or eager resource is requested via the
‘resource_filename()’ API. (C extensions are imported using
‘resource_filename()’ internally.)  This ensures that C extensions will
see all of the “real” files that they expect to see.

Note also that you can list directory resource names in
‘eager_resources’ as well, in which case the directory’s contents
(including subdirectories) will be extracted whenever any C extension or
eager resource is requested.

Please note that if you’re not sure whether you need to use this
argument, you don’t!  It’s really intended to support projects with lots
of non-Python dependencies and as a last resort for crufty projects that
can’t otherwise handle being compressed.  If your package is pure
Python, Python plus data files, or Python plus C, you really don’t need
this.  You’ve got to be using either C or an external program that needs
“real” files in your project before there’s any possibility of
‘eager_resources’ being relevant to your project.


File: setuptools.info,  Node: Defining Additional Metadata,  Next: Setting the zip_safe flag,  Prev: Automatic Resource Extraction,  Up: Transition to PEP517

1.1.17 Defining Additional Metadata
-----------------------------------

Some extensible applications and frameworks may need to define their own
kinds of metadata to include in eggs, which they can then access using
the ‘pkg_resources’ metadata APIs.  Ordinarily, this is done by having
plugin developers include additional files in their
‘ProjectName.egg-info’ directory.  However, since it can be tedious to
create such files by hand, you may want to create a distutils extension
that will create the necessary files from arguments to ‘setup()’, in
much the same way that ‘setuptools’ does for many of the ‘setup()’
arguments it adds.  See the section below on *note Creating distutils
Extensions: 46. for more details, especially the subsection on *note
Adding new EGG-INFO Files: 4b.


File: setuptools.info,  Node: Setting the zip_safe flag,  Prev: Defining Additional Metadata,  Up: Transition to PEP517

1.1.18 Setting the ‘zip_safe’ flag
----------------------------------

For some use cases (such as bundling as part of a larger application),
Python packages may be run directly from a zip file.  Not all packages,
however, are capable of running in compressed form, because they may
expect to be able to access either source code or data files as normal
operating system files.  So, ‘setuptools’ can install your project as a
zipfile or a directory, and its default choice is determined by the
project’s ‘zip_safe’ flag.

You can pass a True or False value for the ‘zip_safe’ argument to the
‘setup()’ function, or you can omit it.  If you omit it, the ‘bdist_egg’
command will analyze your project’s contents to see if it can detect any
conditions that would prevent it from working in a zipfile.  It will
output notices to the console about any such conditions that it finds.

Currently, this analysis is extremely conservative: it will consider the
project unsafe if it contains any C extensions or datafiles whatsoever.
This does `not' mean that the project can’t or won’t work as a zipfile!
It just means that the ‘bdist_egg’ authors aren’t yet comfortable
asserting that the project `will' work.  If the project contains no C or
data files, and does no ‘__file__’ or ‘__path__’ introspection or source
code manipulation, then there is an extremely solid chance the project
will work when installed as a zipfile.  (And if the project uses
‘pkg_resources’ for all its data file access, then C extensions and
other data files shouldn’t be a problem at all.  See the *note Accessing
Data Files at Runtime: 33. section above for more information.)

However, if ‘bdist_egg’ can’t be `sure' that your package will work, but
you’ve checked over all the warnings it issued, and you are either
satisfied it `will' work (or if you want to try it for yourself), then
you should set ‘zip_safe’ to ‘True’ in your ‘setup()’ call.  If it turns
out that it doesn’t work, you can always change it to ‘False’, which
will force ‘setuptools’ to install your project as a directory rather
than as a zipfile.

In the future, as we gain more experience with different packages and
become more satisfied with the robustness of the ‘pkg_resources’
runtime, the “zip safety” analysis may become less conservative.
However, we strongly recommend that you determine for yourself whether
your project functions correctly when installed as a zipfile, correct
any problems if you can, and then make an explicit declaration of ‘True’
or ‘False’ for the ‘zip_safe’ flag, so that it will not be necessary for
‘bdist_egg’ to try to guess whether your project can work as a zipfile.


File: setuptools.info,  Node: Build System Support,  Next: Package Discovery and Resource Access using pkg_resources,  Prev: Building and Distributing Packages with Setuptools,  Up: Top

2 Build System Support
**********************

* Menu:

* What is it?::
* How to use it?::


File: setuptools.info,  Node: What is it?,  Next: How to use it?,  Up: Build System Support

2.1 What is it?
===============

Python packaging has come a long way(1).

The traditional ‘setuptools’ way of packgaging Python modules uses a
‘setup()’ function within the ‘setup.py’ script.  Commands such as
‘python setup.py bdist’ or ‘python setup.py bdist_wheel’ generate a
distribution bundle and ‘python setup.py install’ installs the
distribution.  This interface makes it difficult to choose other
packaging tools without an overhaul.  Because ‘setup.py’ scripts allowed
for arbitrary execution, it proved difficult to provide a reliable user
experience across environments and history.

PEP 517(2) therefore came to rescue and specified a new standard to
package and distribute Python modules.  Under PEP 517:

     a ‘pyproject.toml’ file is used to specify what program to use for
     generating distribution.

     Then, two functions provided by the program,
     ‘build_wheel(directory: str)’ and ‘build_sdist(directory: str)’
     create the distribution bundle at the specified ‘directory’.  The
     program is free to use its own configuration script or extend the
     ‘.toml’ file.

     Lastly, ‘pip install *.whl’ or ‘pip install *.tar.gz’ does the
     actual installation.  If ‘*.whl’ is available, ‘pip’ will go ahead
     and copy the files into ‘site-packages’ directory.  If not, ‘pip’
     will look at ‘pyproject.toml’ and decide what program to use to
     ‘build from source’ (the default is ‘setuptools’)

With this standard, switching between packaging tools becomes a lot
easier.  ‘build_meta’ implements ‘setuptools’’ build system support.

   ---------- Footnotes ----------

   (1) https://www.bernat.tech/pep-517-518/

   (2) https://www.python.org/dev/peps/pep-0517/


File: setuptools.info,  Node: How to use it?,  Prev: What is it?,  Up: Build System Support

2.2 How to use it?
==================

Starting with a package that you want to distribute.  You will need your
source scripts, a ‘pyproject.toml’ file and a ‘setup.cfg’ file:

     ~/meowpkg/
         pyproject.toml
         setup.cfg
         meowpkg/__init__.py

The pyproject.toml file is required to specify the build system (i.e.
what is being used to package your scripts and install from source).  To
use it with setuptools, the content would be:

     [build-system]
     requires = ["setuptools", "wheel"]
     build-backend = "setuptools.build_meta"

Use ‘setuptools’’ *note declarative config: 50. to specify the package
information:

     [metadata]
     name = meowpkg
     version = 0.0.1
     description = a package that meows

     [options]
     packages = find:

Now generate the distribution.  Although the PyPA is still working to
provide a recommended tool(1) to build packages, the pep517 package(2)
provides this functionality.  To build the package:

     $ pip install -q pep517
     $ mkdir dist
     $ python -m pep517.build .

And now it’s done!  The ‘.whl’ file and ‘.tar.gz’ can then be
distributed and installed:

     dist/
         meowpkg-0.0.1.whl
         meowpkg-0.0.1.tar.gz

     $ pip install dist/meowpkg-0.0.1.whl

or:

     $ pip install dist/meowpkg-0.0.1.tar.gz

   ---------- Footnotes ----------

   (1) https://github.com/pypa/packaging-problems/issues/219

   (2) https://pypi.org/project/pep517


File: setuptools.info,  Node: Package Discovery and Resource Access using pkg_resources,  Next: Keywords,  Prev: Build System Support,  Up: Top

3 Package Discovery and Resource Access using ‘pkg_resources’
*************************************************************

The ‘pkg_resources’ module distributed with ‘setuptools’ provides an API
for Python libraries to access their resource files, and for extensible
applications and frameworks to automatically discover plugins.  It also
provides runtime support for using C extensions that are inside
zipfile-format eggs, support for merging packages that have
separately-distributed modules or subpackages, and APIs for managing
Python’s current “working set” of active packages.

* Menu:

* Overview::
* API Reference::


File: setuptools.info,  Node: Overview,  Next: API Reference,  Up: Package Discovery and Resource Access using pkg_resources

3.1 Overview
============

The ‘pkg_resources’ module provides runtime facilities for finding,
introspecting, activating and using installed Python distributions.
Some of the more advanced features (notably the support for parallel
installation of multiple versions) rely specifically on the “egg” format
(either as a zip archive or subdirectory), while others (such as plugin
discovery) will work correctly so long as “egg-info” metadata
directories are available for relevant distributions.

Eggs are a distribution format for Python modules, similar in concept to
Java’s “jars” or Ruby’s “gems”, or the “wheel” format defined in PEP
427.  However, unlike a pure distribution format, eggs can also be
installed and added directly to ‘sys.path’ as an import location.  When
installed in this way, eggs are `discoverable', meaning that they carry
metadata that unambiguously identifies their contents and dependencies.
This means that an installed egg can be `automatically' found and added
to ‘sys.path’ in response to simple requests of the form, “get me
everything I need to use docutils’ PDF support”.  This feature allows
mutually conflicting versions of a distribution to co-exist in the same
Python installation, with individual applications activating the desired
version at runtime by manipulating the contents of ‘sys.path’ (this
differs from the virtual environment approach, which involves creating
isolated environments for each application).

The following terms are needed in order to explain the capabilities
offered by this module:

project

     A library, framework, script, plugin, application, or collection of
     data or other resources, or some combination thereof.  Projects are
     assumed to have “relatively unique” names, e.g.  names registered
     with PyPI.

release

     A snapshot of a project at a particular point in time, denoted by a
     version identifier.

distribution

     A file or files that represent a particular release.

importable distribution

     A file or directory that, if placed on ‘sys.path’, allows Python to
     import any modules contained within it.

pluggable distribution

     An importable distribution whose filename unambiguously identifies
     its release (i.e.  project and version), and whose contents
     unambiguously specify what releases of other projects will satisfy
     its runtime requirements.

extra

     An “extra” is an optional feature of a release, that may impose
     additional runtime requirements.  For example, if docutils PDF
     support required a PDF support library to be present, docutils
     could define its PDF support as an “extra”, and list what other
     project releases need to be available in order to provide it.

environment

     A collection of distributions potentially available for importing,
     but not necessarily active.  More than one distribution (i.e.
     release version) for a given project may be present in an
     environment.

working set

     A collection of distributions actually available for importing, as
     on ‘sys.path’.  At most one distribution (release version) of a
     given project may be present in a working set, as otherwise there
     would be ambiguity as to what to import.

eggs

     Eggs are pluggable distributions in one of the three formats
     currently supported by ‘pkg_resources’.  There are built eggs,
     development eggs, and egg links.  Built eggs are directories or
     zipfiles whose name ends with ‘.egg’ and follows the egg naming
     conventions, and contain an ‘EGG-INFO’ subdirectory (zipped or
     otherwise).  Development eggs are normal directories of Python code
     with one or more ‘ProjectName.egg-info’ subdirectories.  The
     development egg format is also used to provide a default version of
     a distribution that is available to software that doesn’t use
     ‘pkg_resources’ to request specific versions.  Egg links are
     ‘*.egg-link’ files that contain the name of a built or development
     egg, to support symbolic linking on platforms that do not have
     native symbolic links (or where the symbolic link support is
     limited).

(For more information about these terms and concepts, see also this
architectural overview(1) of ‘pkg_resources’ and Python Eggs in
general.)

   ---------- Footnotes ----------

   (1) 
http://mail.python.org/pipermail/distutils-sig/2005-June/004652.html


File: setuptools.info,  Node: API Reference,  Prev: Overview,  Up: Package Discovery and Resource Access using pkg_resources

3.2 API Reference
=================

* Menu:

* Namespace Package Support::
* WorkingSet Objects::
* Environment Objects::
* Requirement Objects::
* Entry Points: Entry Points<2>.
* Distribution Objects::
* ResourceManager API::
* Metadata API::
* Exceptions::
* Supporting Custom Importers::
* Utility Functions::


File: setuptools.info,  Node: Namespace Package Support,  Next: WorkingSet Objects,  Up: API Reference

3.2.1 Namespace Package Support
-------------------------------

A namespace package is a package that only contains other packages and
modules, with no direct contents of its own.  Such packages can be split
across multiple, separately-packaged distributions.  They are normally
used to split up large packages produced by a single organization, such
as in the ‘zope’ namespace package for Zope Corporation packages, and
the ‘peak’ namespace package for the Python Enterprise Application Kit.

To create a namespace package, you list it in the ‘namespace_packages’
argument to ‘setup()’, in your project’s ‘setup.py’.  (See the *note
setuptools documentation on namespace packages: 1c. for more information
on this.)  Also, you must add a ‘declare_namespace()’ call in the
package’s ‘__init__.py’ file(s):

‘declare_namespace(name)’

     Declare that the dotted package name ‘name’ is a “namespace
     package” whose contained packages and modules may be spread across
     multiple distributions.  The named package’s ‘__path__’ will be
     extended to include the corresponding package in all distributions
     on ‘sys.path’ that contain a package of that name.  (More
     precisely, if an importer’s ‘find_module(name)’ returns a loader,
     then it will also be searched for the package’s contents.)
     Whenever a Distribution’s ‘activate()’ method is invoked, it checks
     for the presence of namespace packages and updates their ‘__path__’
     contents accordingly.

Applications that manipulate namespace packages or directly alter
‘sys.path’ at runtime may also need to use this API function:

‘fixup_namespace_packages(path_item)’

     Declare that ‘path_item’ is a newly added item on ‘sys.path’ that
     may need to be used to update existing namespace packages.
     Ordinarily, this is called for you when an egg is automatically
     added to ‘sys.path’, but if your application modifies ‘sys.path’ to
     include locations that may contain portions of a namespace package,
     you will need to call this function to ensure they are added to the
     existing namespace packages.

Although by default ‘pkg_resources’ only supports namespace packages for
filesystem and zip importers, you can extend its support to other
“importers” compatible with PEP 302 using the
‘register_namespace_handler()’ function.  See the section below on *note
Supporting Custom Importers: 7a. for details.


File: setuptools.info,  Node: WorkingSet Objects,  Next: Environment Objects,  Prev: Namespace Package Support,  Up: API Reference

3.2.2 ‘WorkingSet’ Objects
--------------------------

The ‘WorkingSet’ class provides access to a collection of “active”
distributions.  In general, there is only one meaningful ‘WorkingSet’
instance: the one that represents the distributions that are currently
active on ‘sys.path’.  This global instance is available under the name
‘working_set’ in the ‘pkg_resources’ module.  However, specialized tools
may wish to manipulate working sets that don’t correspond to ‘sys.path’,
and therefore may wish to create other ‘WorkingSet’ instances.

It’s important to note that the global ‘working_set’ object is
initialized from ‘sys.path’ when ‘pkg_resources’ is first imported, but
is only updated if you do all future ‘sys.path’ manipulation via
‘pkg_resources’ APIs.  If you manually modify ‘sys.path’, you must
invoke the appropriate methods on the ‘working_set’ instance to keep it
in sync.  Unfortunately, Python does not provide any way to detect
arbitrary changes to a list object like ‘sys.path’, so ‘pkg_resources’
cannot automatically update the ‘working_set’ based on changes to
‘sys.path’.

‘WorkingSet(entries=None)’

     Create a ‘WorkingSet’ from an iterable of path entries.  If
     ‘entries’ is not supplied, it defaults to the value of ‘sys.path’
     at the time the constructor is called.

     Note that you will not normally construct ‘WorkingSet’ instances
     yourself, but instead you will implicitly or explicitly use the
     global ‘working_set’ instance.  For the most part, the
     ‘pkg_resources’ API is designed so that the ‘working_set’ is used
     by default, such that you don’t have to explicitly refer to it most
     of the time.

All distributions available directly on ‘sys.path’ will be activated
automatically when ‘pkg_resources’ is imported.  This behaviour can
cause version conflicts for applications which require non-default
versions of those distributions.  To handle this situation,
‘pkg_resources’ checks for a ‘__requires__’ attribute in the ‘__main__’
module when initializing the default working set, and uses this to
ensure a suitable version of each affected distribution is activated.
For example:

     __requires__ = ["CherryPy < 3"] # Must be set before pkg_resources import
     import pkg_resources

* Menu:

* Basic WorkingSet Methods::
* WorkingSet Methods and Attributes::
* Receiving Change Notifications::
* Locating Plugins::


File: setuptools.info,  Node: Basic WorkingSet Methods,  Next: WorkingSet Methods and Attributes,  Up: WorkingSet Objects

3.2.2.1 Basic ‘WorkingSet’ Methods
..................................

The following methods of ‘WorkingSet’ objects are also available as
module- level functions in ‘pkg_resources’ that apply to the default
‘working_set’ instance.  Thus, you can use e.g.
‘pkg_resources.require()’ as an abbreviation for
‘pkg_resources.working_set.require()’:

‘require(*requirements)’

     Ensure that distributions matching ‘requirements’ are activated

     ‘requirements’ must be a string or a (possibly-nested) sequence
     thereof, specifying the distributions and versions required.  The
     return value is a sequence of the distributions that needed to be
     activated to fulfill the requirements; all relevant distributions
     are included, even if they were already activated in this working
     set.

     For the syntax of requirement specifiers, see the section below on
     *note Requirements Parsing: 7d.

     In general, it should not be necessary for you to call this method
     directly.  It’s intended more for use in quick-and-dirty scripting
     and interactive interpreter hacking than for production use.  If
     you’re creating an actual library or application, it’s strongly
     recommended that you create a “setup.py” script using ‘setuptools’,
     and declare all your requirements there.  That way, tools like pip
     can automatically detect what requirements your package has, and
     deal with them accordingly.

     Note that calling ‘require('SomePackage')’ will not install
     ‘SomePackage’ if it isn’t already present.  If you need to do this,
     you should use the ‘resolve()’ method instead, which allows you to
     pass an ‘installer’ callback that will be invoked when a needed
     distribution can’t be found on the local machine.  You can then
     have this callback display a dialog, automatically download the
     needed distribution, or whatever else is appropriate for your
     application.  See the documentation below on the ‘resolve()’ method
     for more information, and also on the ‘obtain()’ method of
     ‘Environment’ objects.

‘run_script(requires, script_name)’

     Locate distribution specified by ‘requires’ and run its
     ‘script_name’ script.  ‘requires’ must be a string containing a
     requirement specifier.  (See *note Requirements Parsing: 7d. below
     for the syntax.)

     The script, if found, will be executed in `the caller’s globals'.
     That’s because this method is intended to be called from wrapper
     scripts that act as a proxy for the “real” scripts in a
     distribution.  A wrapper script usually doesn’t need to do anything
     but invoke this function with the correct arguments.

     If you need more control over the script execution environment, you
     probably want to use the ‘run_script()’ method of a ‘Distribution’
     object’s *note Metadata API: 7e. instead.

‘iter_entry_points(group, name=None)’

     Yield entry point objects from ‘group’ matching ‘name’

     If ‘name’ is None, yields all entry points in ‘group’ from all
     distributions in the working set, otherwise only ones matching both
     ‘group’ and ‘name’ are yielded.  Entry points are yielded from the
     active distributions in the order that the distributions appear in
     the working set.  (For the global ‘working_set’, this should be the
     same as the order that they are listed in ‘sys.path’.)  Note that
     within the entry points advertised by an individual distribution,
     there is no particular ordering.

     Please see the section below on *note Entry Points: 7f. for more
     information.


File: setuptools.info,  Node: WorkingSet Methods and Attributes,  Next: Receiving Change Notifications,  Prev: Basic WorkingSet Methods,  Up: WorkingSet Objects

3.2.2.2 ‘WorkingSet’ Methods and Attributes
...........................................

These methods are used to query or manipulate the contents of a specific
working set, so they must be explicitly invoked on a particular
‘WorkingSet’ instance:

‘add_entry(entry)’

     Add a path item to the ‘entries’, finding any distributions on it.
     You should use this when you add additional items to ‘sys.path’ and
     you want the global ‘working_set’ to reflect the change.  This
     method is also called by the ‘WorkingSet()’ constructor during
     initialization.

     This method uses ‘find_distributions(entry,True)’ to find
     distributions corresponding to the path entry, and then ‘add()’
     them.  ‘entry’ is always appended to the ‘entries’ attribute, even
     if it is already present, however.  (This is because ‘sys.path’ can
     contain the same value more than once, and the ‘entries’ attribute
     should be able to reflect this.)

‘__contains__(dist)’

     True if ‘dist’ is active in this ‘WorkingSet’.  Note that only one
     distribution for a given project can be active in a given
     ‘WorkingSet’.

‘__iter__()’

     Yield distributions for non-duplicate projects in the working set.
     The yield order is the order in which the items’ path entries were
     added to the working set.

‘find(req)’

     Find a distribution matching ‘req’ (a ‘Requirement’ instance).  If
     there is an active distribution for the requested project, this
     returns it, as long as it meets the version requirement specified
     by ‘req’.  But, if there is an active distribution for the project
     and it does `not' meet the ‘req’ requirement, ‘VersionConflict’ is
     raised.  If there is no active distribution for the requested
     project, ‘None’ is returned.

‘resolve(requirements, env=None, installer=None)’

     List all distributions needed to (recursively) meet ‘requirements’

     ‘requirements’ must be a sequence of ‘Requirement’ objects.  ‘env’,
     if supplied, should be an ‘Environment’ instance.  If not supplied,
     an ‘Environment’ is created from the working set’s ‘entries’.
     ‘installer’, if supplied, will be invoked with each requirement
     that cannot be met by an already-installed distribution; it should
     return a ‘Distribution’ or ‘None’.  (See the ‘obtain()’ method of
     *note Environment Objects: 81, below, for more information on the
     ‘installer’ argument.)

‘add(dist, entry=None)’

     Add ‘dist’ to working set, associated with ‘entry’

     If ‘entry’ is unspecified, it defaults to ‘dist.location’.  On exit
     from this routine, ‘entry’ is added to the end of the working set’s
     ‘.entries’ (if it wasn’t already present).

     ‘dist’ is only added to the working set if it’s for a project that
     doesn’t already have a distribution active in the set.  If it’s
     successfully added, any callbacks registered with the ‘subscribe()’
     method will be called.  (See *note Receiving Change Notifications:
     82, below.)

     Note: ‘add()’ is automatically called for you by the ‘require()’
     method, so you don’t normally need to use this method directly.

‘entries’

     This attribute represents a “shadow” ‘sys.path’, primarily useful
     for debugging.  If you are experiencing import problems, you should
     check the global ‘working_set’ object’s ‘entries’ against
     ‘sys.path’, to ensure that they match.  If they do not, then some
     part of your program is manipulating ‘sys.path’ without updating
     the ‘working_set’ accordingly.  IMPORTANT NOTE: do not directly
     manipulate this attribute!  Setting it equal to ‘sys.path’ will not
     fix your problem, any more than putting black tape over an “engine
     warning” light will fix your car!  If this attribute is out of sync
     with ‘sys.path’, it’s merely an `indicator' of the problem, not the
     cause of it.


File: setuptools.info,  Node: Receiving Change Notifications,  Next: Locating Plugins,  Prev: WorkingSet Methods and Attributes,  Up: WorkingSet Objects

3.2.2.3 Receiving Change Notifications
......................................

Extensible applications and frameworks may need to receive notification
when a new distribution (such as a plug-in component) has been added to
a working set.  This is what the ‘subscribe()’ method and
‘add_activation_listener()’ function are for.

‘subscribe(callback)’

     Invoke ‘callback(distribution)’ once for each active distribution
     that is in the set now, or gets added later.  Because the callback
     is invoked for already-active distributions, you do not need to
     loop over the working set yourself to deal with the existing items;
     just register the callback and be prepared for the fact that it
     will be called immediately by this method.

     Note that callbacks `must not' allow exceptions to propagate, or
     they will interfere with the operation of other callbacks and
     possibly result in an inconsistent working set state.  Callbacks
     should use a try/except block to ignore, log, or otherwise process
     any errors, especially since the code that caused the callback to
     be invoked is unlikely to be able to handle the errors any better
     than the callback itself.

‘pkg_resources.add_activation_listener()’ is an alternate spelling of
‘pkg_resources.working_set.subscribe()’.


File: setuptools.info,  Node: Locating Plugins,  Prev: Receiving Change Notifications,  Up: WorkingSet Objects

3.2.2.4 Locating Plugins
........................

Extensible applications will sometimes have a “plugin directory” or a
set of plugin directories, from which they want to load entry points or
other metadata.  The ‘find_plugins()’ method allows you to do this, by
scanning an environment for the newest version of each project that can
be safely loaded without conflicts or missing requirements.

‘find_plugins(plugin_env, full_env=None, fallback=True)’

     Scan ‘plugin_env’ and identify which distributions could be added
     to this working set without version conflicts or missing
     requirements.

     Example usage:

          distributions, errors = working_set.find_plugins(
              Environment(plugin_dirlist)
          )
          map(working_set.add, distributions)  # add plugins+libs to sys.path
          print "Couldn't load", errors        # display errors

     The ‘plugin_env’ should be an ‘Environment’ instance that contains
     only distributions that are in the project’s “plugin directory” or
     directories.  The ‘full_env’, if supplied, should be an
     ‘Environment’ instance that contains all currently-available
     distributions.

     If ‘full_env’ is not supplied, one is created automatically from
     the ‘WorkingSet’ this method is called on, which will typically
     mean that every directory on ‘sys.path’ will be scanned for
     distributions.

     This method returns a 2-tuple: (‘distributions’, ‘error_info’),
     where ‘distributions’ is a list of the distributions found in
     ‘plugin_env’ that were loadable, along with any other distributions
     that are needed to resolve their dependencies.  ‘error_info’ is a
     dictionary mapping unloadable plugin distributions to an exception
     instance describing the error that occurred.  Usually this will be
     a ‘DistributionNotFound’ or ‘VersionConflict’ instance.

     Most applications will use this method mainly on the master
     ‘working_set’ instance in ‘pkg_resources’, and then immediately add
     the returned distributions to the working set so that they are
     available on sys.path.  This will make it possible to find any
     entry points, and allow any other metadata tracking and hooks to be
     activated.

     The resolution algorithm used by ‘find_plugins()’ is as follows.
     First, the project names of the distributions present in
     ‘plugin_env’ are sorted.  Then, each project’s eggs are tried in
     descending version order (i.e., newest version first).

     An attempt is made to resolve each egg’s dependencies.  If the
     attempt is successful, the egg and its dependencies are added to
     the output list and to a temporary copy of the working set.  The
     resolution process continues with the next project name, and no
     older eggs for that project are tried.

     If the resolution attempt fails, however, the error is added to the
     error dictionary.  If the ‘fallback’ flag is true, the next older
     version of the plugin is tried, until a working version is found.
     If false, the resolution process continues with the next plugin
     project name.

     Some applications may have stricter fallback requirements than
     others.  For example, an application that has a database schema or
     persistent objects may not be able to safely downgrade a version of
     a package.  Others may want to ensure that a new plugin
     configuration is either 100% good or else revert to a known-good
     configuration.  (That is, they may wish to revert to a known
     configuration if the ‘error_info’ return value is non-empty.)

     Note that this algorithm gives precedence to satisfying the
     dependencies of alphabetically prior project names in case of
     version conflicts.  If two projects named “AaronsPlugin” and
     “ZekesPlugin” both need different versions of “TomsLibrary”, then
     “AaronsPlugin” will win and “ZekesPlugin” will be disabled due to
     version conflict.


File: setuptools.info,  Node: Environment Objects,  Next: Requirement Objects,  Prev: WorkingSet Objects,  Up: API Reference

3.2.3 ‘Environment’ Objects
---------------------------

An “environment” is a collection of ‘Distribution’ objects, usually ones
that are present and potentially importable on the current platform.
‘Environment’ objects are used by ‘pkg_resources’ to index available
distributions during dependency resolution.

‘Environment(search_path=None, platform=get_supported_platform(), python=PY_MAJOR)’

     Create an environment snapshot by scanning ‘search_path’ for
     distributions compatible with ‘platform’ and ‘python’.
     ‘search_path’ should be a sequence of strings such as might be used
     on ‘sys.path’.  If a ‘search_path’ isn’t supplied, ‘sys.path’ is
     used.

     ‘platform’ is an optional string specifying the name of the
     platform that platform-specific distributions must be compatible
     with.  If unspecified, it defaults to the current platform.
     ‘python’ is an optional string naming the desired version of Python
     (e.g.  ‘'2.4'’); it defaults to the currently-running version.

     You may explicitly set ‘platform’ (and/or ‘python’) to ‘None’ if
     you wish to include `all' distributions, not just those compatible
     with the running platform or Python version.

     Note that ‘search_path’ is scanned immediately for distributions,
     and the resulting ‘Environment’ is a snapshot of the found
     distributions.  It is not automatically updated if the system’s
     state changes due to e.g.  installation or removal of
     distributions.

‘__getitem__(project_name)’

     Returns a list of distributions for the given project name, ordered
     from newest to oldest version.  (And highest to lowest format
     precedence for distributions that contain the same version of the
     project.)  If there are no distributions for the project, returns
     an empty list.

‘__iter__()’

     Yield the unique project names of the distributions in this
     environment.  The yielded names are always in lower case.

‘add(dist)’

     Add ‘dist’ to the environment if it matches the platform and python
     version specified at creation time, and only if the distribution
     hasn’t already been added.  (i.e., adding the same distribution
     more than once is a no-op.)

‘remove(dist)’

     Remove ‘dist’ from the environment.

‘can_add(dist)’

     Is distribution ‘dist’ acceptable for this environment?  If it’s
     not compatible with the ‘platform’ and ‘python’ version values
     specified when the environment was created, a false value is
     returned.

‘__add__(dist_or_env)’ (‘+’ operator)

     Add a distribution or environment to an ‘Environment’ instance,
     returning a `new' environment object that contains all the
     distributions previously contained by both.  The new environment
     will have a ‘platform’ and ‘python’ of ‘None’, meaning that it will
     not reject any distributions from being added to it; it will simply
     accept whatever is added.  If you want the added items to be
     filtered for platform and Python version, or you want to add them
     to the `same' environment instance, you should use in-place
     addition (‘+=’) instead.

‘__iadd__(dist_or_env)’ (‘+=’ operator)

     Add a distribution or environment to an ‘Environment’ instance
     `in-place', updating the existing instance and returning it.  The
     ‘platform’ and ‘python’ filter attributes take effect, so
     distributions in the source that do not have a suitable platform
     string or Python version are silently ignored.

‘best_match(req, working_set, installer=None)’

     Find distribution best matching ‘req’ and usable on ‘working_set’

     This calls the ‘find(req)’ method of the ‘working_set’ to see if a
     suitable distribution is already active.  (This may raise
     ‘VersionConflict’ if an unsuitable version of the project is
     already active in the specified ‘working_set’.)  If a suitable
     distribution isn’t active, this method returns the newest
     distribution in the environment that meets the ‘Requirement’ in
     ‘req’.  If no suitable distribution is found, and ‘installer’ is
     supplied, then the result of calling the environment’s ‘obtain(req,
     installer)’ method will be returned.

‘obtain(requirement, installer=None)’

     Obtain a distro that matches requirement (e.g.  via download).  In
     the base ‘Environment’ class, this routine just returns
     ‘installer(requirement)’, unless ‘installer’ is None, in which case
     None is returned instead.  This method is a hook that allows
     subclasses to attempt other ways of obtaining a distribution before
     falling back to the ‘installer’ argument.

‘scan(search_path=None)’

     Scan ‘search_path’ for distributions usable on ‘platform’

     Any distributions found are added to the environment.
     ‘search_path’ should be a sequence of strings such as might be used
     on ‘sys.path’.  If not supplied, ‘sys.path’ is used.  Only
     distributions conforming to the platform/python version defined at
     initialization are added.  This method is a shortcut for using the
     ‘find_distributions()’ function to find the distributions from each
     item in ‘search_path’, and then calling ‘add()’ to add each one to
     the environment.


File: setuptools.info,  Node: Requirement Objects,  Next: Entry Points<2>,  Prev: Environment Objects,  Up: API Reference

3.2.4 ‘Requirement’ Objects
---------------------------

‘Requirement’ objects express what versions of a project are suitable
for some purpose.  These objects (or their string form) are used by
various ‘pkg_resources’ APIs in order to find distributions that a
script or distribution needs.

* Menu:

* Requirements Parsing::
* Requirement Methods and Attributes::


File: setuptools.info,  Node: Requirements Parsing,  Next: Requirement Methods and Attributes,  Up: Requirement Objects

3.2.4.1 Requirements Parsing
............................

‘parse_requirements(s)’

     Yield ‘Requirement’ objects for a string or iterable of lines.
     Each requirement must start on a new line.  See below for syntax.

‘Requirement.parse(s)’

     Create a ‘Requirement’ object from a string or iterable of lines.
     A ‘ValueError’ is raised if the string or lines do not contain a
     valid requirement specifier, or if they contain more than one
     specifier.  (To parse multiple specifiers from a string or iterable
     of strings, use ‘parse_requirements()’ instead.)

     The syntax of a requirement specifier is defined in full in PEP
     508.

     Some examples of valid requirement specifiers:

          FooProject >= 1.2
          Fizzy [foo, bar]
          PickyThing>1.6,<=1.9,!=1.8.6
          SomethingWhoseVersionIDontCareAbout
          SomethingWithMarker[foo]>1.0;python_version<"2.7"

     The project name is the only required portion of a requirement
     string, and if it’s the only thing supplied, the requirement will
     accept any version of that project.

     The “extras” in a requirement are used to request optional features
     of a project, that may require additional project distributions in
     order to function.  For example, if the hypothetical
     “Report-O-Rama” project offered optional PDF support, it might
     require an additional library in order to provide that support.
     Thus, a project needing Report-O-Rama’s PDF features could use a
     requirement of ‘Report-O-Rama[PDF]’ to request installation or
     activation of both Report-O-Rama and any libraries it needs in
     order to provide PDF support.  For example, you could use:

          pip install Report-O-Rama[PDF]

     To install the necessary packages using pip, or call
     ‘pkg_resources.require('Report-O-Rama[PDF]')’ to add the necessary
     distributions to sys.path at runtime.

     The “markers” in a requirement are used to specify when a
     requirement should be installed – the requirement will be installed
     if the marker evaluates as true in the current environment.  For
     example, specifying ‘argparse;python_version<"3.0"’ will not
     install in an Python 3 environment, but will in a Python 2
     environment.


File: setuptools.info,  Node: Requirement Methods and Attributes,  Prev: Requirements Parsing,  Up: Requirement Objects

3.2.4.2 ‘Requirement’ Methods and Attributes
............................................

‘__contains__(dist_or_version)’

     Return true if ‘dist_or_version’ fits the criteria for this
     requirement.  If ‘dist_or_version’ is a ‘Distribution’ object, its
     project name must match the requirement’s project name, and its
     version must meet the requirement’s version criteria.  If
     ‘dist_or_version’ is a string, it is parsed using the
     ‘parse_version()’ utility function.  Otherwise, it is assumed to be
     an already-parsed version.

     The ‘Requirement’ object’s version specifiers (‘.specs’) are
     internally sorted into ascending version order, and used to
     establish what ranges of versions are acceptable.  Adjacent
     redundant conditions are effectively consolidated (e.g.  ‘">1, >2"’
     produces the same results as ‘">2"’, and ‘"<2,<3"’ produces the
     same results as ‘"<2"’).  ‘"!="’ versions are excised from the
     ranges they fall within.  The version being tested for
     acceptability is then checked for membership in the resulting
     ranges.

‘__eq__(other_requirement)’

     A requirement compares equal to another requirement if they have
     case-insensitively equal project names, version specifiers, and
     “extras”.  (The order that extras and version specifiers are in is
     also ignored.)  Equal requirements also have equal hashes, so that
     requirements can be used in sets or as dictionary keys.

‘__str__()’

     The string form of a ‘Requirement’ is a string that, if passed to
     ‘Requirement.parse()’, would return an equal ‘Requirement’ object.

‘project_name’

     The name of the required project

‘key’

     An all-lowercase version of the ‘project_name’, useful for
     comparison or indexing.

‘extras’

     A tuple of names of “extras” that this requirement calls for.
     (These will be all-lowercase and normalized using the
     ‘safe_extra()’ parsing utility function, so they may not exactly
     equal the extras the requirement was created with.)

‘specs’

     A list of ‘(op,version)’ tuples, sorted in ascending parsed-version
     order.  The ‘op’ in each tuple is a comparison operator,
     represented as a string.  The ‘version’ is the (unparsed) version
     number.

‘marker’

     An instance of ‘packaging.markers.Marker’ that allows evaluation
     against the current environment.  May be None if no marker
     specified.

‘url’

     The location to download the requirement from if specified.


File: setuptools.info,  Node: Entry Points<2>,  Next: Distribution Objects,  Prev: Requirement Objects,  Up: API Reference

3.2.5 Entry Points
------------------

Entry points are a simple way for distributions to “advertise” Python
objects (such as functions or classes) for use by other distributions.
Extensible applications and frameworks can search for entry points with
a particular name or group, either from a specific distribution or from
all active distributions on sys.path, and then inspect or load the
advertised objects at will.

Entry points belong to “groups” which are named with a dotted name
similar to a Python package or module name.  For example, the
‘setuptools’ package uses an entry point named ‘distutils.commands’ in
order to find commands defined by distutils extensions.  ‘setuptools’
treats the names of entry points defined in that group as the acceptable
commands for a setup script.

In a similar way, other packages can define their own entry point
groups, either using dynamic names within the group (like
‘distutils.commands’), or possibly using predefined names within the
group.  For example, a blogging framework that offers various pre- or
post-publishing hooks might define an entry point group and look for
entry points named “pre_process” and “post_process” within that group.

To advertise an entry point, a project needs to use ‘setuptools’ and
provide an ‘entry_points’ argument to ‘setup()’ in its setup script, so
that the entry points will be included in the distribution’s metadata.
For more details, see the [‘setuptools’
documentation](‘https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins’).

Each project distribution can advertise at most one entry point of a
given name within the same entry point group.  For example, a distutils
extension could advertise two different ‘distutils.commands’ entry
points, as long as they had different names.  However, there is nothing
that prevents `different' projects from advertising entry points of the
same name in the same group.  In some cases, this is a desirable thing,
since the application or framework that uses the entry points may be
calling them as hooks, or in some other way combining them.  It is up to
the application or framework to decide what to do if multiple
distributions advertise an entry point; some possibilities include using
both entry points, displaying an error message, using the first one
found in sys.path order, etc.

* Menu:

* Convenience API::
* Creating and Parsing::
* EntryPoint Objects::


File: setuptools.info,  Node: Convenience API,  Next: Creating and Parsing,  Up: Entry Points<2>

3.2.5.1 Convenience API
.......................

In the following functions, the ‘dist’ argument can be a ‘Distribution’
instance, a ‘Requirement’ instance, or a string specifying a requirement
(i.e.  project name, version, etc.).  If the argument is a string or
‘Requirement’, the specified distribution is located (and added to
sys.path if not already present).  An error will be raised if a matching
distribution is not available.

The ‘group’ argument should be a string containing a dotted identifier,
identifying an entry point group.  If you are defining an entry point
group, you should include some portion of your package’s name in the
group name so as to avoid collision with other packages’ entry point
groups.

‘load_entry_point(dist, group, name)’

     Load the named entry point from the specified distribution, or
     raise ‘ImportError’.

‘get_entry_info(dist, group, name)’

     Return an ‘EntryPoint’ object for the given ‘group’ and ‘name’ from
     the specified distribution.  Returns ‘None’ if the distribution has
     not advertised a matching entry point.

‘get_entry_map(dist, group=None)’

     Return the distribution’s entry point map for ‘group’, or the full
     entry map for the distribution.  This function always returns a
     dictionary, even if the distribution advertises no entry points.
     If ‘group’ is given, the dictionary maps entry point names to the
     corresponding ‘EntryPoint’ object.  If ‘group’ is None, the
     dictionary maps group names to dictionaries that then map entry
     point names to the corresponding ‘EntryPoint’ instance in that
     group.

‘iter_entry_points(group, name=None)’

     Yield entry point objects from ‘group’ matching ‘name’.

     If ‘name’ is None, yields all entry points in ‘group’ from all
     distributions in the working set on sys.path, otherwise only ones
     matching both ‘group’ and ‘name’ are yielded.  Entry points are
     yielded from the active distributions in the order that the
     distributions appear on sys.path.  (Within entry points for a
     particular distribution, however, there is no particular ordering.)

     (This API is actually a method of the global ‘working_set’ object;
     see the section above on *note Basic WorkingSet Methods: 7c. for
     more information.)


File: setuptools.info,  Node: Creating and Parsing,  Next: EntryPoint Objects,  Prev: Convenience API,  Up: Entry Points<2>

3.2.5.2 Creating and Parsing
............................

‘EntryPoint(name, module_name, attrs=(), extras=(), dist=None)’

     Create an ‘EntryPoint’ instance.  ‘name’ is the entry point name.
     The ‘module_name’ is the (dotted) name of the module containing the
     advertised object.  ‘attrs’ is an optional tuple of names to look
     up from the module to obtain the advertised object.  For example,
     an ‘attrs’ of ‘("foo","bar")’ and a ‘module_name’ of ‘"baz"’ would
     mean that the advertised object could be obtained by the following
     code:

          import baz
          advertised_object = baz.foo.bar

     The ‘extras’ are an optional tuple of “extra feature” names that
     the distribution needs in order to provide this entry point.  When
     the entry point is loaded, these extra features are looked up in
     the ‘dist’ argument to find out what other distributions may need
     to be activated on sys.path; see the ‘load()’ method for more
     details.  The ‘extras’ argument is only meaningful if ‘dist’ is
     specified.  ‘dist’ must be a ‘Distribution’ instance.

‘EntryPoint.parse(src, dist=None)’ (classmethod)

     Parse a single entry point from string ‘src’

     Entry point syntax follows the form:

          name = some.module:some.attr [extra1,extra2]

     The entry name and module name are required, but the ‘:attrs’ and
     ‘[extras]’ parts are optional, as is the whitespace shown between
     some of the items.  The ‘dist’ argument is passed through to the
     ‘EntryPoint()’ constructor, along with the other values parsed from
     ‘src’.

‘EntryPoint.parse_group(group, lines, dist=None)’ (classmethod)

     Parse ‘lines’ (a string or sequence of lines) to create a
     dictionary mapping entry point names to ‘EntryPoint’ objects.
     ‘ValueError’ is raised if entry point names are duplicated, if
     ‘group’ is not a valid entry point group name, or if there are any
     syntax errors.  (Note: the ‘group’ parameter is used only for
     validation and to create more informative error messages.)  If
     ‘dist’ is provided, it will be used to set the ‘dist’ attribute of
     the created ‘EntryPoint’ objects.

‘EntryPoint.parse_map(data, dist=None)’ (classmethod)

     Parse ‘data’ into a dictionary mapping group names to dictionaries
     mapping entry point names to ‘EntryPoint’ objects.  If ‘data’ is a
     dictionary, then the keys are used as group names and the values
     are passed to ‘parse_group()’ as the ‘lines’ argument.  If ‘data’
     is a string or sequence of lines, it is first split into .ini-style
     sections (using the ‘split_sections()’ utility function) and the
     section names are used as group names.  In either case, the ‘dist’
     argument is passed through to ‘parse_group()’ so that the entry
     points will be linked to the specified distribution.


File: setuptools.info,  Node: EntryPoint Objects,  Prev: Creating and Parsing,  Up: Entry Points<2>

3.2.5.3 ‘EntryPoint’ Objects
............................

For simple introspection, ‘EntryPoint’ objects have attributes that
correspond exactly to the constructor argument names: ‘name’,
‘module_name’, ‘attrs’, ‘extras’, and ‘dist’ are all available.  In
addition, the following methods are provided:

‘load()’

     Load the entry point, returning the advertised Python object.
     Effectively calls ‘self.require()’ then returns ‘self.resolve()’.

‘require(env=None, installer=None)’

     Ensure that any “extras” needed by the entry point are available on
     sys.path.  ‘UnknownExtra’ is raised if the ‘EntryPoint’ has
     ‘extras’, but no ‘dist’, or if the named extras are not defined by
     the distribution.  If ‘env’ is supplied, it must be an
     ‘Environment’, and it will be used to search for needed
     distributions if they are not already present on sys.path.  If
     ‘installer’ is supplied, it must be a callable taking a
     ‘Requirement’ instance and returning a matching importable
     ‘Distribution’ instance or None.

‘resolve()’

     Resolve the entry point from its module and attrs, returning the
     advertised Python object.  Raises ‘ImportError’ if it cannot be
     obtained.

‘__str__()’

     The string form of an ‘EntryPoint’ is a string that could be passed
     to ‘EntryPoint.parse()’ to produce an equivalent ‘EntryPoint’.


File: setuptools.info,  Node: Distribution Objects,  Next: ResourceManager API,  Prev: Entry Points<2>,  Up: API Reference

3.2.6 ‘Distribution’ Objects
----------------------------

‘Distribution’ objects represent collections of Python code that may or
may not be importable, and may or may not have metadata and resources
associated with them.  Their metadata may include information such as
what other projects the distribution depends on, what entry points the
distribution advertises, and so on.

* Menu:

* Getting or Creating Distributions::
* Distribution Attributes::
* Distribution Methods::


File: setuptools.info,  Node: Getting or Creating Distributions,  Next: Distribution Attributes,  Up: Distribution Objects

3.2.6.1 Getting or Creating Distributions
.........................................

Most commonly, you’ll obtain ‘Distribution’ objects from a ‘WorkingSet’
or an ‘Environment’.  (See the sections above on *note WorkingSet
Objects: 7b. and *note Environment Objects: 81, which are containers for
active distributions and available distributions, respectively.)  You
can also obtain ‘Distribution’ objects from one of these high-level
APIs:

‘find_distributions(path_item, only=False)’

     Yield distributions accessible via ‘path_item’.  If ‘only’ is true,
     yield only distributions whose ‘location’ is equal to ‘path_item’.
     In other words, if ‘only’ is true, this yields any distributions
     that would be importable if ‘path_item’ were on ‘sys.path’.  If
     ‘only’ is false, this also yields distributions that are “in” or
     “under” ‘path_item’, but would not be importable unless their
     locations were also added to ‘sys.path’.

‘get_distribution(dist_spec)’

     Return a ‘Distribution’ object for a given ‘Requirement’ or string.
     If ‘dist_spec’ is already a ‘Distribution’ instance, it is
     returned.  If it is a ‘Requirement’ object or a string that can be
     parsed into one, it is used to locate and activate a matching
     distribution, which is then returned.

However, if you’re creating specialized tools for working with
distributions, or creating a new distribution format, you may also need
to create ‘Distribution’ objects directly, using one of the three
constructors below.

These constructors all take an optional ‘metadata’ argument, which is
used to access any resources or metadata associated with the
distribution.  ‘metadata’ must be an object that implements the
‘IResourceProvider’ interface, or None.  If it is None, an
‘EmptyProvider’ is used instead.  ‘Distribution’ objects implement both
the *note IResourceProvider: 8b. and *note IMetadataProvider Methods:
8c. by delegating them to the ‘metadata’ object.

‘Distribution.from_location(location, basename, metadata=None, **kw)’ (classmethod)

     Create a distribution for ‘location’, which must be a string such
     as a URL, filename, or other string that might be used on
     ‘sys.path’.  ‘basename’ is a string naming the distribution, like
     ‘Foo-1.2-py2.4.egg’.  If ‘basename’ ends with ‘.egg’, then the
     project’s name, version, python version and platform are extracted
     from the filename and used to set those properties of the created
     distribution.  Any additional keyword arguments are forwarded to
     the ‘Distribution()’ constructor.

‘Distribution.from_filename(filename, metadata=None**kw)’ (classmethod)

     Create a distribution by parsing a local filename.  This is a
     shorter way of saying
     ‘Distribution.from_location(normalize_path(filename),
     os.path.basename(filename), metadata)’.  In other words, it creates
     a distribution whose location is the normalize form of the
     filename, parsing name and version information from the base
     portion of the filename.  Any additional keyword arguments are
     forwarded to the ‘Distribution()’ constructor.

‘Distribution(location,metadata,project_name,version,py_version,platform,precedence)’

     Create a distribution by setting its properties.  All arguments are
     optional and default to None, except for ‘py_version’ (which
     defaults to the current Python version) and ‘precedence’ (which
     defaults to ‘EGG_DIST’; for more details see ‘precedence’ under
     *note Distribution Attributes: 8d. below).  Note that it’s usually
     easier to use the ‘from_filename()’ or ‘from_location()’
     constructors than to specify all these arguments individually.


File: setuptools.info,  Node: Distribution Attributes,  Next: Distribution Methods,  Prev: Getting or Creating Distributions,  Up: Distribution Objects

3.2.6.2 ‘Distribution’ Attributes
.................................

location

     A string indicating the distribution’s location.  For an importable
     distribution, this is the string that would be added to ‘sys.path’
     to make it actively importable.  For non-importable distributions,
     this is simply a filename, URL, or other way of locating the
     distribution.

project_name

     A string, naming the project that this distribution is for.
     Project names are defined by a project’s setup script, and they are
     used to identify projects on PyPI. When a ‘Distribution’ is
     constructed, the ‘project_name’ argument is passed through the
     ‘safe_name()’ utility function to filter out any unacceptable
     characters.

key

     ‘dist.key’ is short for ‘dist.project_name.lower()’.  It’s used for
     case-insensitive comparison and indexing of distributions by
     project name.

extras

     A list of strings, giving the names of extra features defined by
     the project’s dependency list (the ‘extras_require’ argument
     specified in the project’s setup script).

version

     A string denoting what release of the project this distribution
     contains.  When a ‘Distribution’ is constructed, the ‘version’
     argument is passed through the ‘safe_version()’ utility function to
     filter out any unacceptable characters.  If no ‘version’ is
     specified at construction time, then attempting to access this
     attribute later will cause the ‘Distribution’ to try to discover
     its version by reading its ‘PKG-INFO’ metadata file.  If ‘PKG-INFO’
     is unavailable or can’t be parsed, ‘ValueError’ is raised.

parsed_version

     The ‘parsed_version’ is an object representing a “parsed” form of
     the distribution’s ‘version’.  ‘dist.parsed_version’ is a shortcut
     for calling ‘parse_version(dist.version)’.  It is used to compare
     or sort distributions by version.  (See the *note Parsing
     Utilities: 8e. section below for more information on the
     ‘parse_version()’ function.)  Note that accessing ‘parsed_version’
     may result in a ‘ValueError’ if the ‘Distribution’ was constructed
     without a ‘version’ and without ‘metadata’ capable of supplying the
     missing version info.

py_version

     The major/minor Python version the distribution supports, as a
     string.  For example, “2.7” or “3.4”.  The default is the current
     version of Python.

platform

     A string representing the platform the distribution is intended
     for, or ‘None’ if the distribution is “pure Python” and therefore
     cross-platform.  See *note Platform Utilities: 8f. below for more
     information on platform strings.

precedence

     A distribution’s ‘precedence’ is used to determine the relative
     order of two distributions that have the same ‘project_name’ and
     ‘parsed_version’.  The default precedence is
     ‘pkg_resources.EGG_DIST’, which is the highest (i.e.  most
     preferred) precedence.  The full list of predefined precedences,
     from most preferred to least preferred, is: ‘EGG_DIST’,
     ‘BINARY_DIST’, ‘SOURCE_DIST’, ‘CHECKOUT_DIST’, and ‘DEVELOP_DIST’.
     Normally, precedences other than ‘EGG_DIST’ are used only by the
     ‘setuptools.package_index’ module, when sorting distributions found
     in a package index to determine their suitability for installation.
     “System” and “Development” eggs (i.e., ones that use the
     ‘.egg-info’ format), however, are automatically given a precedence
     of ‘DEVELOP_DIST’.


File: setuptools.info,  Node: Distribution Methods,  Prev: Distribution Attributes,  Up: Distribution Objects

3.2.6.3 ‘Distribution’ Methods
..............................

‘activate(path=None)’

     Ensure distribution is importable on ‘path’.  If ‘path’ is None,
     ‘sys.path’ is used instead.  This ensures that the distribution’s
     ‘location’ is in the ‘path’ list, and it also performs any
     necessary namespace package fixups or declarations.  (That is, if
     the distribution contains namespace packages, this method ensures
     that they are declared, and that the distribution’s contents for
     those namespace packages are merged with the contents provided by
     any other active distributions.  See the section above on *note
     Namespace Package Support: 79. for more information.)

     ‘pkg_resources’ adds a notification callback to the global
     ‘working_set’ that ensures this method is called whenever a
     distribution is added to it.  Therefore, you should not normally
     need to explicitly call this method.  (Note that this means that
     namespace packages on ‘sys.path’ are always imported as soon as
     ‘pkg_resources’ is, which is another reason why namespace packages
     should not contain any code or import statements.)

‘as_requirement()’

     Return a ‘Requirement’ instance that matches this distribution’s
     project name and version.

‘requires(extras=())’

     List the ‘Requirement’ objects that specify this distribution’s
     dependencies.  If ‘extras’ is specified, it should be a sequence of
     names of “extras” defined by the distribution, and the list
     returned will then include any dependencies needed to support the
     named “extras”.

‘clone(**kw)’

     Create a copy of the distribution.  Any supplied keyword arguments
     override the corresponding argument to the ‘Distribution()’
     constructor, allowing you to change some of the copied
     distribution’s attributes.

‘egg_name()’

     Return what this distribution’s standard filename should be, not
     including the “.egg” extension.  For example, a distribution for
     project “Foo” version 1.2 that runs on Python 2.3 for Windows would
     have an ‘egg_name()’ of ‘Foo-1.2-py2.3-win32’.  Any dashes in the
     name or version are converted to underscores.
     (‘Distribution.from_location()’ will convert them back when parsing
     a “.egg” file name.)

‘__cmp__(other)’, ‘__hash__()’

     Distribution objects are hashed and compared on the basis of their
     parsed version and precedence, followed by their key (lowercase
     project name), location, Python version, and platform.

The following methods are used to access ‘EntryPoint’ objects advertised
by the distribution.  See the section above on *note Entry Points: 7f.
for more detailed information about these operations:

‘get_entry_info(group, name)’

     Return the ‘EntryPoint’ object for ‘group’ and ‘name’, or None if
     no such point is advertised by this distribution.

‘get_entry_map(group=None)’

     Return the entry point map for ‘group’.  If ‘group’ is None, return
     a dictionary mapping group names to entry point maps for all
     groups.  (An entry point map is a dictionary of entry point names
     to ‘EntryPoint’ objects.)

‘load_entry_point(group, name)’

     Short for ‘get_entry_info(group, name).load()’.  Returns the object
     advertised by the named entry point, or raises ‘ImportError’ if the
     entry point isn’t advertised by this distribution, or there is some
     other import problem.

In addition to the above methods, ‘Distribution’ objects also implement
all of the *note IResourceProvider: 8b. and *note IMetadataProvider
Methods: 8c. (which are documented in later sections):

   * ‘has_metadata(name)’

   * ‘metadata_isdir(name)’

   * ‘metadata_listdir(name)’

   * ‘get_metadata(name)’

   * ‘get_metadata_lines(name)’

   * ‘run_script(script_name, namespace)’

   * ‘get_resource_filename(manager, resource_name)’

   * ‘get_resource_stream(manager, resource_name)’

   * ‘get_resource_string(manager, resource_name)’

   * ‘has_resource(resource_name)’

   * ‘resource_isdir(resource_name)’

   * ‘resource_listdir(resource_name)’

If the distribution was created with a ‘metadata’ argument, these
resource and metadata access methods are all delegated to that
‘metadata’ provider.  Otherwise, they are delegated to an
‘EmptyProvider’, so that the distribution will appear to have no
resources or metadata.  This delegation approach is used so that
supporting custom importers or new distribution formats can be done
simply by creating an appropriate *note IResourceProvider: 8b.
implementation; see the section below on *note Supporting Custom
Importers: 7a. for more details.


File: setuptools.info,  Node: ResourceManager API,  Next: Metadata API,  Prev: Distribution Objects,  Up: API Reference

3.2.7 ‘ResourceManager’ API
---------------------------

The ‘ResourceManager’ class provides uniform access to package
resources, whether those resources exist as files and directories or are
compressed in an archive of some kind.

Normally, you do not need to create or explicitly manage
‘ResourceManager’ instances, as the ‘pkg_resources’ module creates a
global instance for you, and makes most of its methods available as
top-level names in the ‘pkg_resources’ module namespace.  So, for
example, this code actually calls the ‘resource_string()’ method of the
global ‘ResourceManager’:

     import pkg_resources
     my_data = pkg_resources.resource_string(__name__, "foo.dat")

Thus, you can use the APIs below without needing an explicit
‘ResourceManager’ instance; just import and use them as needed.

* Menu:

* Basic Resource Access::
* Resource Extraction::
* “Provider” Interface::


File: setuptools.info,  Node: Basic Resource Access,  Next: Resource Extraction,  Up: ResourceManager API

3.2.7.1 Basic Resource Access
.............................

In the following methods, the ‘package_or_requirement’ argument may be
either a Python package/module name (e.g.  ‘foo.bar’) or a ‘Requirement’
instance.  If it is a package or module name, the named module or
package must be importable (i.e., be in a distribution or directory on
‘sys.path’), and the ‘resource_name’ argument is interpreted relative to
the named package.  (Note that if a module name is used, then the
resource name is relative to the package immediately containing the
named module.  Also, you should not use use a namespace package name,
because a namespace package can be spread across multiple distributions,
and is therefore ambiguous as to which distribution should be searched
for the resource.)

If it is a ‘Requirement’, then the requirement is automatically resolved
(searching the current ‘Environment’ if necessary) and a matching
distribution is added to the ‘WorkingSet’ and ‘sys.path’ if one was not
already present.  (Unless the ‘Requirement’ can’t be satisfied, in which
case an exception is raised.)  The ‘resource_name’ argument is then
interpreted relative to the root of the identified distribution; i.e.
its first path segment will be treated as a peer of the top-level
modules or packages in the distribution.

Note that resource names must be ‘/’-separated paths rooted at the
package, cannot contain relative names like ‘".."’, and cannot be
absolute.  Do `not' use ‘os.path’ routines to manipulate resource paths,
as they are `not' filesystem paths.

‘resource_exists(package_or_requirement, resource_name)’

     Does the named resource exist?  Return ‘True’ or ‘False’
     accordingly.

‘resource_stream(package_or_requirement, resource_name)’

     Return a readable file-like object for the specified resource; it
     may be an actual file, a ‘StringIO’, or some similar object.  The
     stream is in “binary mode”, in the sense that whatever bytes are in
     the resource will be read as-is.

‘resource_string(package_or_requirement, resource_name)’

     Return the specified resource as a string.  The resource is read in
     binary fashion, such that the returned string contains exactly the
     bytes that are stored in the resource.

‘resource_isdir(package_or_requirement, resource_name)’

     Is the named resource a directory?  Return ‘True’ or ‘False’
     accordingly.

‘resource_listdir(package_or_requirement, resource_name)’

     List the contents of the named resource directory, just like
     ‘os.listdir’ except that it works even if the resource is in a
     zipfile.

Note that only ‘resource_exists()’ and ‘resource_isdir()’ are
insensitive as to the resource type.  You cannot use
‘resource_listdir()’ on a file resource, and you can’t use
‘resource_string()’ or ‘resource_stream()’ on directory resources.
Using an inappropriate method for the resource type may result in an
exception or undefined behavior, depending on the platform and
distribution format involved.


File: setuptools.info,  Node: Resource Extraction,  Next: “Provider” Interface,  Prev: Basic Resource Access,  Up: ResourceManager API

3.2.7.2 Resource Extraction
...........................

‘resource_filename(package_or_requirement, resource_name)’

     Sometimes, it is not sufficient to access a resource in string or
     stream form, and a true filesystem filename is needed.  In such
     cases, you can use this method (or module-level function) to obtain
     a filename for a resource.  If the resource is in an archive
     distribution (such as a zipped egg), it will be extracted to a
     cache directory, and the filename within the cache will be
     returned.  If the named resource is a directory, then all resources
     within that directory (including subdirectories) are also
     extracted.  If the named resource is a C extension or “eager
     resource” (see the ‘setuptools’ documentation for details), then
     all C extensions and eager resources are extracted at the same
     time.

     Archived resources are extracted to a cache location that can be
     managed by the following two methods:

‘set_extraction_path(path)’

     Set the base path where resources will be extracted to, if needed.

     If you do not call this routine before any extractions take place,
     the path defaults to the return value of ‘get_default_cache()’.
     (Which is based on the ‘PYTHON_EGG_CACHE’ environment variable,
     with various platform-specific fallbacks.  See that routine’s
     documentation for more details.)

     Resources are extracted to subdirectories of this path based upon
     information given by the resource provider.  You may set this to a
     temporary directory, but then you must call ‘cleanup_resources()’
     to delete the extracted files when done.  There is no guarantee
     that ‘cleanup_resources()’ will be able to remove all extracted
     files.  (On Windows, for example, you can’t unlink .pyd or .dll
     files that are still in use.)

     Note that you may not change the extraction path for a given
     resource manager once resources have been extracted, unless you
     first call ‘cleanup_resources()’.

‘cleanup_resources(force=False)’

     Delete all extracted resource files and directories, returning a
     list of the file and directory names that could not be successfully
     removed.  This function does not have any concurrency protection,
     so it should generally only be called when the extraction path is a
     temporary directory exclusive to a single process.  This method is
     not automatically called; you must call it explicitly or register
     it as an ‘atexit’ function if you wish to ensure cleanup of a
     temporary directory used for extractions.


File: setuptools.info,  Node: “Provider” Interface,  Prev: Resource Extraction,  Up: ResourceManager API

3.2.7.3 “Provider” Interface
............................

If you are implementing an ‘IResourceProvider’ and/or
‘IMetadataProvider’ for a new distribution archive format, you may need
to use the following ‘IResourceManager’ methods to co-ordinate
extraction of resources to the filesystem.  If you’re not implementing
an archive format, however, you have no need to use these methods.
Unlike the other methods listed above, they are `not' available as
top-level functions tied to the global ‘ResourceManager’; you must
therefore have an explicit ‘ResourceManager’ instance to use them.

‘get_cache_path(archive_name, names=())’

     Return absolute location in cache for ‘archive_name’ and ‘names’

     The parent directory of the resulting path will be created if it
     does not already exist.  ‘archive_name’ should be the base filename
     of the enclosing egg (which may not be the name of the enclosing
     zipfile!), including its “.egg” extension.  ‘names’, if provided,
     should be a sequence of path name parts “under” the egg’s
     extraction location.

     This method should only be called by resource providers that need
     to obtain an extraction location, and only for names they intend to
     extract, as it tracks the generated names for possible cleanup
     later.

‘extraction_error()’

     Raise an ‘ExtractionError’ describing the active exception as
     interfering with the extraction process.  You should call this if
     you encounter any OS errors extracting the file to the cache path;
     it will format the operating system exception for you, and add
     other information to the ‘ExtractionError’ instance that may be
     needed by programs that want to wrap or handle extraction errors
     themselves.

‘postprocess(tempname, filename)’

     Perform any platform-specific postprocessing of ‘tempname’.
     Resource providers should call this method ONLY after successfully
     extracting a compressed resource.  They must NOT call it on
     resources that are already in the filesystem.

     ‘tempname’ is the current (temporary) name of the file, and
     ‘filename’ is the name it will be renamed to by the caller after
     this routine returns.


File: setuptools.info,  Node: Metadata API,  Next: Exceptions,  Prev: ResourceManager API,  Up: API Reference

3.2.8 Metadata API
------------------

The metadata API is used to access metadata resources bundled in a
pluggable distribution.  Metadata resources are virtual files or
directories containing information about the distribution, such as might
be used by an extensible application or framework to connect “plugins”.
Like other kinds of resources, metadata resource names are ‘/’-separated
and should not contain ‘..’ or begin with a ‘/’.  You should not use
‘os.path’ routines to manipulate resource paths.

The metadata API is provided by objects implementing the
‘IMetadataProvider’ or ‘IResourceProvider’ interfaces.  ‘Distribution’
objects implement this interface, as do objects returned by the
‘get_provider()’ function:

‘get_provider(package_or_requirement)’

     If a package name is supplied, return an ‘IResourceProvider’ for
     the package.  If a ‘Requirement’ is supplied, resolve it by
     returning a ‘Distribution’ from the current working set (searching
     the current ‘Environment’ if necessary and adding the newly found
     ‘Distribution’ to the working set).  If the named package can’t be
     imported, or the ‘Requirement’ can’t be satisfied, an exception is
     raised.

     NOTE: if you use a package name rather than a ‘Requirement’, the
     object you get back may not be a pluggable distribution, depending
     on the method by which the package was installed.  In particular,
     “development” packages and “single-version externally-managed”
     packages do not have any way to map from a package name to the
     corresponding project’s metadata.  Do not write code that passes a
     package name to ‘get_provider()’ and then tries to retrieve project
     metadata from the returned object.  It may appear to work when the
     named package is in an ‘.egg’ file or directory, but it will fail
     in other installation scenarios.  If you want project metadata, you
     need to ask for a `project', not a package.

* Menu:

* IMetadataProvider Methods::


File: setuptools.info,  Node: IMetadataProvider Methods,  Up: Metadata API

3.2.8.1 ‘IMetadataProvider’ Methods
...................................

The methods provided by objects (such as ‘Distribution’ instances) that
implement the ‘IMetadataProvider’ or ‘IResourceProvider’ interfaces are:

‘has_metadata(name)’

     Does the named metadata resource exist?

‘metadata_isdir(name)’

     Is the named metadata resource a directory?

‘metadata_listdir(name)’

     List of metadata names in the directory (like ‘os.listdir()’)

‘get_metadata(name)’

     Return the named metadata resource as a string.  The data is read
     in binary mode; i.e., the exact bytes of the resource file are
     returned.

‘get_metadata_lines(name)’

     Yield named metadata resource as list of non-blank non-comment
     lines.  This is short for calling
     ‘yield_lines(provider.get_metadata(name))’.  See the section on
     *note yield_lines(): 95. below for more information on the syntax
     it recognizes.

‘run_script(script_name, namespace)’

     Execute the named script in the supplied namespace dictionary.
     Raises ‘ResolutionError’ if there is no script by that name in the
     ‘scripts’ metadata directory.  ‘namespace’ should be a Python
     dictionary, usually a module dictionary if the script is being run
     as a module.


File: setuptools.info,  Node: Exceptions,  Next: Supporting Custom Importers,  Prev: Metadata API,  Up: API Reference

3.2.9 Exceptions
----------------

‘pkg_resources’ provides a simple exception hierarchy for problems that
may occur when processing requests to locate and activate packages:

     ResolutionError
         DistributionNotFound
         VersionConflict
         UnknownExtra

     ExtractionError

‘ResolutionError’

     This class is used as a base class for the other three exceptions,
     so that you can catch all of them with a single “except” clause.
     It is also raised directly for miscellaneous requirement-resolution
     problems like trying to run a script that doesn’t exist in the
     distribution it was requested from.

‘DistributionNotFound’

     A distribution needed to fulfill a requirement could not be found.

‘VersionConflict’

     The requested version of a project conflicts with an
     already-activated version of the same project.

‘UnknownExtra’

     One of the “extras” requested was not recognized by the
     distribution it was requested from.

‘ExtractionError’

     A problem occurred extracting a resource to the Python Egg cache.
     The following attributes are available on instances of this
     exception:

     manager

          The resource manager that raised this exception

     cache_path

          The base directory for resource extraction

     original_error

          The exception instance that caused extraction to fail


File: setuptools.info,  Node: Supporting Custom Importers,  Next: Utility Functions,  Prev: Exceptions,  Up: API Reference

3.2.10 Supporting Custom Importers
----------------------------------

By default, ‘pkg_resources’ supports normal filesystem imports, and
‘zipimport’ importers.  If you wish to use the ‘pkg_resources’ features
with other (PEP 302-compatible) importers or module loaders, you may
need to register various handlers and support functions using these
APIs:

‘register_finder(importer_type, distribution_finder)’

     Register ‘distribution_finder’ to find distributions in ‘sys.path’
     items.  ‘importer_type’ is the type or class of a PEP 302
     “Importer” (‘sys.path’ item handler), and ‘distribution_finder’ is
     a callable that, when passed a path item, the importer instance,
     and an ‘only’ flag, yields ‘Distribution’ instances found under
     that path item.  (The ‘only’ flag, if true, means the finder should
     yield only ‘Distribution’ objects whose ‘location’ is equal to the
     path item provided.)

     See the source of the ‘pkg_resources.find_on_path’ function for an
     example finder function.

‘register_loader_type(loader_type, provider_factory)’

     Register ‘provider_factory’ to make ‘IResourceProvider’ objects for
     ‘loader_type’.  ‘loader_type’ is the type or class of a PEP 302
     ‘module.__loader__’, and ‘provider_factory’ is a function that,
     when passed a module object, returns an *note IResourceProvider:
     8b. for that module, allowing it to be used with the *note
     ResourceManager API: 35.

‘register_namespace_handler(importer_type, namespace_handler)’

     Register ‘namespace_handler’ to declare namespace packages for the
     given ‘importer_type’.  ‘importer_type’ is the type or class of a
     PEP 302 “importer” (sys.path item handler), and ‘namespace_handler’
     is a callable with a signature like this:

          def namespace_handler(importer, path_entry, moduleName, module):
              # return a path_entry to use for child packages

     Namespace handlers are only called if the relevant importer object
     has already agreed that it can handle the relevant path item.  The
     handler should only return a subpath if the module ‘__path__’ does
     not already contain an equivalent subpath.  Otherwise, it should
     return None.

     For an example namespace handler, see the source of the
     ‘pkg_resources.file_ns_handler’ function, which is used for both
     zipfile importing and regular importing.

* Menu:

* IResourceProvider::
* Built-in Resource Providers::


File: setuptools.info,  Node: IResourceProvider,  Next: Built-in Resource Providers,  Up: Supporting Custom Importers

3.2.10.1 IResourceProvider
..........................

‘IResourceProvider’ is an abstract class that documents what methods are
required of objects returned by a ‘provider_factory’ registered with
‘register_loader_type()’.  ‘IResourceProvider’ is a subclass of
‘IMetadataProvider’, so objects that implement this interface must also
implement all of the *note IMetadataProvider Methods: 8c. as well as the
methods shown here.  The ‘manager’ argument to the methods below must be
an object that supports the full *note ResourceManager API: 35.
documented above.

‘get_resource_filename(manager, resource_name)’

     Return a true filesystem path for ‘resource_name’, coordinating the
     extraction with ‘manager’, if the resource must be unpacked to the
     filesystem.

‘get_resource_stream(manager, resource_name)’

     Return a readable file-like object for ‘resource_name’.

‘get_resource_string(manager, resource_name)’

     Return a string containing the contents of ‘resource_name’.

‘has_resource(resource_name)’

     Does the package contain the named resource?

‘resource_isdir(resource_name)’

     Is the named resource a directory?  Return a false value if the
     resource does not exist or is not a directory.

‘resource_listdir(resource_name)’

     Return a list of the contents of the resource directory, ala
     ‘os.listdir()’.  Requesting the contents of a non-existent
     directory may raise an exception.

Note, by the way, that your provider classes need not (and should not)
subclass ‘IResourceProvider’ or ‘IMetadataProvider’!  These classes
exist solely for documentation purposes and do not provide any useful
implementation code.  You may instead wish to subclass one of the *note
built-in resource providers: 97.


File: setuptools.info,  Node: Built-in Resource Providers,  Prev: IResourceProvider,  Up: Supporting Custom Importers

3.2.10.2 Built-in Resource Providers
....................................

‘pkg_resources’ includes several provider classes that are automatically
used where appropriate.  Their inheritance tree looks like this:

     NullProvider
         EggProvider
             DefaultProvider
                 PathMetadata
             ZipProvider
                 EggMetadata
         EmptyProvider
             FileMetadata

‘NullProvider’

     This provider class is just an abstract base that provides for
     common provider behaviors (such as running scripts), given a
     definition for just a few abstract methods.

‘EggProvider’

     This provider class adds in some egg-specific features that are
     common to zipped and unzipped eggs.

‘DefaultProvider’

     This provider class is used for unpacked eggs and “plain old
     Python” filesystem modules.

‘ZipProvider’

     This provider class is used for all zipped modules, whether they
     are eggs or not.

‘EmptyProvider’

     This provider class always returns answers consistent with a
     provider that has no metadata or resources.  ‘Distribution’ objects
     created without a ‘metadata’ argument use an instance of this
     provider class instead.  Since all ‘EmptyProvider’ instances are
     equivalent, there is no need to have more than one instance.
     ‘pkg_resources’ therefore creates a global instance of this class
     under the name ‘empty_provider’, and you may use it if you have
     need of an ‘EmptyProvider’ instance.

‘PathMetadata(path, egg_info)’

     Create an ‘IResourceProvider’ for a filesystem-based distribution,
     where ‘path’ is the filesystem location of the importable modules,
     and ‘egg_info’ is the filesystem location of the distribution’s
     metadata directory.  ‘egg_info’ should usually be the ‘EGG-INFO’
     subdirectory of ‘path’ for an “unpacked egg”, and a
     ‘ProjectName.egg-info’ subdirectory of ‘path’ for a “development
     egg”.  However, other uses are possible for custom purposes.

‘EggMetadata(zipimporter)’

     Create an ‘IResourceProvider’ for a zipfile-based distribution.
     The ‘zipimporter’ should be a ‘zipimport.zipimporter’ instance, and
     may represent a “basket” (a zipfile containing multiple “.egg”
     subdirectories) a specific egg `within' a basket, or a zipfile egg
     (where the zipfile itself is a “.egg”).  It can also be a
     combination, such as a zipfile egg that also contains other eggs.

‘FileMetadata(path_to_pkg_info)’

     Create an ‘IResourceProvider’ that provides exactly one metadata
     resource: ‘PKG-INFO’.  The supplied path should be a distutils
     PKG-INFO file.  This is basically the same as an ‘EmptyProvider’,
     except that requests for ‘PKG-INFO’ will be answered using the
     contents of the designated file.  (This provider is used to wrap
     ‘.egg-info’ files installed by vendor-supplied system packages.)


File: setuptools.info,  Node: Utility Functions,  Prev: Supporting Custom Importers,  Up: API Reference

3.2.11 Utility Functions
------------------------

In addition to its high-level APIs, ‘pkg_resources’ also includes
several generally-useful utility routines.  These routines are used to
implement the high-level APIs, but can also be quite useful by
themselves.

* Menu:

* Parsing Utilities::
* Platform Utilities::
* PEP 302 Utilities::
* File/Path Utilities::
* History::


File: setuptools.info,  Node: Parsing Utilities,  Next: Platform Utilities,  Up: Utility Functions

3.2.11.1 Parsing Utilities
..........................

‘parse_version(version)’

     Parsed a project’s version string as defined by PEP 440.  The
     returned value will be an object that represents the version.
     These objects may be compared to each other and sorted.  The
     sorting algorithm is as defined by PEP 440 with the addition that
     any version which is not a valid PEP 440 version will be considered
     less than any valid PEP 440 version and the invalid versions will
     continue sorting using the original algorithm.

‘yield_lines(strs)’

     Yield non-empty/non-comment lines from a string/unicode or a
     possibly- nested sequence thereof.  If ‘strs’ is an instance of
     ‘basestring’, it is split into lines, and each non-blank,
     non-comment line is yielded after stripping leading and trailing
     whitespace.  (Lines whose first non-blank character is ‘#’ are
     considered comment lines.)

     If ‘strs’ is not an instance of ‘basestring’, it is iterated over,
     and each item is passed recursively to ‘yield_lines()’, so that an
     arbitrarily nested sequence of strings, or sequences of sequences
     of strings can be flattened out to the lines contained therein.  So
     for example, passing a file object or a list of strings to
     ‘yield_lines’ will both work.  (Note that between each string in a
     sequence of strings there is assumed to be an implicit line break,
     so lines cannot bridge two strings in a sequence.)

     This routine is used extensively by ‘pkg_resources’ to parse
     metadata and file formats of various kinds, and most other
     ‘pkg_resources’ parsing functions that yield multiple values will
     use it to break up their input.  However, this routine is
     idempotent, so calling ‘yield_lines()’ on the output of another
     call to ‘yield_lines()’ is completely harmless.

‘split_sections(strs)’

     Split a string (or possibly-nested iterable thereof), yielding
     ‘(section, content)’ pairs found using an ‘.ini’-like syntax.  Each
     ‘section’ is a whitespace-stripped version of the section name
     (“‘[section]’”) and each ‘content’ is a list of stripped lines
     excluding blank lines and comment-only lines.  If there are any
     non-blank, non-comment lines before the first section header,
     they’re yielded in a first ‘section’ of ‘None’.

     This routine uses ‘yield_lines()’ as its front end, so you can pass
     in anything that ‘yield_lines()’ accepts, such as an open text
     file, string, or sequence of strings.  ‘ValueError’ is raised if a
     malformed section header is found (i.e.  a line starting with ‘[’
     but not ending with ‘]’).

     Note that this simplistic parser assumes that any line whose first
     nonblank character is ‘[’ is a section heading, so it can’t support
     .ini format variations that allow ‘[’ as the first nonblank
     character on other lines.

‘safe_name(name)’

     Return a “safe” form of a project’s name, suitable for use in a
     ‘Requirement’ string, as a distribution name, or a PyPI project
     name.  All non-alphanumeric runs are condensed to single “-”
     characters, such that a name like “The $$$ Tree” becomes
     “The-Tree”.  Note that if you are generating a filename from this
     value you should combine it with a call to ‘to_filename()’ so all
     dashes (“-“) are replaced by underscores (“_”).  See
     ‘to_filename()’.

‘safe_version(version)’

     This will return the normalized form of any PEP 440 version.  If
     the version string is not PEP 440 compatible, this function behaves
     similar to ‘safe_name()’ except that spaces in the input become
     dots, and dots are allowed to exist in the output.  As with
     ‘safe_name()’, if you are generating a filename from this you
     should replace any “-” characters in the output with underscores.

‘safe_extra(extra)’

     Return a “safe” form of an extra’s name, suitable for use in a
     requirement string or a setup script’s ‘extras_require’ keyword.
     This routine is similar to ‘safe_name()’ except that
     non-alphanumeric runs are replaced by a single underbar (‘_’), and
     the result is lowercased.

‘to_filename(name_or_version)’

     Escape a name or version string so it can be used in a
     dash-separated filename (or ‘#egg=name-version’ tag) without
     ambiguity.  You should only pass in values that were returned by
     ‘safe_name()’ or ‘safe_version()’.


File: setuptools.info,  Node: Platform Utilities,  Next: PEP 302 Utilities,  Prev: Parsing Utilities,  Up: Utility Functions

3.2.11.2 Platform Utilities
...........................

‘get_build_platform()’

     Return this platform’s identifier string.  For Windows, the return
     value is ‘"win32"’, and for macOS it is a string of the form
     ‘"macosx-10.4-ppc"’.  All other platforms return the same
     uname-based string that the ‘distutils.util.get_platform()’
     function returns.  This string is the minimum platform version
     required by distributions built on the local machine.  (Backward
     compatibility note: setuptools versions prior to 0.6b1 called this
     function ‘get_platform()’, and the function is still available
     under that name for backward compatibility reasons.)

‘get_supported_platform()’ (New in 0.6b1)

     This is the similar to ‘get_build_platform()’, but is the maximum
     platform version that the local machine supports.  You will usually
     want to use this value as the ‘provided’ argument to the
     ‘compatible_platforms()’ function.

‘compatible_platforms(provided, required)’

     Return true if a distribution built on the ‘provided’ platform may
     be used on the ‘required’ platform.  If either platform value is
     ‘None’, it is considered a wildcard, and the platforms are
     therefore compatible.  Likewise, if the platform strings are equal,
     they’re also considered compatible, and ‘True’ is returned.
     Currently, the only non-equal platform strings that are considered
     compatible are macOS platform strings with the same hardware type
     (e.g.  ‘ppc’) and major version (e.g.  ‘10’) with the ‘provided’
     platform’s minor version being less than or equal to the ‘required’
     platform’s minor version.

‘get_default_cache()’

     Determine the default cache location for extracting resources from
     zipped eggs.  This routine returns the ‘PYTHON_EGG_CACHE’
     environment variable, if set.  Otherwise, on Windows, it returns a
     “Python-Eggs” subdirectory of the user’s “Application Data”
     directory.  On all other systems, it returns
     ‘os.path.expanduser("~/.python-eggs")’ if ‘PYTHON_EGG_CACHE’ is not
     set.


File: setuptools.info,  Node: PEP 302 Utilities,  Next: File/Path Utilities,  Prev: Platform Utilities,  Up: Utility Functions

3.2.11.3 PEP 302 Utilities
..........................

‘get_importer(path_item)’

     A deprecated alias for ‘pkgutil.get_importer()’


File: setuptools.info,  Node: File/Path Utilities,  Next: History,  Prev: PEP 302 Utilities,  Up: Utility Functions

3.2.11.4 File/Path Utilities
............................

‘ensure_directory(path)’

     Ensure that the parent directory (‘os.path.dirname’) of ‘path’
     actually exists, using ‘os.makedirs()’ if necessary.

‘normalize_path(path)’

     Return a “normalized” version of ‘path’, such that two paths
     represent the same filesystem location if they have equal
     ‘normalized_path()’ values.  Specifically, this is a shortcut for
     calling ‘os.path.realpath’ and ‘os.path.normcase’ on ‘path’.
     Unfortunately, on certain platforms (notably Cygwin and macOS) the
     ‘normcase’ function does not accurately reflect the platform’s
     case-sensitivity, so there is always the possibility of two
     apparently-different paths being equal on such platforms.


File: setuptools.info,  Node: History,  Prev: File/Path Utilities,  Up: Utility Functions

3.2.11.5 History
................

0.6c9

        * Fix ‘resource_listdir('')’ always returning an empty list for
          zipped eggs.

0.6c7

        * Fix package precedence problem where single-version eggs
          installed in ‘site-packages’ would take precedence over ‘.egg’
          files (or directories) installed in ‘site-packages’.

0.6c6

        * Fix extracted C extensions not having executable permissions
          under Cygwin.

        * Allow ‘.egg-link’ files to contain relative paths.

        * Fix cache dir defaults on Windows when multiple environment
          vars are needed to construct a path.

0.6c4

        * Fix “dev” versions being considered newer than release
          candidates.

0.6c3

        * Python 2.5 compatibility fixes.

0.6c2

        * Fix a problem with eggs specified directly on ‘PYTHONPATH’ on
          case-insensitive filesystems possibly not showing up in the
          default working set, due to differing normalizations of
          ‘sys.path’ entries.

0.6b3

        * Fixed a duplicate path insertion problem on case-insensitive
          filesystems.

0.6b1

        * Split ‘get_platform()’ into ‘get_supported_platform()’ and
          ‘get_build_platform()’ to work around a Mac versioning problem
          that caused the behavior of ‘compatible_platforms()’ to be
          platform specific.

        * Fix entry point parsing when a standalone module name has
          whitespace between it and the extras.

0.6a11

        * Added ‘ExtractionError’ and
          ‘ResourceManager.extraction_error()’ so that cache permission
          problems get a more user-friendly explanation of the problem,
          and so that programs can catch and handle extraction errors if
          they need to.

0.6a10

        * Added the ‘extras’ attribute to ‘Distribution’, the
          ‘find_plugins()’ method to ‘WorkingSet’, and the ‘__add__()’
          and ‘__iadd__()’ methods to ‘Environment’.

        * ‘safe_name()’ now allows dots in project names.

        * There is a new ‘to_filename()’ function that escapes project
          names and versions for safe use in constructing egg filenames
          from a Distribution object’s metadata.

        * Added ‘Distribution.clone()’ method, and keyword argument
          support to other ‘Distribution’ constructors.

        * Added the ‘DEVELOP_DIST’ precedence, and automatically assign
          it to eggs using ‘.egg-info’ format.

0.6a9

        * Don’t raise an error when an invalid (unfinished) distribution
          is found unless absolutely necessary.  Warn about skipping
          invalid/unfinished eggs when building an Environment.

        * Added support for ‘.egg-info’ files or directories with
          version/platform information embedded in the filename, so that
          system packagers have the option of including ‘PKG-INFO’ files
          to indicate the presence of a system-installed egg, without
          needing to use ‘.egg’ directories, zipfiles, or ‘.pth’
          manipulation.

        * Changed ‘parse_version()’ to remove dashes before pre-release
          tags, so that ‘0.2-rc1’ is considered an `older' version than
          ‘0.2’, and is equal to ‘0.2rc1’.  The idea that a dash
          `always' meant a post-release version was highly non-intuitive
          to setuptools users and Python developers, who seem to want to
          use ‘-rc’ version numbers a lot.

0.6a8

        * Fixed a problem with ‘WorkingSet.resolve()’ that prevented
          version conflicts from being detected at runtime.

        * Improved runtime conflict warning message to identify a line
          in the user’s program, rather than flagging the ‘warn()’ call
          in ‘pkg_resources’.

        * Avoid giving runtime conflict warnings for namespace packages,
          even if they were declared by a different package than the one
          currently being activated.

        * Fix path insertion algorithm for case-insensitive filesystems.

        * Fixed a problem with nested namespace packages (e.g.
          ‘peak.util’) not being set as an attribute of their parent
          package.

0.6a6

        * Activated distributions are now inserted in ‘sys.path’ (and
          the working set) just before the directory that contains them,
          instead of at the end.  This allows e.g.  eggs in
          ‘site-packages’ to override unmanaged modules in the same
          location, and allows eggs found earlier on ‘sys.path’ to
          override ones found later.

        * When a distribution is activated, it now checks whether any
          contained non-namespace modules have already been imported and
          issues a warning if a conflicting module has already been
          imported.

        * Changed dependency processing so that it’s breadth-first,
          allowing a depender’s preferences to override those of a
          dependee, to prevent conflicts when a lower version is
          acceptable to the dependee, but not the depender.

        * Fixed a problem extracting zipped files on Windows, when the
          egg in question has had changed contents but still has the
          same version number.

0.6a4

        * Fix a bug in ‘WorkingSet.resolve()’ that was introduced in
          0.6a3.

0.6a3

        * Added ‘safe_extra()’ parsing utility routine, and use it for
          Requirement, EntryPoint, and Distribution objects’ extras
          handling.

0.6a1

        * Enhanced performance of ‘require()’ and related operations
          when all requirements are already in the working set, and
          enhanced performance of directory scanning for distributions.

        * Fixed some problems using ‘pkg_resources’ w/PEP 302 loaders
          other than ‘zipimport’, and the previously-broken “eager
          resource” support.

        * Fixed ‘pkg_resources.resource_exists()’ not working correctly,
          along with some other resource API bugs.

        * Many API changes and enhancements:

             * Added ‘EntryPoint’, ‘get_entry_map’, ‘load_entry_point’,
               and ‘get_entry_info’ APIs for dynamic plugin discovery.

             * ‘list_resources’ is now ‘resource_listdir’ (and it
               actually works)

             * Resource API functions like ‘resource_string()’ that
               accepted a package name and resource name, will now also
               accept a ‘Requirement’ object in place of the package
               name (to allow access to non-package data files in an
               egg).

             * ‘get_provider()’ will now accept a ‘Requirement’ instance
               or a module name.  If it is given a ‘Requirement’, it
               will return a corresponding ‘Distribution’ (by calling
               ‘require()’ if a suitable distribution isn’t already in
               the working set), rather than returning a metadata and
               resource provider for a specific module.  (The difference
               is in how resource paths are interpreted; supplying a
               module name means resources path will be module-relative,
               rather than relative to the distribution’s root.)

             * ‘Distribution’ objects now implement the
               ‘IResourceProvider’ and ‘IMetadataProvider’ interfaces,
               so you don’t need to reference the (no longer available)
               ‘metadata’ attribute to get at these interfaces.

             * ‘Distribution’ and ‘Requirement’ both have a
               ‘project_name’ attribute for the project name they refer
               to.  (Previously these were ‘name’ and ‘distname’
               attributes.)

             * The ‘path’ attribute of ‘Distribution’ objects is now
               ‘location’, because it isn’t necessarily a filesystem
               path (and hasn’t been for some time now).  The ‘location’
               of ‘Distribution’ objects in the filesystem should always
               be normalized using ‘pkg_resources.normalize_path()’; all
               of the setuptools’ code that generates distributions from
               the filesystem (including ‘Distribution.from_filename()’)
               ensure this invariant, but if you use a more generic API
               like ‘Distribution()’ or ‘Distribution.from_location()’
               you should take care that you don’t create a distribution
               with an un-normalized filesystem path.

             * ‘Distribution’ objects now have an ‘as_requirement()’
               method that returns a ‘Requirement’ for the
               distribution’s project name and version.

             * Distribution objects no longer have an ‘installed_on()’
               method, and the ‘install_on()’ method is now ‘activate()’
               (but may go away altogether soon).  The ‘depends()’
               method has also been renamed to ‘requires()’, and
               ‘InvalidOption’ is now ‘UnknownExtra’.

             * ‘find_distributions()’ now takes an additional argument
               called ‘only’, that tells it to only yield distributions
               whose location is the passed-in path.  (It defaults to
               False, so that the default behavior is unchanged.)

             * ‘AvailableDistributions’ is now called ‘Environment’, and
               the ‘get()’, ‘__len__()’, and ‘__contains__()’ methods
               were removed, because they weren’t particularly useful.
               ‘__getitem__()’ no longer raises ‘KeyError’; it just
               returns an empty list if there are no distributions for
               the named project.

             * The ‘resolve()’ method of ‘Environment’ is now a method
               of ‘WorkingSet’ instead, and the ‘best_match()’ method
               now uses a working set instead of a path list as its
               second argument.

             * There is a new ‘pkg_resources.add_activation_listener()’
               API that lets you register a callback for notifications
               about distributions added to ‘sys.path’ (including the
               distributions already on it).  This is basically a hook
               for extensible applications and frameworks to be able to
               search for plugin metadata in distributions added at
               runtime.

0.5a13

        * Fixed a bug in resource extraction from nested packages in a
          zipped egg.

0.5a12

        * Updated extraction/cache mechanism for zipped resources to
          avoid inter- process and inter-thread races during extraction.
          The default cache location can now be set via the
          ‘PYTHON_EGGS_CACHE’ environment variable, and the default
          Windows cache is now a ‘Python-Eggs’ subdirectory of the
          current user’s “Application Data” directory, if the
          ‘PYTHON_EGGS_CACHE’ variable isn’t set.

0.5a10

        * Fix a problem with ‘pkg_resources’ being confused by
          non-existent eggs on ‘sys.path’ (e.g.  if a user deletes an
          egg without removing it from the ‘easy-install.pth’ file).

        * Fix a problem with “basket” support in ‘pkg_resources’, where
          egg-finding never actually went inside ‘.egg’ files.

        * Made ‘pkg_resources’ import the module you request resources
          from, if it’s not already imported.

0.5a4

        * ‘pkg_resources.AvailableDistributions.resolve()’ and related
          methods now accept an ‘installer’ argument: a callable taking
          one argument, a ‘Requirement’ instance.  The callable must
          return a ‘Distribution’ object, or ‘None’ if no distribution
          is found.  This feature is used by EasyInstall to resolve
          dependencies by recursively invoking itself.

0.4a4

        * Fix problems with ‘resource_listdir()’, ‘resource_isdir()’ and
          resource directory extraction for zipped eggs.

0.4a3

        * Fixed scripts not being able to see a ‘__file__’ variable in
          ‘__main__’

        * Fixed a problem with ‘resource_isdir()’ implementation that
          was introduced in 0.4a2.

0.4a1

        * Fixed a bug in requirements processing for exact versions
          (i.e.  ‘==’ and ‘!=’) when only one condition was included.

        * Added ‘safe_name()’ and ‘safe_version()’ APIs to clean up
          handling of arbitrary distribution names and versions found on
          PyPI.

0.3a4

        * ‘pkg_resources’ now supports resource directories, not just
          the resources in them.  In particular, there are
          ‘resource_listdir()’ and ‘resource_isdir()’ APIs.

        * ‘pkg_resources’ now supports “egg baskets” – .egg zipfiles
          which contain multiple distributions in subdirectories whose
          names end with ‘.egg’.  Having such a “basket” in a directory
          on ‘sys.path’ is equivalent to having the individual eggs in
          that directory, but the contained eggs can be individually
          added (or not) to ‘sys.path’.  Currently, however, there is no
          automated way to create baskets.

        * Namespace package manipulation is now protected by the Python
          import lock.

0.3a1

        * Initial release.


File: setuptools.info,  Node: Keywords,  Next: Roadmap,  Prev: Package Discovery and Resource Access using pkg_resources,  Up: Top

4 Keywords
**********

‘name’

     A string specifying the name of the package.

‘version’

     A string specifying the version number of the package.

‘description’

     A string describing the package in a single line.

‘long_description’

     A string providing a longer description of the package.

‘long_description_content_type’

     A string specifying the content type is used for the
     ‘long_description’ (e.g.  ‘text/markdown’)

‘author’

     A string specifying the author of the package.

‘author_email’

     A string specifying the email address of the package author.

‘maintainer’

     A string specifying the name of the current maintainer, if
     different from the author.  Note that if the maintainer is
     provided, setuptools will use it as the author in ‘PKG-INFO’.

‘maintainer_email’

     A string specifying the email address of the current maintainer, if
     different from the author.

‘url’

     A string specifying the URL for the package homepage.

‘download_url’

     A string specifying the URL to download the package.

‘packages’

     A list of strings specifying the packages that setuptools will
     manipulate.

‘py_modules’

     A list of strings specifying the modules that setuptools will
     manipulate.

‘scripts’

     A list of strings specifying the standalone script files to be
     built and installed.

‘ext_package’

     A string specifying the base package name for the extensions
     provided by this package.

‘ext_modules’

     A list of instances of ‘setuptools.Extension’ providing the list of
     Python extensions to be built.

‘classifiers’

     A list of strings describing the categories for the package.

‘distclass’

     A subclass of ‘Distribution’ to use.

‘script_name’

     A string specifying the name of the setup.py script – defaults to
     ‘sys.argv[0]’

‘script_args’

     A list of strings defining the arguments to supply to the setup
     script.

‘options’

     A dictionary providing the default options for the setup script.

‘license’

     A string specifying the license of the package.

‘keywords’

     A list of strings or a comma-separated string providing descriptive
     meta-data.  See: PEP 0314(1).

‘platforms’

     A list of strings or comma-separated string.

‘cmdclass’

     A dictionary providing a mapping of command names to ‘Command’
     subclasses.

‘data_files’

          Warning: ‘data_files’ is deprecated.  It does not work with
          wheels, so it should be avoided.

     A list of strings specifying the data files to install.

‘package_dir’

     A dictionary providing a mapping of package to directory names.

‘requires’

          Warning: ‘requires’ is superseded by ‘install_requires’ and
          should not be used anymore.

‘obsoletes’

          Warning: ‘obsoletes’ is currently ignored by ‘pip’.

     List of strings describing packages which this package renders
     obsolete, meaning that the two projects should not be installed at
     the same time.

     Version declarations can be supplied.  Version numbers must be in
     the format specified in Version specifiers (e.g.  ‘foo (<3.0)’).

     This field may be followed by an environment marker after a
     semicolon (e.g.  ‘foo; os_name == "posix"’)

     The most common use of this field will be in case a project name
     changes, e.g.  Gorgon 2.3 gets subsumed into Torqued Python 1.0.
     When you install Torqued Python, the Gorgon distribution should be
     removed.

‘provides’

          Warning: ‘provides’ is currently ignored by ‘pip’.

     List of strings describing package- and virtual package names
     contained within this package.

     A package may provide additional names, e.g.  to indicate that
     multiple projects have been bundled together.  For instance, source
     distributions of the ZODB project have historically included the
     transaction project, which is now available as a separate
     distribution.  Installing such a source distribution satisfies
     requirements for both ZODB and transaction.

     A package may also provide a “virtual” project name, which does not
     correspond to any separately-distributed project: such a name might
     be used to indicate an abstract capability which could be supplied
     by one of multiple projects.  E.g., multiple projects might supply
     RDBMS bindings for use by a given ORM: each project might declare
     that it provides ORM-bindings, allowing other projects to depend
     only on having at most one of them installed.

     A version declaration may be supplied and must follow the rules
     described in Version specifiers.  The distribution’s version number
     will be implied if none is specified (e.g.  ‘foo (<3.0)’).

     Each package may be followed by an environment marker after a
     semicolon (e.g.  ‘foo; os_name == "posix"’).

‘include_package_data’

     If set to ‘True’, this tells ‘setuptools’ to automatically include
     any data files it finds inside your package directories that are
     specified by your ‘MANIFEST.in’ file.  For more information, see
     the section on *note Including Data Files: 12.

‘exclude_package_data’

     A dictionary mapping package names to lists of glob patterns that
     should be `excluded' from your package directories.  You can use
     this to trim back any excess files included by
     ‘include_package_data’.  For a complete description and examples,
     see the section on *note Including Data Files: 12.

‘package_data’

     A dictionary mapping package names to lists of glob patterns.  For
     a complete description and examples, see the section on *note
     Including Data Files: 12.  You do not need to use this option if
     you are using ‘include_package_data’, unless you need to add e.g.
     files that are generated by your setup script and build process.
     (And are therefore not in source control or are files that you
     don’t want to include in your source distribution.)

‘zip_safe’

     A boolean (True or False) flag specifying whether the project can
     be safely installed and run from a zip file.  If this argument is
     not supplied, the ‘bdist_egg’ command will have to analyze all of
     your project’s contents for possible problems each time it builds
     an egg.

‘install_requires’

     A string or list of strings specifying what other distributions
     need to be installed when this one is.  See the section on *note
     Declaring required dependency: 2b. for details and examples of the
     format of this argument.

‘entry_points’

     A dictionary mapping entry point group names to strings or lists of
     strings defining the entry points.  Entry points are used to
     support dynamic discovery of services or plugins provided by a
     project.  See *note Advertising Behavior: 25. for details and
     examples of the format of this argument.  In addition, this keyword
     is used to support *note Automatic Script Creation: 21.

‘extras_require’

     A dictionary mapping names of “extras” (optional features of your
     project) to strings or lists of strings specifying what other
     distributions must be installed to support those features.  See the
     section on *note Declaring required dependency: 2b. for details and
     examples of the format of this argument.

‘python_requires’

     A string corresponding to a version specifier (as defined in PEP
     440) for the Python version, used to specify the Requires-Python
     defined in PEP 345.

‘setup_requires’

          Warning: Using ‘setup_requires’ is discouraged in favor of
          PEP-518(2)

     A string or list of strings specifying what other distributions
     need to be present in order for the `setup script' to run.
     ‘setuptools’ will attempt to obtain these (even going so far as to
     download them using ‘EasyInstall’) before processing the rest of
     the setup script or commands.  This argument is needed if you are
     using distutils extensions as part of your build process; for
     example, extensions that process setup() arguments and turn them
     into EGG-INFO metadata files.

     (Note: projects listed in ‘setup_requires’ will NOT be
     automatically installed on the system where the setup script is
     being run.  They are simply downloaded to the ./.eggs directory if
     they’re not locally available already.  If you want them to be
     installed, as well as being available when the setup script is run,
     you should add them to ‘install_requires’ `and' ‘setup_requires’.)

‘dependency_links’

          Warning: ‘dependency_links’ is deprecated.  It is not
          supported anymore by pip.

     A list of strings naming URLs to be searched when satisfying
     dependencies.  These links will be used if needed to install
     packages specified by ‘setup_requires’ or ‘tests_require’.  They
     will also be written into the egg’s metadata for use by tools like
     EasyInstall to use when installing an ‘.egg’ file.

‘namespace_packages’

     A list of strings naming the project’s “namespace packages”.  A
     namespace package is a package that may be split across multiple
     project distributions.  For example, Zope 3’s ‘zope’ package is a
     namespace package, because subpackages like ‘zope.interface’ and
     ‘zope.publisher’ may be distributed separately.  The egg runtime
     system can automatically merge such subpackages into a single
     parent package at runtime, as long as you declare them in each
     project that contains any subpackages of the namespace package, and
     as long as the namespace package’s ‘__init__.py’ does not contain
     any code other than a namespace declaration.  See the section on
     *note Using find_namespace; or find_namespace_packages: 1c. for
     more information.

‘test_suite’

     A string naming a ‘unittest.TestCase’ subclass (or a package or
     module containing one or more of them, or a method of such a
     subclass), or naming a function that can be called with no
     arguments and returns a ‘unittest.TestSuite’.  If the named suite
     is a module, and the module has an ‘additional_tests()’ function,
     it is called and the results are added to the tests to be run.  If
     the named suite is a package, any submodules and subpackages are
     recursively added to the overall test suite.

     Specifying this argument enables use of the *note test - Build
     package and run a unittest suite: 56. command to run the specified
     test suite, e.g.  via ‘setup.py test’.  See the section on the
     *note test - Build package and run a unittest suite: 56. command
     below for more details.

     New in 41.5.0: Deprecated the test command.

‘tests_require’

     If your project’s tests need one or more additional packages
     besides those needed to install it, you can use this option to
     specify them.  It should be a string or list of strings specifying
     what other distributions need to be present for the package’s tests
     to run.  When you run the ‘test’ command, ‘setuptools’ will attempt
     to obtain these (even going so far as to download them using
     ‘EasyInstall’).  Note that these required projects will `not' be
     installed on the system where the tests are run, but only
     downloaded to the project’s setup directory if they’re not already
     installed locally.

     New in 41.5.0: Deprecated the test command.

‘test_loader’

     If you would like to use a different way of finding tests to run
     than what setuptools normally uses, you can specify a module name
     and class name in this argument.  The named class must be
     instantiable with no arguments, and its instances must support the
     ‘loadTestsFromNames()’ method as defined in the Python ‘unittest’
     module’s ‘TestLoader’ class.  Setuptools will pass only one test
     “name” in the ‘names’ argument: the value supplied for the
     ‘test_suite’ argument.  The loader you specify may interpret this
     string in any way it likes, as there are no restrictions on what
     may be contained in a ‘test_suite’ string.

     The module name and class name must be separated by a ‘:’.  The
     default value of this argument is
     ‘"setuptools.command.test:ScanningLoader"’.  If you want to use the
     default ‘unittest’ behavior, you can specify
     ‘"unittest:TestLoader"’ as your ‘test_loader’ argument instead.
     This will prevent automatic scanning of submodules and subpackages.

     The module and class you specify here may be contained in another
     package, as long as you use the ‘tests_require’ option to ensure
     that the package containing the loader class is available when the
     ‘test’ command is run.

     New in 41.5.0: Deprecated the test command.

‘eager_resources’

     A list of strings naming resources that should be extracted
     together, if any of them is needed, or if any C extensions included
     in the project are imported.  This argument is only useful if the
     project will be installed as a zipfile, and there is a need to have
     all of the listed resources be extracted to the filesystem `as a
     unit'.  Resources listed here should be ‘/’-separated paths,
     relative to the source root, so to list a resource ‘foo.png’ in
     package ‘bar.baz’, you would include the string ‘bar/baz/foo.png’
     in this argument.

     If you only need to obtain resources one at a time, or you don’t
     have any C extensions that access other files in the project (such
     as data files or shared libraries), you probably do NOT need this
     argument and shouldn’t mess with it.  For more details on how this
     argument works, see the section below on *note Automatic Resource
     Extraction: 58.

‘use_2to3’

     Convert the source code from Python 2 to Python 3 with 2to3 during
     the build process.  See *note Supporting both Python 2 and Python 3
     with Setuptools: 59. for more details.

‘convert_2to3_doctests’

     List of doctest source files that need to be converted with 2to3.
     See *note Supporting both Python 2 and Python 3 with Setuptools:
     59. for more details.

‘use_2to3_fixers’

     A list of modules to search for additional fixers to be used during
     the 2to3 conversion.  See *note Supporting both Python 2 and Python
     3 with Setuptools: 59. for more details.

‘use_2to3_exclude_fixers’

     List of fixer names to be skipped.

‘project_urls’

     An arbitrary map of URL names to hyperlinks, allowing more
     extensible documentation of where various resources can be found
     than the simple ‘url’ and ‘download_url’ options provide.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0314/

   (2) http://www.python.org/dev/peps/pep-0518/


File: setuptools.info,  Node: Roadmap,  Next: Building and Distributing Packages with Setuptools<2>,  Prev: Keywords,  Up: Top

5 Roadmap
*********

Setuptools maintains a series of milestones(1) to track a roadmap of
large-scale goals.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/milestones


File: setuptools.info,  Node: Building and Distributing Packages with Setuptools<2>,  Next: Development on Setuptools,  Prev: Roadmap,  Up: Top

6 Building and Distributing Packages with Setuptools
****************************************************

‘Setuptools’ is a collection of enhancements to the Python ‘distutils’
that allow developers to more easily build and distribute Python
packages, especially ones that have dependencies on other packages.

Packages built and distributed using ‘setuptools’ look to the user like
ordinary Python packages based on the ‘distutils’.

Feature Highlights:

   * Create Python Eggs(1) - a single-file importable distribution
     format

   * Enhanced support for accessing data files hosted in zipped
     packages.

   * Automatically include all packages in your source tree, without
     listing them individually in setup.py

   * Automatically include all relevant files in your source
     distributions, without needing to create a ‘MANIFEST.in’ file, and
     without having to force regeneration of the ‘MANIFEST’ file when
     your source tree changes.

   * Automatically generate wrapper scripts or Windows (console and GUI)
     .exe files for any number of “main” functions in your project.
     (Note: this is not a py2exe replacement; the .exe files rely on the
     local Python installation.)

   * Transparent Cython support, so that your setup.py can list ‘.pyx’
     files and still work even when the end-user doesn’t have Cython
     installed (as long as you include the Cython-generated C in your
     source distribution)

   * Command aliases - create project-specific, per-user, or site-wide
     shortcut names for commonly used commands and options

   * Deploy your project in “development mode”, such that it’s available
     on ‘sys.path’, yet can still be edited directly from its source
     checkout.

   * Easily extend the distutils with new commands or ‘setup()’
     arguments, and distribute/reuse your extensions for multiple
     projects, without copying code.

   * Create extensible applications and frameworks that automatically
     discover extensions, using simple “entry points” declared in a
     project’s setup script.

   * Full support for PEP 420 via ‘find_namespace_packages()’, which is
     also backwards compatible to the existing ‘find_packages()’ for
     Python >= 3.3.

* Menu:

* Developer’s Guide::

   ---------- Footnotes ----------

   (1) http://peak.telecommunity.com/DevCenter/PythonEggs


File: setuptools.info,  Node: Developer’s Guide,  Up: Building and Distributing Packages with Setuptools<2>

6.1 Developer’s Guide
=====================

* Menu:

* TRANSITIONAL NOTE::


File: setuptools.info,  Node: TRANSITIONAL NOTE,  Up: Developer’s Guide

6.1.1 TRANSITIONAL NOTE
-----------------------

Setuptools automatically calls ‘declare_namespace()’ for you at runtime,
but future versions may `not'.  This is because the automatic
declaration feature has some negative side effects, such as needing to
import all namespace packages during the initialization of the
‘pkg_resources’ runtime, and also the need for ‘pkg_resources’ to be
explicitly imported before any namespace packages work at all.  In some
future releases, you’ll be responsible for including your own
declaration lines, and the automatic declaration feature will be dropped
to get rid of the negative side effects.

During the remainder of the current development cycle, therefore,
setuptools will warn you about missing ‘declare_namespace()’ calls in
your ‘__init__.py’ files, and you should correct these as soon as
possible before the compatibility support is removed.  Namespace
packages without declaration lines will not work correctly once a user
has upgraded to a later version, so it’s important that you make this
change now in order to avoid having your code break in the field.  Our
apologies for the inconvenience, and thank you for your patience.

* Menu:

* setup.cfg-only projects: setup cfg-only projects.
* Configuration API::
* Mailing List and Bug Tracker::


File: setuptools.info,  Node: setup cfg-only projects,  Next: Configuration API,  Up: TRANSITIONAL NOTE

6.1.1.1 setup.cfg-only projects
...............................

New in version 40.9.0.

If ‘setup.py’ is missing from the project directory when a PEP 517(1)
build is invoked, ‘setuptools’ emulates a dummy ‘setup.py’ file
containing only a ‘setuptools.setup()’ call.

     Note: PEP 517(2) doesn’t support editable installs so this is
     currently incompatible with ‘pip install -e .’, as PEP 517(3) does
     not support editable installs.

This means that you can have a Python project with all build
configuration specified in ‘setup.cfg’, without a ‘setup.py’ file, if
you `can rely on' your project always being built by a PEP 517(4)/ PEP
518(5) compatible frontend.

To use this feature:

   * Specify build requirements and PEP 517(6) build backend in
     ‘pyproject.toml’.  For example:

          [build-system]
          requires = [
            "setuptools >= 40.9.0",
            "wheel",
          ]
          build-backend = "setuptools.build_meta"

   * Use a PEP 517(7) compatible build frontend, such as ‘pip >= 19’ or
     ‘pep517’.

          Warning: As PEP 517(8) is new, support is not universal, and
          frontends that do support it may still have bugs.  For
          compatibility, you may want to put a ‘setup.py’ file
          containing only a ‘setuptools.setup()’ invocation.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0517

   (2) https://www.python.org/dev/peps/pep-0517

   (3) https://www.python.org/dev/peps/pep-0517

   (4) https://www.python.org/dev/peps/pep-0517

   (5) https://www.python.org/dev/peps/pep-0518

   (6) https://www.python.org/dev/peps/pep-0517

   (7) https://www.python.org/dev/peps/pep-0517

   (8) https://www.python.org/dev/peps/pep-0517


File: setuptools.info,  Node: Configuration API,  Next: Mailing List and Bug Tracker,  Prev: setup cfg-only projects,  Up: TRANSITIONAL NOTE

6.1.1.2 Configuration API
.........................

Some automation tools may wish to access data from a configuration file.

‘Setuptools’ exposes a ‘read_configuration()’ function for parsing
‘metadata’ and ‘options’ sections into a dictionary.

     from setuptools.config import read_configuration

     conf_dict = read_configuration("/home/user/dev/package/setup.cfg")

By default, ‘read_configuration()’ will read only the file provided in
the first argument.  To include values from other configuration files
which could be in various places, set the ‘find_others’ keyword argument
to ‘True’.

If you have only a configuration file but not the whole package, you can
still try to get data out of it with the help of the
‘ignore_option_errors’ keyword argument.  When it is set to ‘True’, all
options with errors possibly produced by directives, such as ‘attr:’ and
others, will be silently ignored.  As a consequence, the resulting
dictionary will include no such options.


File: setuptools.info,  Node: Mailing List and Bug Tracker,  Prev: Configuration API,  Up: TRANSITIONAL NOTE

6.1.1.3 Mailing List and Bug Tracker
....................................

Please use the distutils-sig mailing list(1) for questions and
discussion about setuptools, and the setuptools bug tracker(2) ONLY for
issues you have confirmed via the list are actual bugs, and which you
have reduced to a minimal set of steps to reproduce.

   ---------- Footnotes ----------

   (1) http://mail.python.org/pipermail/distutils-sig/

   (2) https://github.com/pypa/setuptools/


File: setuptools.info,  Node: Development on Setuptools,  Next: Guides on backward compatibility & deprecated practice,  Prev: Building and Distributing Packages with Setuptools<2>,  Up: Top

7 Development on Setuptools
***************************

Setuptools is maintained by the Python community under the Python
Packaging Authority (PyPA) and led by Jason R. Coombs.

This document describes the process by which Setuptools is developed.
This document assumes the reader has some passing familiarity with
`using' setuptools, the ‘pkg_resources’ module, and pip.  It does not
attempt to explain basic concepts like inter-project dependencies, nor
does it contain detailed lexical syntax for most file formats.  Neither
does it explain concepts like “namespace packages” or “resources” in any
detail, as all of these subjects are covered at length in the setuptools
developer’s guide and the ‘pkg_resources’ reference manual.

Instead, this is `internal' documentation for how those concepts and
features are `implemented' in concrete terms.  It is intended for people
who are working on the setuptools code base, who want to be able to
troubleshoot setuptools problems, want to write code that reads the file
formats involved, or want to otherwise tinker with setuptools-generated
files and directories.

Note, however, that these are all internal implementation details and
are therefore subject to change; stick to the published API if you don’t
want to be responsible for keeping your code from breaking when
setuptools changes.  You have been warned.

* Menu:

* Developer’s Guide for Setuptools::
* Release Process::


File: setuptools.info,  Node: Developer’s Guide for Setuptools,  Next: Release Process,  Up: Development on Setuptools

7.1 Developer’s Guide for Setuptools
====================================

If you want to know more about contributing on Setuptools, this is the
place.

* Menu:

* Recommended Reading::
* Project Management::
* Authoring Tickets::
* Making a pull request::
* Auto-Merge Requests::
* Testing::
* Semantic Versioning::
* Building Documentation::
* Vendored Dependencies::


File: setuptools.info,  Node: Recommended Reading,  Next: Project Management,  Up: Developer’s Guide for Setuptools

7.1.1 Recommended Reading
-------------------------

Please read How to write the perfect pull request(1) for some tips on
contributing to open source projects.  Although the article is not
authoritative, it was authored by the maintainer of Setuptools, so
reflects his opinions and will improve the likelihood of acceptance and
quality of contribution.

   ---------- Footnotes ----------

   (1) https://blog.jaraco.com/how-to-write-perfect-pull-request/


File: setuptools.info,  Node: Project Management,  Next: Authoring Tickets,  Prev: Recommended Reading,  Up: Developer’s Guide for Setuptools

7.1.2 Project Management
------------------------

Setuptools is maintained primarily in GitHub at this home(1).
Setuptools is maintained under the Python Packaging Authority (PyPA)
with several core contributors.  All bugs for Setuptools are filed and
the canonical source is maintained in GitHub.

User support and discussions are done through the issue tracker (for
specific) issues, through the distutils-sig mailing list(2), or on IRC
(Freenode) at #pypa.

Discussions about development happen on the distutils-sig mailing list
or on Gitter(3).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools

   (2) https://mail.python.org/mailman3/lists/distutils-sig.python.org/

   (3) https://gitter.im/pypa/setuptools


File: setuptools.info,  Node: Authoring Tickets,  Next: Making a pull request,  Prev: Project Management,  Up: Developer’s Guide for Setuptools

7.1.3 Authoring Tickets
-----------------------

Before authoring any source code, it’s often prudent to file a ticket
describing the motivation behind making changes.  First search to see if
a ticket already exists for your issue.  If not, create one.  Try to
think from the perspective of the reader.  Explain what behavior you
expected, what you got instead, and what factors might have contributed
to the unexpected behavior.  In GitHub, surround a block of code or
traceback with the triple backtick “‘‘‘” so that it is formatted nicely.

Filing a ticket provides a forum for justification, discussion, and
clarification.  The ticket provides a record of the purpose for the
change and any hard decisions that were made.  It provides a single
place for others to reference when trying to understand why the software
operates the way it does or why certain changes were made.

Setuptools makes extensive use of hyperlinks to tickets in the changelog
so that system integrators and other users can get a quick summary, but
then jump to the in-depth discussion about any subject referenced.


File: setuptools.info,  Node: Making a pull request,  Next: Auto-Merge Requests,  Prev: Authoring Tickets,  Up: Developer’s Guide for Setuptools

7.1.4 Making a pull request
---------------------------

When making a pull request, please *note include a short summary of the
changes: b1. and a reference to any issue tickets that the PR is
intended to solve.  All PRs with code changes should include tests.  All
changes should include a changelog entry.

* Menu:

* Adding change notes with your PRs::
* Alright! So how to add a news fragment?::
* Examples for adding changelog entries to your Pull Requests::


File: setuptools.info,  Node: Adding change notes with your PRs,  Next: Alright! So how to add a news fragment?,  Up: Making a pull request

7.1.4.1 Adding change notes with your PRs
.........................................

It is very important to maintain a log for news of how updating to the
new version of the software will affect end-users.  This is why we
enforce collection of the change fragment files in pull requests as per
Towncrier philosophy(1).

The idea is that when somebody makes a change, they must record the bits
that would affect end-users only including information that would be
useful to them.  Then, when the maintainers publish a new release,
they’ll automatically use these records to compose a change log for the
respective version.  It is important to understand that including
unnecessary low-level implementation related details generates noise
that is not particularly useful to the end-users most of the time.  And
so such details should be recorded in the Git history rather than a
changelog.

   ---------- Footnotes ----------

   (1) 
https://towncrier.readthedocs.io/en/actual-freaking-docs/#philosophy


File: setuptools.info,  Node: Alright! So how to add a news fragment?,  Next: Examples for adding changelog entries to your Pull Requests,  Prev: Adding change notes with your PRs,  Up: Making a pull request

7.1.4.2 Alright! So how to add a news fragment?
...............................................

‘setuptools’ uses towncrier(1) for changelog management.  To submit a
change note about your PR, add a text file into the ‘changelog.d/’
folder.  It should contain an explanation of what applying this PR will
change in the way end-users interact with the project.  One sentence is
usually enough but feel free to add as many details as you feel
necessary for the users to understand what it means.

`Use the past tense' for the text in your fragment because, combined
with others, it will be a part of the “news digest” telling the readers
`what changed' in a specific version of the library `since the previous
version'.  You should also use reStructuredText syntax for highlighting
code (inline or block), linking parts of the docs or external sites.  If
you wish to sign your change, feel free to add ‘-- by
:user:`github-username`’ at the end (replace ‘github-username’ with your
own!).

Finally, name your file following the convention that Towncrier
understands: it should start with the number of an issue or a PR
followed by a dot, then add a patch type, like ‘change’, ‘doc’, ‘misc’
etc., and add ‘.rst’ as a suffix.  If you need to add more than one
fragment, you may add an optional sequence number (delimited with
another period) between the type and the suffix.

In general the name will follow ‘<pr_number>.<category>.rst’ pattern,
where the categories are:

   - ‘change’: Any backwards compatible code change

   - ‘breaking’: Any backwards-compatibility breaking change

   - ‘doc’: A change to the documentation

   - ‘misc’: Changes internal to the repo like CI, test and build
     changes

   - ‘deprecation’: For deprecations of an existing feature or behavior

A pull request may have more than one of these components, for example a
code change may introduce a new feature that deprecates an old feature,
in which case two fragments should be added.  It is not necessary to
make a separate documentation fragment for documentation changes
accompanying the relevant code changes.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/towncrier/


File: setuptools.info,  Node: Examples for adding changelog entries to your Pull Requests,  Prev: Alright! So how to add a news fragment?,  Up: Making a pull request

7.1.4.3 Examples for adding changelog entries to your Pull Requests
...................................................................

File ‘changelog.d/2395.doc.1.rst’:

     Added a ``:user:`` role to Sphinx config -- by :user:`webknjaz`

File ‘changelog.d/1354.misc.rst’:

     Added ``towncrier`` for changelog managment -- by :user:`pganssle`

File ‘changelog.d/2355.change.rst’:

     When pip is imported as part of a build, leave :py:mod:`distutils`
     patched -- by :user:`jaraco`

     Tip: See ‘pyproject.toml’ for all available categories
     (‘tool.towncrier.type’).


File: setuptools.info,  Node: Auto-Merge Requests,  Next: Testing,  Prev: Making a pull request,  Up: Developer’s Guide for Setuptools

7.1.5 Auto-Merge Requests
-------------------------

To support running all code through CI, even lightweight contributions,
the project employs Mergify to auto-merge pull requests tagged as
auto-merge.

Use ‘hub pull-request -l auto-merge’ to create such a pull request from
the command line after pushing a new branch.


File: setuptools.info,  Node: Testing,  Next: Semantic Versioning,  Prev: Auto-Merge Requests,  Up: Developer’s Guide for Setuptools

7.1.6 Testing
-------------

The primary tests are run using tox.  Make sure you have tox installed,
and invoke it:

     $ tox

Under continuous integration, additional tests may be run.  See the
‘.travis.yml’ file for full details on the tests run under Travis-CI.


File: setuptools.info,  Node: Semantic Versioning,  Next: Building Documentation,  Prev: Testing,  Up: Developer’s Guide for Setuptools

7.1.7 Semantic Versioning
-------------------------

Setuptools follows ‘semver’.


File: setuptools.info,  Node: Building Documentation,  Next: Vendored Dependencies,  Prev: Semantic Versioning,  Up: Developer’s Guide for Setuptools

7.1.8 Building Documentation
----------------------------

Setuptools relies on the Sphinx(1) system for building documentation.
The published documentation(2) is hosted on Read the Docs.

To build the docs locally, use tox:

     $ tox -e docs

   ---------- Footnotes ----------

   (1) http://www.sphinx-doc.org/en/master/

   (2) https://setuptools.readthedocs.io/en/latest/


File: setuptools.info,  Node: Vendored Dependencies,  Prev: Building Documentation,  Up: Developer’s Guide for Setuptools

7.1.9 Vendored Dependencies
---------------------------

Setuptools has some dependencies, but due to bootstrapping issues(1),
those dependencies cannot be declared as they won’t be resolved soon
enough to build setuptools from source.  Eventually, this limitation may
be lifted as PEP 517/518 reach ubiquitous adoption, but for now,
Setuptools cannot declare dependencies other than through
‘setuptools/_vendor/vendored.txt’ and
‘pkg_resources/_vendor/vendored.txt’ and refreshed by way of ‘paver
update_vendored’ (pavement.py).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/980


File: setuptools.info,  Node: Release Process,  Prev: Developer’s Guide for Setuptools,  Up: Development on Setuptools

7.2 Release Process
===================

In order to allow for rapid, predictable releases, Setuptools uses a
mechanical technique for releases, enacted on tagged commits by
continuous integration.

To finalize a release, run ‘tox -e finalize’, review, then push the
changes.

If tests pass, the release will be uploaded to PyPI.

* Menu:

* Release Frequency::
* Release Managers::


File: setuptools.info,  Node: Release Frequency,  Next: Release Managers,  Up: Release Process

7.2.1 Release Frequency
-----------------------

Some have asked why Setuptools is released so frequently.  Because
Setuptools uses a mechanical release process, it’s very easy to make
releases whenever the code is stable (tests are passing).  As a result,
the philosophy is to release early and often.

While some find the frequent releases somewhat surprising, they only
empower the user.  Although releases are made frequently, users can
choose the frequency at which they use those releases.  If instead
Setuptools contributions were only released in batches, the user would
be constrained to only use Setuptools when those official releases were
made.  With frequent releases, the user can govern exactly how often he
wishes to update.

Frequent releases also then obviate the need for dev or beta releases in
most cases.  Because releases are made early and often, bugs are
discovered and corrected quickly, in many cases before other users have
yet to encounter them.


File: setuptools.info,  Node: Release Managers,  Prev: Release Frequency,  Up: Release Process

7.2.2 Release Managers
----------------------

Additionally, anyone with push access to the master branch has access to
cut releases.


File: setuptools.info,  Node: Guides on backward compatibility & deprecated practice,  Next: History<2>,  Prev: Development on Setuptools,  Up: Top

8 Guides on backward compatibility & deprecated practice
********************************************************

‘Setuptools’ has undergone tremendous changes since its first debut.  As
its development continues to roll forward, many of the practice and
mechanisms it had established are now considered deprecated.  But they
still remain relevant as a plethora of libraries continue to depend on
them.  Many people also find it necessary to equip themselves with the
knowledge to better support backward compatibility.  This guide aims to
provide the essential information for such objectives.

* Menu:

* Supporting both Python 2 and Python 3 with Setuptools::
* The Internal Structure of Python Eggs::
* Easy Install::
* Porting from Distutils::
* “Eggsecutable” Scripts::


File: setuptools.info,  Node: Supporting both Python 2 and Python 3 with Setuptools,  Next: The Internal Structure of Python Eggs,  Up: Guides on backward compatibility & deprecated practice

8.1 Supporting both Python 2 and Python 3 with Setuptools
=========================================================

Starting with Distribute version 0.6.2 and Setuptools 0.7, the
Setuptools project supported Python 3.  Installing and using setuptools
for Python 3 code works exactly the same as for Python 2 code.

Setuptools provides a facility to invoke 2to3 on the code as a part of
the build process, by setting the keyword parameter ‘use_2to3’ to True,
but the Setuptools project strongly recommends instead developing a
unified codebase using six(1), future(2), or another compatibility
library.

* Menu:

* Using 2to3::
* Distributing Python 3 modules::
* Advanced features::

   ---------- Footnotes ----------

   (1) https://pypi.org/project/six/

   (2) https://pypi.org/project/future/


File: setuptools.info,  Node: Using 2to3,  Next: Distributing Python 3 modules,  Up: Supporting both Python 2 and Python 3 with Setuptools

8.1.1 Using 2to3
----------------

Setuptools attempts to make the porting process easier by automatically
running 2to3 as a part of running tests.  To do so, you need to
configure the setup.py so that you can run the unit tests with ‘python
setup.py test’.

See *note test - Build package and run a unittest suite: 56. for more
information on this.

Once you have the tests running under Python 2, you can add the use_2to3
keyword parameters to setup(), and start running the tests under Python
3.  The test command will now first run the build command during which
the code will be converted with 2to3, and the tests will then be run
from the build directory, as opposed from the source directory as is
normally done.

Setuptools will convert all Python files, and also all doctests in
Python files.  However, if you have doctests located in separate text
files, these will not automatically be converted.  By adding them to the
‘convert_2to3_doctests’ keyword parameter Setuptools will convert them
as well.

By default, the conversion uses all fixers in the ‘lib2to3.fixers’
package.  To use additional fixers, the parameter ‘use_2to3_fixers’ can
be set to a list of names of packages containing fixers.  To exclude
fixers, the parameter ‘use_2to3_exclude_fixers’ can be set to fixer
names to be skipped.

An example setup.py might look something like this:

     from setuptools import setup

     setup(
         name='your.module',
         version='1.0',
         description='This is your awesome module',
         author='You',
         author_email='your@email',
         package_dir={'': 'src'},
         packages=['your', 'you.module'],
         test_suite='your.module.tests',
         use_2to3=True,
         convert_2to3_doctests=['src/your/module/README.txt'],
         use_2to3_fixers=['your.fixers'],
         use_2to3_exclude_fixers=['lib2to3.fixes.fix_import'],
     )

* Menu:

* Differential conversion::


File: setuptools.info,  Node: Differential conversion,  Up: Using 2to3

8.1.1.1 Differential conversion
...............................

Note that a file will only be copied and converted during the build
process if the source file has been changed.  If you add a file to the
doctests that should be converted, it will not be converted the next
time you run the tests, since it hasn’t been modified.  You need to
remove it from the build directory.  Also if you run the build, install
or test commands before adding the use_2to3 parameter, you will have to
remove the build directory before you run the test command, as the files
otherwise will seem updated, and no conversion will happen.

In general, if code doesn’t seem to be converted, deleting the build
directory and trying again is a good safeguard against the build
directory getting “out of sync” with the source directory.


File: setuptools.info,  Node: Distributing Python 3 modules,  Next: Advanced features,  Prev: Using 2to3,  Up: Supporting both Python 2 and Python 3 with Setuptools

8.1.2 Distributing Python 3 modules
-----------------------------------

You can distribute your modules with Python 3 support in different ways.
A normal source distribution will work, but can be slow in installing,
as the 2to3 process will be run during the install.  But you can also
distribute the module in binary format, such as a binary egg.  That egg
will contain the already converted code, and hence no 2to3 conversion is
needed during install.


File: setuptools.info,  Node: Advanced features,  Prev: Distributing Python 3 modules,  Up: Supporting both Python 2 and Python 3 with Setuptools

8.1.3 Advanced features
-----------------------

If you don’t want to run the 2to3 conversion on the doctests in Python
files, you can turn that off by setting ‘setuptools.use_2to3_on_doctests
= False’.


File: setuptools.info,  Node: The Internal Structure of Python Eggs,  Next: Easy Install,  Prev: Supporting both Python 2 and Python 3 with Setuptools,  Up: Guides on backward compatibility & deprecated practice

8.2 The Internal Structure of Python Eggs
=========================================

STOP! This is not the first document you should read!

* Menu:

* Eggs and their Formats::
* Standard Metadata::
* Other Technical Considerations::


File: setuptools.info,  Node: Eggs and their Formats,  Next: Standard Metadata,  Up: The Internal Structure of Python Eggs

8.2.1 Eggs and their Formats
----------------------------

A “Python egg” is a logical structure embodying the release of a
specific version of a Python project, comprising its code, resources,
and metadata.  There are multiple formats that can be used to physically
encode a Python egg, and others can be developed.  However, a key
principle of Python eggs is that they should be discoverable and
importable.  That is, it should be possible for a Python application to
easily and efficiently find out what eggs are present on a system, and
to ensure that the desired eggs’ contents are importable.

There are two basic formats currently implemented for Python eggs:

  1. ‘.egg’ format: a directory or zipfile `containing' the project’s
     code and resources, along with an ‘EGG-INFO’ subdirectory that
     contains the project’s metadata

  2. ‘.egg-info’ format: a file or directory placed `adjacent' to the
     project’s code and resources, that directly contains the project’s
     metadata.

Both formats can include arbitrary Python code and resources, including
static data files, package and non-package directories, Python modules,
C extension modules, and so on.  But each format is optimized for
different purposes.

The ‘.egg’ format is well-suited to distribution and the easy
uninstallation or upgrades of code, since the project is essentially
self-contained within a single directory or file, unmingled with any
other projects’ code or resources.  It also makes it possible to have
multiple versions of a project simultaneously installed, such that
individual programs can select the versions they wish to use.

The ‘.egg-info’ format, on the other hand, was created to support
backward-compatibility, performance, and ease of installation for system
packaging tools that expect to install all projects’ code and resources
to a single directory (e.g.  ‘site-packages’).  Placing the metadata in
that same directory simplifies the installation process, since it isn’t
necessary to create ‘.pth’ files or otherwise modify ‘sys.path’ to
include each installed egg.

Its disadvantage, however, is that it provides no support for clean
uninstallation or upgrades, and of course only a single version of a
project can be installed to a given directory.  Thus, support from a
package management tool is required.  (This is why setuptools’ “install”
command refers to this type of egg installation as “single-version,
externally managed”.)  Also, they lack sufficient data to allow them to
be copied from their installation source.  easy_install can “ship” an
application by copying ‘.egg’ files or directories to a target location,
but it cannot do this for ‘.egg-info’ installs, because there is no way
to tell what code and resources belong to a particular egg – there may
be several eggs “scrambled” together in a single installation location,
and the ‘.egg-info’ format does not currently include a way to list the
files that were installed.  (This may change in a future version.)

* Menu:

* Code and Resources::
* Project Metadata::
* Filename-Embedded Metadata::
* Egg Links::


File: setuptools.info,  Node: Code and Resources,  Next: Project Metadata,  Up: Eggs and their Formats

8.2.1.1 Code and Resources
..........................

The layout of the code and resources is dictated by Python’s normal
import layout, relative to the egg’s “base location”.

For the ‘.egg’ format, the base location is the ‘.egg’ itself.  That is,
adding the ‘.egg’ filename or directory name to ‘sys.path’ makes its
contents importable.

For the ‘.egg-info’ format, however, the base location is the directory
that `contains' the ‘.egg-info’, and thus it is the directory that must
be added to ‘sys.path’ to make the egg importable.  (Note that this
means that the “normal” installation of a package to a ‘sys.path’
directory is sufficient to make it an “egg” if it has an ‘.egg-info’
file or directory installed alongside of it.)


File: setuptools.info,  Node: Project Metadata,  Next: Filename-Embedded Metadata,  Prev: Code and Resources,  Up: Eggs and their Formats

8.2.1.2 Project Metadata
........................

If eggs contained only code and resources, there would of course be no
difference between them and any other directory or zip file on
‘sys.path’.  Thus, metadata must also be included, using a metadata file
or directory.

For the ‘.egg’ format, the metadata is placed in an ‘EGG-INFO’
subdirectory, directly within the ‘.egg’ file or directory.  For the
‘.egg-info’ format, metadata is stored directly within the ‘.egg-info’
directory itself.

The minimum project metadata that all eggs must have is a standard
Python ‘PKG-INFO’ file, named ‘PKG-INFO’ and placed within the metadata
directory appropriate to the format.  Because it’s possible for this to
be the only metadata file included, ‘.egg-info’ format eggs are not
required to be a directory; they can just be a ‘.egg-info’ file that
directly contains the ‘PKG-INFO’ metadata.  This eliminates the need to
create a directory just to store one file.  This option is `not'
available for ‘.egg’ formats, since setuptools always includes other
metadata.  (In fact, setuptools itself never generates ‘.egg-info’
files, either; the support for using files was added so that the
requirement could easily be satisfied by other tools, such as
distutils).

In addition to the ‘PKG-INFO’ file, an egg’s metadata directory may also
include files and directories representing various forms of optional
standard metadata (see the section on *note Standard Metadata: cb,
below) or user-defined metadata required by the project.  For example,
some projects may define a metadata format to describe their application
plugins, and metadata in this format would then be included by plugin
creators in their projects’ metadata directories.


File: setuptools.info,  Node: Filename-Embedded Metadata,  Next: Egg Links,  Prev: Project Metadata,  Up: Eggs and their Formats

8.2.1.3 Filename-Embedded Metadata
..................................

To allow introspection of installed projects and runtime resolution of
inter-project dependencies, a certain amount of information is embedded
in egg filenames.  At a minimum, this includes the project name, and
ideally will also include the project version number.  Optionally, it
can also include the target Python version and required runtime platform
if platform-specific C code is included.  The syntax of an egg filename
is as follows:

     name ["-" version ["-py" pyver ["-" required_platform]]] "." ext

The “name” and “version” should be escaped using the ‘to_filename()’
function provided by ‘pkg_resources’, after first processing them with
‘safe_name()’ and ‘safe_version()’ respectively.  These latter two
functions can also be used to later “unescape” these parts of the
filename.  (For a detailed description of these transformations, please
see the “Parsing Utilities” section of the ‘pkg_resources’ manual.)

The “pyver” string is the Python major version, as found in the first 3
characters of ‘sys.version’.  “required_platform” is essentially a
distutils ‘get_platform()’ string, but with enhancements to properly
distinguish Mac OS versions.  (See the ‘get_build_platform()’
documentation in the “Platform Utilities” section of the ‘pkg_resources’
manual for more details.)

Finally, the “ext” is either ‘.egg’ or ‘.egg-info’, as appropriate for
the egg’s format.

Normally, an egg’s filename should include at least the project name and
version, as this allows the runtime system to find desired project
versions without having to read the egg’s PKG-INFO to determine its
version number.

Setuptools, however, only includes the version number in the filename
when an ‘.egg’ file is built using the ‘bdist_egg’ command, or when an
‘.egg-info’ directory is being installed by the ‘install_egg_info’
command.  When generating metadata for use with the original source
tree, it only includes the project name, so that the directory will not
have to be renamed each time the project’s version changes.

This is especially important when version numbers change frequently, and
the source metadata directory is kept under version control with the
rest of the project.  (As would be the case when the project’s source
includes project-defined metadata that is not generated from by
setuptools from data in the setup script.)


File: setuptools.info,  Node: Egg Links,  Prev: Filename-Embedded Metadata,  Up: Eggs and their Formats

8.2.1.4 Egg Links
.................

In addition to the ‘.egg’ and ‘.egg-info’ formats, there is a third
egg-related extension that you may encounter on occasion: ‘.egg-link’
files.

These files are not eggs, strictly speaking.  They simply provide a way
to reference an egg that is not physically installed in the desired
location.  They exist primarily as a cross-platform alternative to
symbolic links, to support “installing” code that is being developed in
a different location than the desired installation location.  For
example, if a user is developing an application plugin in their home
directory, but the plugin needs to be “installed” in an application
plugin directory, running “setup.py develop -md /path/to/app/plugins”
will install an ‘.egg-link’ file in ‘/path/to/app/plugins’, that tells
the egg runtime system where to find the actual egg (the user’s project
source directory and its ‘.egg-info’ subdirectory).

‘.egg-link’ files are named following the format for ‘.egg’ and
‘.egg-info’ names, but only the project name is included; no version,
Python version, or platform information is included.  When the runtime
searches for available eggs, ‘.egg-link’ files are opened and the actual
egg file/directory name is read from them.

Each ‘.egg-link’ file should contain a single file or directory name,
with no newlines.  This filename should be the base location of one or
more eggs.  That is, the name must either end in ‘.egg’, or else it
should be the parent directory of one or more ‘.egg-info’ format eggs.

As of setuptools 0.6c6, the path may be specified as a
platform-independent (i.e.  ‘/’-separated) relative path from the
directory containing the ‘.egg-link’ file, and a second line may appear
in the file, specifying a platform-independent relative path from the
egg’s base directory to its setup script directory.  This allows
installation tools such as EasyInstall to find the project’s setup
directory and build eggs or perform other setup commands on it.


File: setuptools.info,  Node: Standard Metadata,  Next: Other Technical Considerations,  Prev: Eggs and their Formats,  Up: The Internal Structure of Python Eggs

8.2.2 Standard Metadata
-----------------------

In addition to the minimum required ‘PKG-INFO’ metadata, projects can
include a variety of standard metadata files or directories, as
described below.  Except as otherwise noted, these files and directories
are automatically generated by setuptools, based on information supplied
in the setup script or through analysis of the project’s code and
resources.

Most of these files and directories are generated via “egg-info writers”
during execution of the setuptools ‘egg_info’ command, and are listed in
the ‘egg_info.writers’ entry point group defined by setuptools’ own
‘setup.py’ file.

Project authors can register their own metadata writers as entry points
in this group (as described in the setuptools manual under “Adding new
EGG-INFO Files”) to cause setuptools to generate project-specific
metadata files or directories during execution of the ‘egg_info’
command.  It is up to project authors to document these new metadata
formats, if they create any.

* Menu:

* .txt File Formats: txt File Formats.
* Dependency Metadata::
* namespace_packages.txt – Namespace Package Metadata: namespace_packages txt – Namespace Package Metadata.
* entry_points.txt – “Entry Point”/Plugin Metadata: entry_points txt – “Entry Point”/Plugin Metadata.
* The scripts Subdirectory::
* Zip Support Metadata::
* top_level.txt – Conflict Management Metadata: top_level txt – Conflict Management Metadata.
* SOURCES.txt – Source Files Manifest: SOURCES txt – Source Files Manifest.


File: setuptools.info,  Node: txt File Formats,  Next: Dependency Metadata,  Up: Standard Metadata

8.2.2.1 ‘.txt’ File Formats
...........................

Files described in this section that have ‘.txt’ extensions have a
simple lexical format consisting of a sequence of text lines, each line
terminated by a linefeed character (regardless of platform).  Leading
and trailing whitespace on each line is ignored, as are blank lines and
lines whose first nonblank character is a ‘#’ (comment symbol).  (This
is the parsing format defined by the ‘yield_lines()’ function of the
‘pkg_resources’ module.)

All ‘.txt’ files defined by this section follow this format, but some
are also “sectioned” files, meaning that their contents are divided into
sections, using square-bracketed section headers akin to Windows ‘.ini’
format.  Note that this does `not' imply that the lines within the
sections follow an ‘.ini’ format, however.  Please see an individual
metadata file’s documentation for a description of what the lines and
section names mean in that particular file.

Sectioned files can be parsed using the ‘split_sections()’ function; see
the “Parsing Utilities” section of the ‘pkg_resources’ manual for for
details.


File: setuptools.info,  Node: Dependency Metadata,  Next: namespace_packages txt – Namespace Package Metadata,  Prev: txt File Formats,  Up: Standard Metadata

8.2.2.2 Dependency Metadata
...........................

* Menu:

* requires.txt: requires txt.
* setup_requires.txt: setup_requires txt.
* dependency_links.txt: dependency_links txt.
* depends.txt – Obsolete, do not create!: depends txt – Obsolete do not create!.


File: setuptools.info,  Node: requires txt,  Next: setup_requires txt,  Up: Dependency Metadata

8.2.2.3 ‘requires.txt’
......................

This is a “sectioned” text file.  Each section is a sequence of
“requirements”, as parsed by the ‘parse_requirements()’ function; please
see the ‘pkg_resources’ manual for the complete requirement parsing
syntax.

The first, unnamed section (i.e., before the first section header) in
this file is the project’s core requirements, which must be installed
for the project to function.  (Specified using the ‘install_requires’
keyword to ‘setup()’).

The remaining (named) sections describe the project’s “extra”
requirements, as specified using the ‘extras_require’ keyword to
‘setup()’.  The section name is the name of the optional feature, and
the section body lists that feature’s dependencies.

Note that it is not normally necessary to inspect this file directly;
‘pkg_resources.Distribution’ objects have a ‘requires()’ method that can
be used to obtain ‘Requirement’ objects describing the project’s core
and optional dependencies.


File: setuptools.info,  Node: setup_requires txt,  Next: dependency_links txt,  Prev: requires txt,  Up: Dependency Metadata

8.2.2.4 ‘setup_requires.txt’
............................

Much like ‘requires.txt’ except represents the requirements specified by
the ‘setup_requires’ parameter to the Distribution.


File: setuptools.info,  Node: dependency_links txt,  Next: depends txt – Obsolete do not create!,  Prev: setup_requires txt,  Up: Dependency Metadata

8.2.2.5 ‘dependency_links.txt’
..............................

A list of dependency URLs, one per line, as specified using the
‘dependency_links’ keyword to ‘setup()’.  These may be direct download
URLs, or the URLs of web pages containing direct download links.  Please
see the setuptools manual for more information on specifying this
option.


File: setuptools.info,  Node: depends txt – Obsolete do not create!,  Prev: dependency_links txt,  Up: Dependency Metadata

8.2.2.6 ‘depends.txt’ – Obsolete, do not create!
................................................

This file follows an identical format to ‘requires.txt’, but is obsolete
and should not be used.  The earliest versions of setuptools required
users to manually create and maintain this file, so the runtime still
supports reading it, if it exists.  The new filename was created so that
it could be automatically generated from ‘setup()’ information without
overwriting an existing hand-created ‘depends.txt’, if one was already
present in the project’s source ‘.egg-info’ directory.


File: setuptools.info,  Node: namespace_packages txt – Namespace Package Metadata,  Next: entry_points txt – “Entry Point”/Plugin Metadata,  Prev: Dependency Metadata,  Up: Standard Metadata

8.2.2.7 ‘namespace_packages.txt’ – Namespace Package Metadata
.............................................................

A list of namespace package names, one per line, as supplied to the
‘namespace_packages’ keyword to ‘setup()’.  Please see the manuals for
setuptools and ‘pkg_resources’ for more information about namespace
packages.


File: setuptools.info,  Node: entry_points txt – “Entry Point”/Plugin Metadata,  Next: The scripts Subdirectory,  Prev: namespace_packages txt – Namespace Package Metadata,  Up: Standard Metadata

8.2.2.8 ‘entry_points.txt’ – “Entry Point”/Plugin Metadata
..........................................................

This is a “sectioned” text file, whose contents encode the
‘entry_points’ keyword supplied to ‘setup()’.  All sections are named,
as the section names specify the entry point groups in which the
corresponding section’s entry points are registered.

Each section is a sequence of “entry point” lines, each parseable using
the ‘EntryPoint.parse’ classmethod; please see the ‘pkg_resources’
manual for the complete entry point parsing syntax.

Note that it is not necessary to parse this file directly; the
‘pkg_resources’ module provides a variety of APIs to locate and load
entry points automatically.  Please see the setuptools and
‘pkg_resources’ manuals for details on the nature and uses of entry
points.


File: setuptools.info,  Node: The scripts Subdirectory,  Next: Zip Support Metadata,  Prev: entry_points txt – “Entry Point”/Plugin Metadata,  Up: Standard Metadata

8.2.2.9 The ‘scripts’ Subdirectory
..................................

This directory is currently only created for ‘.egg’ files built by the
setuptools ‘bdist_egg’ command.  It will contain copies of all of the
project’s “traditional” scripts (i.e., those specified using the
‘scripts’ keyword to ‘setup()’).  This is so that they can be
reconstituted when an ‘.egg’ file is installed.

The scripts are placed here using the distutils’ standard
‘install_scripts’ command, so any ‘#!’ lines reflect the Python
installation where the egg was built.  But instead of copying the
scripts to the local script installation directory, EasyInstall writes
short wrapper scripts that invoke the original scripts from inside the
egg, after ensuring that sys.path includes the egg and any eggs it
depends on.  For more about *note script wrappers: d7, see the section
below on *note Installation and Path Management Issues: d8.


File: setuptools.info,  Node: Zip Support Metadata,  Next: top_level txt – Conflict Management Metadata,  Prev: The scripts Subdirectory,  Up: Standard Metadata

8.2.2.10 Zip Support Metadata
.............................

* Menu:

* native_libs.txt: native_libs txt.
* eager_resources.txt: eager_resources txt.
* zip-safe and not-zip-safe::


File: setuptools.info,  Node: native_libs txt,  Next: eager_resources txt,  Up: Zip Support Metadata

8.2.2.11 ‘native_libs.txt’
..........................

A list of C extensions and other dynamic link libraries contained in the
egg, one per line.  Paths are ‘/’-separated and relative to the egg’s
base location.

This file is generated as part of ‘bdist_egg’ processing, and as such
only appears in ‘.egg’ files (and ‘.egg’ directories created by
unpacking them).  It is used to ensure that all libraries are extracted
from a zipped egg at the same time, in case there is any direct linkage
between them.  Please see the *note Zip File Issues: db. section below
for more information on library and resource extraction from ‘.egg’
files.


File: setuptools.info,  Node: eager_resources txt,  Next: zip-safe and not-zip-safe,  Prev: native_libs txt,  Up: Zip Support Metadata

8.2.2.12 ‘eager_resources.txt’
..............................

A list of resource files and/or directories, one per line, as specified
via the ‘eager_resources’ keyword to ‘setup()’.  Paths are ‘/’-separated
and relative to the egg’s base location.

Resource files or directories listed here will be extracted
simultaneously, if any of the named resources are extracted, or if any
native libraries listed in ‘native_libs.txt’ are extracted.  Please see
the setuptools manual for details on what this feature is used for and
how it works, as well as the *note Zip File Issues: db. section below.


File: setuptools.info,  Node: zip-safe and not-zip-safe,  Prev: eager_resources txt,  Up: Zip Support Metadata

8.2.2.13 ‘zip-safe’ and ‘not-zip-safe’
......................................

These are zero-length files, and either one or the other should exist.
If ‘zip-safe’ exists, it means that the project will work properly when
installed as an ‘.egg’ zipfile, and conversely the existence of
‘not-zip-safe’ means the project should not be installed as an ‘.egg’
file.  The ‘zip_safe’ option to setuptools’ ‘setup()’ determines which
file will be written.  If the option isn’t provided, setuptools attempts
to make its own assessment of whether the package can work, based on
code and content analysis.

If neither file is present at installation time, EasyInstall defaults to
assuming that the project should be unzipped.  (Command-line options to
EasyInstall, however, take precedence even over an existing ‘zip-safe’
or ‘not-zip-safe’ file.)

Note that these flag files appear only in ‘.egg’ files generated by
‘bdist_egg’, and in ‘.egg’ directories created by unpacking such an
‘.egg’ file.


File: setuptools.info,  Node: top_level txt – Conflict Management Metadata,  Next: SOURCES txt – Source Files Manifest,  Prev: Zip Support Metadata,  Up: Standard Metadata

8.2.2.14 ‘top_level.txt’ – Conflict Management Metadata
.......................................................

This file is a list of the top-level module or package names provided by
the project, one Python identifier per line.

Subpackages are not included; a project containing both a ‘foo.bar’ and
a ‘foo.baz’ would include only one line, ‘foo’, in its ‘top_level.txt’.

This data is used by ‘pkg_resources’ at runtime to issue a warning if an
egg is added to ‘sys.path’ when its contained packages may have already
been imported.

(It was also once used to detect conflicts with non-egg packages at
installation time, but in more recent versions, setuptools installs eggs
in such a way that they always override non-egg packages, thus
preventing a problem from arising.)


File: setuptools.info,  Node: SOURCES txt – Source Files Manifest,  Prev: top_level txt – Conflict Management Metadata,  Up: Standard Metadata

8.2.2.15 ‘SOURCES.txt’ – Source Files Manifest
..............................................

This file is roughly equivalent to the distutils’ ‘MANIFEST’ file.  The
differences are as follows:

   * The filenames always use ‘/’ as a path separator, which must be
     converted back to a platform-specific path whenever they are read.

   * The file is automatically generated by setuptools whenever the
     ‘egg_info’ or ‘sdist’ commands are run, and it is `not'
     user-editable.

Although this metadata is included with distributed eggs, it is not
actually used at runtime for any purpose.  Its function is to ensure
that setuptools-built `source' distributions can correctly discover what
files are part of the project’s source, even if the list had been
generated using revision control metadata on the original author’s
system.

In other words, ‘SOURCES.txt’ has little or no runtime value for being
included in distributed eggs, and it is possible that future versions of
the ‘bdist_egg’ and ‘install_egg_info’ commands will strip it before
installation or distribution.  Therefore, do not rely on its being
available outside of an original source directory or source
distribution.


File: setuptools.info,  Node: Other Technical Considerations,  Prev: Standard Metadata,  Up: The Internal Structure of Python Eggs

8.2.3 Other Technical Considerations
------------------------------------

* Menu:

* Zip File Issues::
* Installation and Path Management Issues::


File: setuptools.info,  Node: Zip File Issues,  Next: Installation and Path Management Issues,  Up: Other Technical Considerations

8.2.3.1 Zip File Issues
.......................

Although zip files resemble directories, they are not fully
substitutable for them.  Most platforms do not support loading dynamic
link libraries contained in zipfiles, so it is not possible to directly
import C extensions from ‘.egg’ zipfiles.  Similarly, there are many
existing libraries – whether in Python or C – that require actual
operating system filenames, and do not work with arbitrary “file-like”
objects or in-memory strings, and thus cannot operate directly on the
contents of zip files.

To address these issues, the ‘pkg_resources’ module provides a “resource
API” to support obtaining either the contents of a resource, or a true
operating system filename for the resource.  If the egg containing the
resource is a directory, the resource’s real filename is simply
returned.  However, if the egg is a zipfile, then the resource is first
extracted to a cache directory, and the filename within the cache is
returned.

The cache directory is determined by the ‘pkg_resources’ API; please see
the ‘set_cache_path()’ and ‘get_default_cache()’ documentation for
details.

* Menu:

* The Extraction Process::
* Extension Import Wrappers::


File: setuptools.info,  Node: The Extraction Process,  Next: Extension Import Wrappers,  Up: Zip File Issues

8.2.3.2 The Extraction Process
..............................

Resources are extracted to a cache subdirectory whose name is based on
the enclosing ‘.egg’ filename and the path to the resource.  If there is
already a file of the correct name, size, and timestamp, its filename is
returned to the requester.  Otherwise, the desired file is extracted
first to a temporary name generated using
‘mkstemp(".$extract",target_dir)’, and then its timestamp is set to
match the one in the zip file, before renaming it to its final name.
(Some collision detection and resolution code is used to handle the fact
that Windows doesn’t overwrite files when renaming.)

If a resource directory is requested, all of its contents are
recursively extracted in this fashion, to ensure that the directory name
can be used as if it were valid all along.

If the resource requested for extraction is listed in the
‘native_libs.txt’ or ‘eager_resources.txt’ metadata files, then `all'
resources listed in `either' file will be extracted before the requested
resource’s filename is returned, thus ensuring that all C extensions and
data used by them will be simultaneously available.


File: setuptools.info,  Node: Extension Import Wrappers,  Prev: The Extraction Process,  Up: Zip File Issues

8.2.3.3 Extension Import Wrappers
.................................

Since Python’s built-in zip import feature does not support loading C
extension modules from zipfiles, the setuptools ‘bdist_egg’ command
generates special import wrappers to make it work.

The wrappers are ‘.py’ files (along with corresponding ‘.pyc’ and/or
‘.pyo’ files) that have the same module name as the corresponding C
extension.  These wrappers are located in the same package directory (or
top-level directory) within the zipfile, so that say, ‘foomodule.so’
will get a corresponding ‘foo.py’, while ‘bar/baz.pyd’ will get a
corresponding ‘bar/baz.py’.

These wrapper files contain a short stanza of Python code that asks
‘pkg_resources’ for the filename of the corresponding C extension, then
reloads the module using the obtained filename.  This will cause
‘pkg_resources’ to first ensure that all of the egg’s C extensions (and
any accompanying “eager resources”) are extracted to the cache before
attempting to link to the C library.

Note, by the way, that ‘.egg’ directories will also contain these
wrapper files.  However, Python’s default import priority is such that C
extensions take precedence over same-named Python modules, so the import
wrappers are ignored unless the egg is a zipfile.


File: setuptools.info,  Node: Installation and Path Management Issues,  Prev: Zip File Issues,  Up: Other Technical Considerations

8.2.3.4 Installation and Path Management Issues
...............................................

Python’s initial setup of ‘sys.path’ is very dependent on the Python
version and installation platform, as well as how Python was started
(i.e., script vs.  ‘-c’ vs.  ‘-m’ vs.  interactive interpreter).  In
fact, Python also provides only two relatively robust ways to affect
‘sys.path’ outside of direct manipulation in code: the ‘PYTHONPATH’
environment variable, and ‘.pth’ files.

However, with no cross-platform way to safely and persistently change
environment variables, this leaves ‘.pth’ files as EasyInstall’s only
real option for persistent configuration of ‘sys.path’.

But ‘.pth’ files are rather strictly limited in what they are allowed to
do normally.  They add directories only to the `end' of ‘sys.path’,
after any locally-installed ‘site-packages’ directory, and they are only
processed `in' the ‘site-packages’ directory to start with.

This is a double whammy for users who lack write access to that
directory, because they can’t create a ‘.pth’ file that Python will
read, and even if a sympathetic system administrator adds one for them
that calls ‘site.addsitedir()’ to allow some other directory to contain
‘.pth’ files, they won’t be able to install newer versions of anything
that’s installed in the systemwide ‘site-packages’, because their paths
will still be added `after' ‘site-packages’.

So EasyInstall applies two workarounds to solve these problems.

The first is that EasyInstall leverages ‘.pth’ files’ “import” feature
to manipulate ‘sys.path’ and ensure that anything EasyInstall adds to a
‘.pth’ file will always appear before both the standard library and the
local ‘site-packages’ directories.  Thus, it is always possible for a
user who can write a Python-read ‘.pth’ file to ensure that their
packages come first in their own environment.

Second, when installing to a ‘PYTHONPATH’ directory (as opposed to a
“site” directory like ‘site-packages’) EasyInstall will also install a
special version of the ‘site’ module.  Because it’s in a ‘PYTHONPATH’
directory, this module will get control before the standard library
version of ‘site’ does.  It will record the state of ‘sys.path’ before
invoking the “real” ‘site’ module, and then afterwards it processes any
‘.pth’ files found in ‘PYTHONPATH’ directories, including all the fixups
needed to ensure that eggs always appear before the standard library in
sys.path, but are in a relative order to one another that is defined by
their ‘PYTHONPATH’ and ‘.pth’-prescribed sequence.

The net result of these changes is that ‘sys.path’ order will be as
follows at runtime:

  1. The ‘sys.argv[0]’ directory, or an empty string if no script is
     being executed.

  2. All eggs installed by EasyInstall in any ‘.pth’ file in each
     ‘PYTHONPATH’ directory, in order first by ‘PYTHONPATH’ order, then
     normal ‘.pth’ processing order (which is to say alphabetical by
     ‘.pth’ filename, then by the order of listing within each ‘.pth’
     file).

  3. All eggs installed by EasyInstall in any ‘.pth’ file in each “site”
     directory (such as ‘site-packages’), following the same ordering
     rules as for the ones on ‘PYTHONPATH’.

  4. The ‘PYTHONPATH’ directories themselves, in their original order

  5. Any paths from ‘.pth’ files found on ‘PYTHONPATH’ that were `not'
     eggs installed by EasyInstall, again following the same relative
     ordering rules.

  6. The standard library and “site” directories, along with the
     contents of any ‘.pth’ files found in the “site” directories.

Notice that sections 1, 4, and 6 comprise the “normal” Python setup for
‘sys.path’.  Sections 2 and 3 are inserted to support eggs, and section
5 emulates what the “normal” semantics of ‘.pth’ files on ‘PYTHONPATH’
would be if Python natively supported them.

For further discussion of the tradeoffs that went into this design, as
well as notes on the actual magic inserted into ‘.pth’ files to make
them do these things, please see also the following messages to the
distutils-SIG mailing list:

   * 
     ‘http://mail.python.org/pipermail/distutils-sig/2006-February/006026.html’

   * 
     ‘http://mail.python.org/pipermail/distutils-sig/2006-March/006123.html’

* Menu:

* Script Wrappers::


File: setuptools.info,  Node: Script Wrappers,  Up: Installation and Path Management Issues

8.2.3.5 Script Wrappers
.......................

EasyInstall never directly installs a project’s original scripts to a
script installation directory.  Instead, it writes short wrapper scripts
that first ensure that the project’s dependencies are active on
sys.path, before invoking the original script.  These wrappers have a #!
line that points to the version of Python that was used to install them,
and their second line is always a comment that indicates the type of
script wrapper, the project version required for the script to run, and
information identifying the script to be invoked.

The format of this marker line is:

     "# EASY-INSTALL-" script_type ": " tuple_of_strings "\n"

The ‘script_type’ is one of ‘SCRIPT’, ‘DEV-SCRIPT’, or ‘ENTRY-SCRIPT’.
The ‘tuple_of_strings’ is a comma-separated sequence of Python string
constants.  For ‘SCRIPT’ and ‘DEV-SCRIPT’ wrappers, there are two
strings: the project version requirement, and the script name (as a
filename within the ‘scripts’ metadata directory).  For ‘ENTRY-SCRIPT’
wrappers, there are three: the project version requirement, the entry
point group name, and the entry point name.  (See the “Automatic Script
Creation” section in the setuptools manual for more information about
entry point scripts.)

In each case, the project version requirement string will be a string
parseable with the ‘pkg_resources’ modules’ ‘Requirement.parse()’
classmethod.  The only difference between a ‘SCRIPT’ wrapper and a
‘DEV-SCRIPT’ is that a ‘DEV-SCRIPT’ actually executes the original
source script in the project’s source tree, and is created when the
“setup.py develop” command is run.  A ‘SCRIPT’ wrapper, on the other
hand, uses the “installed” script written to the ‘EGG-INFO/scripts’
subdirectory of the corresponding ‘.egg’ zipfile or directory.
(‘.egg-info’ eggs do not have script wrappers associated with them,
except in the “setup.py develop” case.)

The purpose of including the marker line in generated script wrappers is
to facilitate introspection of installed scripts, and their relationship
to installed eggs.  For example, an uninstallation tool could use this
data to identify what scripts can safely be removed, and/or identify
what scripts would stop working if a particular egg is uninstalled.


File: setuptools.info,  Node: Easy Install,  Next: Porting from Distutils,  Prev: The Internal Structure of Python Eggs,  Up: Guides on backward compatibility & deprecated practice

8.3 Easy Install
================

     Warning: Easy Install is deprecated.  Do not use it.  Instead use
     pip.  If you think you need Easy Install, please reach out to the
     PyPA team (a ticket to pip or setuptools is fine), describing your
     use-case.

Easy Install is a python module (‘easy_install’) bundled with
‘setuptools’ that lets you automatically download, build, install, and
manage Python packages.

Please share your experiences with us!  If you encounter difficulty
installing a package, please contact us via the distutils mailing
list(1).  (Note: please DO NOT send private email directly to the author
of setuptools; it will be discarded.  The mailing list is a searchable
archive of previously-asked and answered questions; you should begin
your research there before reporting something as a bug – and then do so
via list discussion first.)

(Also, if you’d like to learn about how you can use ‘setuptools’ to make
your own packages work better with EasyInstall, or provide
EasyInstall-like features without requiring your users to use
EasyInstall directly, you’ll probably want to check out the full
documentation as well.)

* Menu:

* Using “Easy Install”::
* Reference Manual::

   ---------- Footnotes ----------

   (1) http://mail.python.org/pipermail/distutils-sig/


File: setuptools.info,  Node: Using “Easy Install”,  Next: Reference Manual,  Up: Easy Install

8.3.1 Using “Easy Install”
--------------------------

* Menu:

* Installing “Easy Install”::
* Downloading and Installing a Package::
* Upgrading a Package::
* Changing the Active Version::
* Uninstalling Packages::
* Managing Scripts::
* Executables and Launchers::
* Tips & Techniques::
* Password-Protected Sites::
* Using .pypirc Credentials: Using pypirc Credentials.


File: setuptools.info,  Node: Installing “Easy Install”,  Next: Downloading and Installing a Package,  Up: Using “Easy Install”

8.3.1.1 Installing “Easy Install”
.................................

Please see the setuptools PyPI page(1) for download links and basic
installation instructions for each of the supported platforms.

You will need at least Python 3.5 or 2.7.  An ‘easy_install’ script will
be installed in the normal location for Python scripts on your platform.

Note that the instructions on the setuptools PyPI page assume that you
are are installing to Python’s primary ‘site-packages’ directory.  If
this is not the case, you should consult the section below on *note
Custom Installation Locations: e8. before installing.  (And, on Windows,
you should not use the ‘.exe’ installer when installing to an alternate
location.)

Note that ‘easy_install’ normally works by downloading files from the
internet.  If you are behind an NTLM-based firewall that prevents Python
programs from accessing the net directly, you may wish to first install
and use the APS proxy server(2), which lets you get past such firewalls
in the same way that your web browser(s) do.

(Alternately, if you do not wish easy_install to actually download
anything, you can restrict it from doing so with the ‘--allow-hosts’
option; see the sections on *note restricting downloads with
–allow-hosts: e9. and *note command-line options: ea. for more details.)

* Menu:

* Troubleshooting::
* Windows Notes::

   ---------- Footnotes ----------

   (1) https://pypi.org/project/setuptools/

   (2) http://ntlmaps.sf.net/


File: setuptools.info,  Node: Troubleshooting,  Next: Windows Notes,  Up: Installing “Easy Install”

8.3.1.2 Troubleshooting
.......................

If EasyInstall/setuptools appears to install correctly, and you can run
the ‘easy_install’ command but it fails with an ‘ImportError’, the most
likely cause is that you installed to a location other than
‘site-packages’, without taking any of the steps described in the *note
Custom Installation Locations: e8. section below.  Please see that
section and follow the steps to make sure that your custom location will
work correctly.  Then re-install.

Similarly, if you can run ‘easy_install’, and it appears to be
installing packages, but then you can’t import them, the most likely
issue is that you installed EasyInstall correctly but are using it to
install packages to a non-standard location that hasn’t been properly
prepared.  Again, see the section on *note Custom Installation
Locations: e8. for more details.


File: setuptools.info,  Node: Windows Notes,  Prev: Troubleshooting,  Up: Installing “Easy Install”

8.3.1.3 Windows Notes
.....................

Installing setuptools will provide an ‘easy_install’ command according
to the techniques described in *note Executables and Launchers: ed.  If
the ‘easy_install’ command is not available after installation, that
section provides details on how to configure Windows to make the
commands available.


File: setuptools.info,  Node: Downloading and Installing a Package,  Next: Upgrading a Package,  Prev: Installing “Easy Install”,  Up: Using “Easy Install”

8.3.1.4 Downloading and Installing a Package
............................................

For basic use of ‘easy_install’, you need only supply the filename or
URL of a source distribution or .egg file (Python Egg(1)).

`Example 1'.  Install a package by name, searching PyPI for the latest
version, and automatically downloading, building, and installing it:

     easy_install SQLObject

`Example 2'.  Install or upgrade a package by name and version by
finding links on a given “download page”:

     easy_install -f http://pythonpaste.org/package_index.html SQLObject

`Example 3'.  Download a source distribution from a specified URL,
automatically building and installing it:

     easy_install http://example.com/path/to/MyPackage-1.2.3.tgz

`Example 4'.  Install an already-downloaded .egg file:

     easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg

`Example 5'.  Upgrade an already-installed package to the latest version
listed on PyPI:

     easy_install --upgrade PyProtocols

`Example 6'.  Install a source distribution that’s already downloaded
and extracted in the current directory (New in 0.5a9):

     easy_install .

`Example 7'.  (New in 0.6a1) Find a source distribution or Subversion
checkout URL for a package, and extract it or check it out to
‘~/projects/sqlobject’ (the name will always be in all-lowercase), where
it can be examined or edited.  (The package will not be installed, but
it can easily be installed with ‘easy_install ~/projects/sqlobject’.
See *note Editing and Viewing Source Packages: ef. below for more
info.):

     easy_install --editable --build-directory ~/projects SQLObject

`Example 7'.  (New in 0.6.11) Install a distribution within your home
dir:

     easy_install --user SQLAlchemy

Easy Install accepts URLs, filenames, PyPI package names (i.e.,
‘distutils’ “distribution” names), and package+version specifiers.  In
each case, it will attempt to locate the latest available version that
meets your criteria.

When downloading or processing downloaded files, Easy Install recognizes
distutils source distribution files with extensions of .tgz, .tar,
.tar.gz, .tar.bz2, or .zip.  And of course it handles already-built .egg
distributions as well as ‘.win32.exe’ installers built using distutils.

By default, packages are installed to the running Python installation’s
‘site-packages’ directory, unless you provide the ‘-d’ or
‘--install-dir’ option to specify an alternative directory, or specify
an alternate location using distutils configuration files.  (See *note
Configuration Files: f0, below.)

By default, any scripts included with the package are installed to the
running Python installation’s standard script installation location.
However, if you specify an installation directory via the command line
or a config file, then the default directory for installing scripts will
be the same as the package installation directory, to ensure that the
script will have access to the installed package.  You can override this
using the ‘-s’ or ‘--script-dir’ option.

Installed packages are added to an ‘easy-install.pth’ file in the
install directory, so that Python will always use the
most-recently-installed version of the package.  If you would like to be
able to select which version to use at runtime, you should use the ‘-m’
or ‘--multi-version’ option.

   ---------- Footnotes ----------

   (1) http://peak.telecommunity.com/DevCenter/PythonEggs


File: setuptools.info,  Node: Upgrading a Package,  Next: Changing the Active Version,  Prev: Downloading and Installing a Package,  Up: Using “Easy Install”

8.3.1.5 Upgrading a Package
...........................

You don’t need to do anything special to upgrade a package: just install
the new version, either by requesting a specific version, e.g.:

     easy_install "SomePackage==2.0"

a version greater than the one you have now:

     easy_install "SomePackage>2.0"

using the upgrade flag, to find the latest available version on PyPI:

     easy_install --upgrade SomePackage

or by using a download page, direct download URL, or package filename:

     easy_install -f http://example.com/downloads ExamplePackage

     easy_install http://example.com/downloads/ExamplePackage-2.0-py2.4.egg

     easy_install my_downloads/ExamplePackage-2.0.tgz

If you’re using ‘-m’ or ‘--multi-version’ , using the ‘require()’
function at runtime automatically selects the newest installed version
of a package that meets your version criteria.  So, installing a newer
version is the only step needed to upgrade such packages.

If you’re installing to a directory on PYTHONPATH, or a configured
“site” directory (and not using ‘-m’), installing a package
automatically replaces any previous version in the ‘easy-install.pth’
file, so that Python will import the most-recently installed version by
default.  So, again, installing the newer version is the only upgrade
step needed.

If you haven’t suppressed script installation (using ‘--exclude-scripts’
or ‘-x’), then the upgraded version’s scripts will be installed, and
they will be automatically patched to ‘require()’ the corresponding
version of the package, so that you can use them even if they are
installed in multi-version mode.

‘easy_install’ never actually deletes packages (unless you’re installing
a package with the same name and version number as an existing package),
so if you want to get rid of older versions of a package, please see
*note Uninstalling Packages: f2, below.


File: setuptools.info,  Node: Changing the Active Version,  Next: Uninstalling Packages,  Prev: Upgrading a Package,  Up: Using “Easy Install”

8.3.1.6 Changing the Active Version
...................................

If you’ve upgraded a package, but need to revert to a
previously-installed version, you can do so like this:

     easy_install PackageName==1.2.3

Where ‘1.2.3’ is replaced by the exact version number you wish to switch
to.  If a package matching the requested name and version is not already
installed in a directory on ‘sys.path’, it will be located via PyPI and
installed.

If you’d like to switch to the latest installed version of
‘PackageName’, you can do so like this:

     easy_install PackageName

This will activate the latest installed version.  (Note: if you have set
any ‘find_links’ via distutils configuration files, those download pages
will be checked for the latest available version of the package, and it
will be downloaded and installed if it is newer than your current
version.)

Note that changing the active version of a package will install the
newly active version’s scripts, unless the ‘--exclude-scripts’ or ‘-x’
option is specified.


File: setuptools.info,  Node: Uninstalling Packages,  Next: Managing Scripts,  Prev: Changing the Active Version,  Up: Using “Easy Install”

8.3.1.7 Uninstalling Packages
.............................

If you have replaced a package with another version, then you can just
delete the package(s) you don’t need by deleting the
PackageName-versioninfo.egg file or directory (found in the installation
directory).

If you want to delete the currently installed version of a package (or
all versions of a package), you should first run:

     easy_install -m PackageName

This will ensure that Python doesn’t continue to search for a package
you’re planning to remove.  After you’ve done this, you can safely
delete the .egg files or directories, along with any scripts you wish to
remove.


File: setuptools.info,  Node: Managing Scripts,  Next: Executables and Launchers,  Prev: Uninstalling Packages,  Up: Using “Easy Install”

8.3.1.8 Managing Scripts
........................

Whenever you install, upgrade, or change versions of a package,
EasyInstall automatically installs the scripts for the selected package
version, unless you tell it not to with ‘-x’ or ‘--exclude-scripts’.  If
any scripts in the script directory have the same name, they are
overwritten.

Thus, you do not normally need to manually delete scripts for older
versions of a package, unless the newer version of the package does not
include a script of the same name.  However, if you are completely
uninstalling a package, you may wish to manually delete its scripts.

EasyInstall’s default behavior means that you can normally only run
scripts from one version of a package at a time.  If you want to keep
multiple versions of a script available, however, you can simply use the
‘--multi-version’ or ‘-m’ option, and rename the scripts that
EasyInstall creates.  This works because EasyInstall installs scripts as
short code stubs that ‘require()’ the matching version of the package
the script came from, so renaming the script has no effect on what it
executes.

For example, suppose you want to use two versions of the ‘rst2html’ tool
provided by the docutils(1) package.  You might first install one
version:

     easy_install -m docutils==0.3.9

then rename the ‘rst2html.py’ to ‘r2h_039’, and install another version:

     easy_install -m docutils==0.3.10

This will create another ‘rst2html.py’ script, this one using docutils
version 0.3.10 instead of 0.3.9.  You now have two scripts, each using a
different version of the package.  (Notice that we used ‘-m’ for both
installations, so that Python won’t lock us out of using anything but
the most recently-installed version of the package.)

   ---------- Footnotes ----------

   (1) http://docutils.sf.net/


File: setuptools.info,  Node: Executables and Launchers,  Next: Tips & Techniques,  Prev: Managing Scripts,  Up: Using “Easy Install”

8.3.1.9 Executables and Launchers
.................................

On Unix systems, scripts are installed with as natural files with a “#!”
header and no extension and they launch under the Python version
indicated in the header.

On Windows, there is no mechanism to “execute” files without extensions,
so EasyInstall provides two techniques to mirror the Unix behavior.  The
behavior is indicated by the SETUPTOOLS_LAUNCHER environment variable,
which may be “executable” (default) or “natural”.

Regardless of the technique used, the script(s) will be installed to a
Scripts directory (by default in the Python installation directory).  It
is recommended for EasyInstall that you ensure this directory is in the
PATH environment variable.  The easiest way to ensure the Scripts
directory is in the PATH is to run ‘Tools\Scripts\win_add2path.py’ from
the Python directory.

Note that instead of changing your ‘PATH’ to include the Python scripts
directory, you can also retarget the installation location for scripts
so they go on a directory that’s already on the ‘PATH’.  For more
information see *note Command-Line Options: ea. and *note Configuration
Files: f0.  During installation, pass command line options (such as
‘--script-dir’) to control where scripts will be installed.

* Menu:

* Windows Executable Launcher::
* Natural Script Launcher::


File: setuptools.info,  Node: Windows Executable Launcher,  Next: Natural Script Launcher,  Up: Executables and Launchers

8.3.1.10 Windows Executable Launcher
....................................

If the “executable” launcher is used, EasyInstall will create a ‘.exe’
launcher of the same name beside each installed script (including
‘easy_install’ itself).  These small .exe files launch the script of the
same name using the Python version indicated in the ‘#!’ header.

This behavior is currently default.  To force the use of executable
launchers, set ‘SETUPTOOLS_LAUNCHER’ to “executable”.


File: setuptools.info,  Node: Natural Script Launcher,  Prev: Windows Executable Launcher,  Up: Executables and Launchers

8.3.1.11 Natural Script Launcher
................................

EasyInstall also supports deferring to an external launcher such as
pylauncher(1) for launching scripts.  Enable this experimental
functionality by setting the ‘SETUPTOOLS_LAUNCHER’ environment variable
to “natural”.  EasyInstall will then install scripts as simple scripts
with a .pya (or .pyw) extension appended.  If these extensions are
associated with the pylauncher and listed in the PATHEXT environment
variable, these scripts can then be invoked simply and directly just
like any other executable.  This behavior may become default in a future
version.

EasyInstall uses the .pya extension instead of simply the typical ‘.py’
extension.  This distinct extension is necessary to prevent Python from
treating the scripts as importable modules (where name conflicts exist).
Current releases of pylauncher do not yet associate with .pya files by
default, but future versions should do so.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/pylauncher


File: setuptools.info,  Node: Tips & Techniques,  Next: Password-Protected Sites,  Prev: Executables and Launchers,  Up: Using “Easy Install”

8.3.1.12 Tips & Techniques
..........................

* Menu:

* Multiple Python Versions::
* Restricting Downloads with --allow-hosts::
* Installing on Un-networked Machines::
* Packaging Others’ Projects As Eggs::
* Creating your own Package Index::


File: setuptools.info,  Node: Multiple Python Versions,  Next: Restricting Downloads with --allow-hosts,  Up: Tips & Techniques

8.3.1.13 Multiple Python Versions
.................................

EasyInstall installs itself under two names: ‘easy_install’ and
‘easy_install-N.N’, where ‘N.N’ is the Python version used to install
it.  Thus, if you install EasyInstall for both Python 3.2 and 2.7, you
can use the ‘easy_install-3.2’ or ‘easy_install-2.7’ scripts to install
packages for the respective Python version.

Setuptools also supplies easy_install as a runnable module which may be
invoked using ‘python -m easy_install’ for any Python with Setuptools
installed.


File: setuptools.info,  Node: Restricting Downloads with --allow-hosts,  Next: Installing on Un-networked Machines,  Prev: Multiple Python Versions,  Up: Tips & Techniques

8.3.1.14 Restricting Downloads with ‘--allow-hosts’
...................................................

You can use the ‘--allow-hosts’ (‘-H’) option to restrict what domains
EasyInstall will look for links and downloads on.  ‘--allow-hosts=None’
prevents downloading altogether.  You can also use wildcards, for
example to restrict downloading to hosts in your own intranet.  See the
section below on *note Command-Line Options: ea. for more details on the
‘--allow-hosts’ option.

By default, there are no host restrictions in effect, but you can change
this default by editing the appropriate *note configuration files: f0.
and adding:

     [easy_install]
     allow_hosts = *.myintranet.example.com,*.python.org

The above example would then allow downloads only from hosts in the
‘python.org’ and ‘myintranet.example.com’ domains, unless overridden on
the command line.


File: setuptools.info,  Node: Installing on Un-networked Machines,  Next: Packaging Others’ Projects As Eggs,  Prev: Restricting Downloads with --allow-hosts,  Up: Tips & Techniques

8.3.1.15 Installing on Un-networked Machines
............................................

Just copy the eggs or source packages you need to a directory on the
target machine, then use the ‘-f’ or ‘--find-links’ option to specify
that directory’s location.  For example:

     easy_install -H None -f somedir SomePackage

will attempt to install SomePackage using only eggs and source packages
found in ‘somedir’ and disallowing all remote access.  You should of
course make sure you have all of SomePackage’s dependencies available in
somedir.

If you have another machine of the same operating system and library
versions (or if the packages aren’t platform-specific), you can create
the directory of eggs using a command like this:

     easy_install -zmaxd somedir SomePackage

This will tell EasyInstall to put zipped eggs or source packages for
SomePackage and all its dependencies into ‘somedir’, without creating
any scripts or .pth files.  You can then copy the contents of ‘somedir’
to the target machine.  (‘-z’ means zipped eggs, ‘-m’ means
multi-version, which prevents .pth files from being used, ‘-a’ means to
copy all the eggs needed, even if they’re installed elsewhere on the
machine, and ‘-d’ indicates the directory to place the eggs in.)

You can also build the eggs from local development packages that were
installed with the ‘setup.py develop’ command, by including the ‘-l’
option, e.g.:

     easy_install -zmaxld somedir SomePackage

This will use locally-available source distributions to build the eggs.


File: setuptools.info,  Node: Packaging Others’ Projects As Eggs,  Next: Creating your own Package Index,  Prev: Installing on Un-networked Machines,  Up: Tips & Techniques

8.3.1.16 Packaging Others’ Projects As Eggs
...........................................

Need to distribute a package that isn’t published in egg form?  You can
use EasyInstall to build eggs for a project.  You’ll want to use the
‘--zip-ok’, ‘--exclude-scripts’, and possibly ‘--no-deps’ options (‘-z’,
‘-x’ and ‘-N’, respectively).  Use ‘-d’ or ‘--install-dir’ to specify
the location where you’d like the eggs placed.  By placing them in a
directory that is published to the web, you can then make the eggs
available for download, either in an intranet or to the internet at
large.

If someone distributes a package in the form of a single ‘.py’ file, you
can wrap it in an egg by tacking an ‘#egg=name-version’ suffix on the
file’s URL. So, something like this:

     easy_install -f "http://some.example.com/downloads/foo.py#egg=foo-1.0" foo

will install the package as an egg, and this:

     easy_install -zmaxd. \
         -f "http://some.example.com/downloads/foo.py#egg=foo-1.0" foo

will create a ‘.egg’ file in the current directory.


File: setuptools.info,  Node: Creating your own Package Index,  Prev: Packaging Others’ Projects As Eggs,  Up: Tips & Techniques

8.3.1.17 Creating your own Package Index
........................................

In addition to local directories and the Python Package Index,
EasyInstall can find download links on most any web page whose URL is
given to the ‘-f’ (‘--find-links’) option.  In the simplest case, you
can simply have a web page with links to eggs or Python source packages,
even an automatically generated directory listing (such as the Apache
web server provides).

If you are setting up an intranet site for package downloads, you may
want to configure the target machines to use your download site by
default, adding something like this to their *note configuration files:
f0.:

     [easy_install]
     find_links = http://mypackages.example.com/somedir/
                  http://turbogears.org/download/
                  http://peak.telecommunity.com/dist/

As you can see, you can list multiple URLs separated by whitespace,
continuing on multiple lines if necessary (as long as the subsequent
lines are indented.

If you are more ambitious, you can also create an entirely custom
package index or PyPI mirror.  See the ‘--index-url’ option under *note
Command-Line Options: ea, below, and also the section on *note Package
Index "API": fc.


File: setuptools.info,  Node: Password-Protected Sites,  Next: Using pypirc Credentials,  Prev: Tips & Techniques,  Up: Using “Easy Install”

8.3.1.18 Password-Protected Sites
.................................

If a site you want to download from is password-protected using HTTP
“Basic” authentication, you can specify your credentials in the URL,
like so:

     http://some_userid:some_password@some.example.com/some_path/

You can do this with both index page URLs and direct download URLs.  As
long as any HTML pages read by easy_install use `relative' links to
point to the downloads, the same user ID and password will be used to do
the downloading.


File: setuptools.info,  Node: Using pypirc Credentials,  Prev: Password-Protected Sites,  Up: Using “Easy Install”

8.3.1.19 Using .pypirc Credentials
..................................

In additional to supplying credentials in the URL, ‘easy_install’ will
also honor credentials if present in the .pypirc file.  Teams
maintaining a private repository of packages may already have defined
access credentials for uploading packages according to the distutils
documentation.  ‘easy_install’ will attempt to honor those if present.
Refer to the distutils documentation for Python 2.5 or later for details
on the syntax.

* Menu:

* Controlling Build Options::
* Editing and Viewing Source Packages::
* Dealing with Installation Conflicts::
* Compressed Installation::


File: setuptools.info,  Node: Controlling Build Options,  Next: Editing and Viewing Source Packages,  Up: Using pypirc Credentials

8.3.1.20 Controlling Build Options
..................................

EasyInstall respects standard distutils *note Configuration Files: f0,
so you can use them to configure build options for packages that it
installs from source.  For example, if you are on Windows using the
MinGW compiler, you can configure the default compiler by putting
something like this:

     [build]
     compiler = mingw32

into the appropriate distutils configuration file.  In fact, since this
is just normal distutils configuration, it will affect any builds using
that config file, not just ones done by EasyInstall.  For example, if
you add those lines to ‘distutils.cfg’ in the ‘distutils’ package
directory, it will be the default compiler for `all' packages you build.
See *note Configuration Files: f0. below for a list of the standard
configuration file locations, and links to more documentation on using
distutils configuration files.


File: setuptools.info,  Node: Editing and Viewing Source Packages,  Next: Dealing with Installation Conflicts,  Prev: Controlling Build Options,  Up: Using pypirc Credentials

8.3.1.21 Editing and Viewing Source Packages
............................................

Sometimes a package’s source distribution contains additional
documentation, examples, configuration files, etc., that are not part of
its actual code.  If you want to be able to examine these files, you can
use the ‘--editable’ option to EasyInstall, and EasyInstall will look
for a source distribution or Subversion URL for the package, then
download and extract it or check it out as a subdirectory of the
‘--build-directory’ you specify.  If you then wish to install the
package after editing or configuring it, you can do so by rerunning
EasyInstall with that directory as the target.

Note that using ‘--editable’ stops EasyInstall from actually building or
installing the package; it just finds, obtains, and possibly unpacks it
for you.  This allows you to make changes to the package if necessary,
and to either install it in development mode using ‘setup.py develop’
(if the package uses setuptools, that is), or by running ‘easy_install
projectdir’ (where ‘projectdir’ is the subdirectory EasyInstall created
for the downloaded package.

In order to use ‘--editable’ (‘-e’ for short), you `must' also supply a
‘--build-directory’ (‘-b’ for short).  The project will be placed in a
subdirectory of the build directory.  The subdirectory will have the
same name as the project itself, but in all-lowercase.  If a file or
directory of that name already exists, EasyInstall will print an error
message and exit.

Also, when using ‘--editable’, you cannot use URLs or filenames as
arguments.  You `must' specify project names (and optional version
requirements) so that EasyInstall knows what directory name(s) to
create.  If you need to force EasyInstall to use a particular URL or
filename, you should specify it as a ‘--find-links’ item (‘-f’ for
short), and then also specify the project name, e.g.:

     easy_install -eb ~/projects \
      -fhttp://prdownloads.sourceforge.net/ctypes/ctypes-0.9.6.tar.gz?download \
      ctypes==0.9.6


File: setuptools.info,  Node: Dealing with Installation Conflicts,  Next: Compressed Installation,  Prev: Editing and Viewing Source Packages,  Up: Using pypirc Credentials

8.3.1.22 Dealing with Installation Conflicts
............................................

(NOTE: As of 0.6a11, this section is obsolete; it is retained here only
so that people using older versions of EasyInstall can consult it.  As
of version 0.6a11, installation conflicts are handled automatically
without deleting the old or system-installed packages, and without
ignoring the issue.  Instead, eggs are automatically shifted to the
front of ‘sys.path’ using special code added to the ‘easy-install.pth’
file.  So, if you are using version 0.6a11 or better of setuptools, you
do not need to worry about conflicts, and the following issues do not
apply to you.)

EasyInstall installs distributions in a “managed” way, such that each
distribution can be independently activated or deactivated on
‘sys.path’.  However, packages that were not installed by EasyInstall
are “unmanaged”, in that they usually live all in one directory and
cannot be independently activated or deactivated.

As a result, if you are using EasyInstall to upgrade an existing
package, or to install a package with the same name as an existing
package, EasyInstall will warn you of the conflict.  (This is an
improvement over ‘setup.py install’, because the ‘distutils’ just
install new packages on top of old ones, possibly combining two
unrelated packages or leaving behind modules that have been deleted in
the newer version of the package.)

EasyInstall will stop the installation if it detects a conflict between
an existing, “unmanaged” package, and a module or package in any of the
distributions you’re installing.  It will display a list of all of the
existing files and directories that would need to be deleted for the new
package to be able to function correctly.  To proceed, you must manually
delete these conflicting files and directories and re-run EasyInstall.

Of course, once you’ve replaced all of your existing “unmanaged”
packages with versions managed by EasyInstall, you won’t have any more
conflicts to worry about!


File: setuptools.info,  Node: Compressed Installation,  Prev: Dealing with Installation Conflicts,  Up: Using pypirc Credentials

8.3.1.23 Compressed Installation
................................

EasyInstall tries to install packages in zipped form, if it can.
Zipping packages can improve Python’s overall import performance if
you’re not using the ‘--multi-version’ option, because Python processes
zipfile entries on ‘sys.path’ much faster than it does directories.

As of version 0.5a9, EasyInstall analyzes packages to determine whether
they can be safely installed as a zipfile, and then acts on its
analysis.  (Previous versions would not install a package as a zipfile
unless you used the ‘--zip-ok’ option.)

The current analysis approach is fairly conservative; it currently looks
for:

        * Any use of the ‘__file__’ or ‘__path__’ variables (which
          should be replaced with ‘pkg_resources’ API calls)

        * Possible use of ‘inspect’ functions that expect to manipulate
          source files (e.g.  ‘inspect.getsource()’)

        * Top-level modules that might be scripts used with ‘python -m’
          (Python 2.4)

If any of the above are found in the package being installed,
EasyInstall will assume that the package cannot be safely run from a
zipfile, and unzip it to a directory instead.  You can override this
analysis with the ‘-zip-ok’ flag, which will tell EasyInstall to install
the package as a zipfile anyway.  Or, you can use the ‘--always-unzip’
flag, in which case EasyInstall will always unzip, even if its analysis
says the package is safe to run as a zipfile.

Normally, however, it is simplest to let EasyInstall handle the
determination of whether to zip or unzip, and only specify overrides
when needed to work around a problem.  If you find you need to override
EasyInstall’s guesses, you may want to contact the package author and
the EasyInstall maintainers, so that they can make appropriate changes
in future versions.

(Note: If a package uses ‘setuptools’ in its setup script, the package
author has the option to declare the package safe or unsafe for zipped
usage via the ‘zip_safe’ argument to ‘setup()’.  If the package author
makes such a declaration, EasyInstall believes the package’s author and
does not perform its own analysis.  However, your command-line option,
if any, will still override the package author’s choice.)


File: setuptools.info,  Node: Reference Manual,  Prev: Using “Easy Install”,  Up: Easy Install

8.3.2 Reference Manual
----------------------

* Menu:

* Configuration Files::
* Command-Line Options::
* Custom Installation Locations::
* Package Index “API”::


File: setuptools.info,  Node: Configuration Files,  Next: Command-Line Options,  Up: Reference Manual

8.3.2.1 Configuration Files
...........................

(New in 0.4a2)

You may specify default options for EasyInstall using the standard
distutils configuration files, under the command heading ‘easy_install’.
EasyInstall will look first for a ‘setup.cfg’ file in the current
directory, then a ‘~/.pydistutils.cfg’ or ‘$HOME\\pydistutils.cfg’ (on
Unix-like OSes and Windows, respectively), and finally a ‘distutils.cfg’
file in the ‘distutils’ package directory.  Here’s a simple example:

     [easy_install]

     # set the default location to install packages
     install_dir = /home/me/lib/python

     # Notice that indentation can be used to continue an option
     # value; this is especially useful for the "--find-links"
     # option, which tells easy_install to use download links on
     # these pages before consulting PyPI:
     #
     find_links = http://sqlobject.org/
                  http://peak.telecommunity.com/dist/

In addition to accepting configuration for its own options under
‘[easy_install]’, EasyInstall also respects defaults specified for other
distutils commands.  For example, if you don’t set an ‘install_dir’ for
‘[easy_install]’, but `have' set an ‘install_lib’ for the ‘[install]’
command, this will become EasyInstall’s default installation directory.
Thus, if you are already using distutils configuration files to set
default install locations, build options, etc., EasyInstall will respect
your existing settings until and unless you override them explicitly in
an ‘[easy_install]’ section.

For more information, see also the current Python documentation on the
use and location of distutils configuration files(1).

Notice that ‘easy_install’ will use the ‘setup.cfg’ from the current
working directory only if it was triggered from ‘setup.py’ through the
‘install_requires’ option.  The standalone command will not use that
file.

   ---------- Footnotes ----------

   (1) https://docs.python.org/install/index.html#inst-config-files


File: setuptools.info,  Node: Command-Line Options,  Next: Custom Installation Locations,  Prev: Configuration Files,  Up: Reference Manual

8.3.2.2 Command-Line Options
............................

‘--zip-ok, -z’

     Install all packages as zip files, even if they are marked as
     unsafe for running as a zipfile.  This can be useful when
     EasyInstall’s analysis of a non-setuptools package is too
     conservative, but keep in mind that the package may not work
     correctly.  (Changed in 0.5a9; previously this option was required
     in order for zipped installation to happen at all.)

‘--always-unzip, -Z’

     Don’t install any packages as zip files, even if the packages are
     marked as safe for running as a zipfile.  This can be useful if a
     package does something unsafe, but not in a way that EasyInstall
     can easily detect.  EasyInstall’s default analysis is currently
     very conservative, however, so you should only use this option if
     you’ve had problems with a particular package, and `after'
     reporting the problem to the package’s maintainer and to the
     EasyInstall maintainers.

     (Note: the ‘-z/-Z’ options only affect the installation of
     newly-built or downloaded packages that are not already installed
     in the target directory; if you want to convert an existing
     installed version from zipped to unzipped or vice versa, you’ll
     need to delete the existing version first, and re-run EasyInstall.)

‘--multi-version, -m’

     “Multi-version” mode.  Specifying this option prevents
     ‘easy_install’ from adding an ‘easy-install.pth’ entry for the
     package being installed, and if an entry for any version the
     package already exists, it will be removed upon successful
     installation.  In multi-version mode, no specific version of the
     package is available for importing, unless you use
     ‘pkg_resources.require()’ to put it on ‘sys.path’.  This can be as
     simple as:

          from pkg_resources import require
          require("SomePackage", "OtherPackage", "MyPackage")

     which will put the latest installed version of the specified
     packages on ‘sys.path’ for you.  (For more advanced uses, like
     selecting specific versions and enabling optional dependencies, see
     the ‘pkg_resources’ API doc.)

     Changed in 0.6a10: this option is no longer silently enabled when
     installing to a non-PYTHONPATH, non-“site” directory.  You must
     always explicitly use this option if you want it to be active.

‘--upgrade, -U’ (New in 0.5a4)

     By default, EasyInstall only searches online if a project/version
     requirement can’t be met by distributions already installed on
     sys.path or the installation directory.  However, if you supply the
     ‘--upgrade’ or ‘-U’ flag, EasyInstall will always check the package
     index and ‘--find-links’ URLs before selecting a version to
     install.  In this way, you can force EasyInstall to use the latest
     available version of any package it installs (subject to any
     version requirements that might exclude such later versions).

‘--install-dir=DIR, -d DIR’

     Set the installation directory.  It is up to you to ensure that
     this directory is on ‘sys.path’ at runtime, and to use
     ‘pkg_resources.require()’ to enable the installed package(s) that
     you need.

     (New in 0.4a2) If this option is not directly specified on the
     command line or in a distutils configuration file, the distutils
     default installation location is used.  Normally, this would be the
     ‘site-packages’ directory, but if you are using distutils
     configuration files, setting things like ‘prefix’ or ‘install_lib’,
     then those settings are taken into account when computing the
     default installation directory, as is the ‘--prefix’ option.

‘--script-dir=DIR, -s DIR’

     Set the script installation directory.  If you don’t supply this
     option (via the command line or a configuration file), but you
     `have' supplied an ‘--install-dir’ (via command line or config
     file), then this option defaults to the same directory, so that the
     scripts will be able to find their associated package installation.
     Otherwise, this setting defaults to the location where the
     distutils would normally install scripts, taking any distutils
     configuration file settings into account.

‘--exclude-scripts, -x’

     Don’t install scripts.  This is useful if you need to install
     multiple versions of a package, but do not want to reset the
     version that will be run by scripts that are already installed.

‘--user’ (New in 0.6.11)

     Use the user-site-packages as specified in PEP 370(1) instead of
     the global site-packages.

‘--always-copy, -a’ (New in 0.5a4)

     Copy all needed distributions to the installation directory, even
     if they are already present in a directory on sys.path.  In older
     versions of EasyInstall, this was the default behavior, but now you
     must explicitly request it.  By default, EasyInstall will no longer
     copy such distributions from other sys.path directories to the
     installation directory, unless you explicitly gave the
     distribution’s filename on the command line.

     Note that as of 0.6a10, using this option excludes “system” and
     “development” eggs from consideration because they can’t be
     reliably copied.  This may cause EasyInstall to choose an older
     version of a package than what you expected, or it may cause
     downloading and installation of a fresh copy of something that’s
     already installed.  You will see warning messages for any eggs that
     EasyInstall skips, before it falls back to an older version or
     attempts to download a fresh copy.

‘--find-links=URLS_OR_FILENAMES, -f URLS_OR_FILENAMES’

     Scan the specified “download pages” or directories for direct links
     to eggs or other distributions.  Any existing file or directory
     names or direct download URLs are immediately added to
     EasyInstall’s search cache, and any indirect URLs (ones that don’t
     point to eggs or other recognized archive formats) are added to a
     list of additional places to search for download links.  As soon as
     EasyInstall has to go online to find a package (either because it
     doesn’t exist locally, or because ‘--upgrade’ or ‘-U’ was used),
     the specified URLs will be downloaded and scanned for additional
     direct links.

     Eggs and archives found by way of ‘--find-links’ are only
     downloaded if they are needed to meet a requirement specified on
     the command line; links to unneeded packages are ignored.

     If all requested packages can be found using links on the specified
     download pages, the Python Package Index will not be consulted
     unless you also specified the ‘--upgrade’ or ‘-U’ option.

     (Note: if you want to refer to a local HTML file containing links,
     you must use a ‘file:’ URL, as filenames that do not refer to a
     directory, egg, or archive are ignored.)

     You may specify multiple URLs or file/directory names with this
     option, separated by whitespace.  Note that on the command line,
     you will probably have to surround the URL list with quotes, so
     that it is recognized as a single option value.  You can also
     specify URLs in a configuration file; see *note Configuration
     Files: f0, above.

     Changed in 0.6a10: previously all URLs and directories passed to
     this option were scanned as early as possible, but from 0.6a10 on,
     only directories and direct archive links are scanned immediately;
     URLs are not retrieved unless a package search was already going to
     go online due to a package not being available locally, or due to
     the use of the ‘--update’ or ‘-U’ option.

‘--no-find-links’ Blocks the addition of any link.

     This parameter is useful if you want to avoid adding links defined
     in a project easy_install is installing (whether it’s a requested
     project or a dependency).  When used, ‘--find-links’ is ignored.

     Added in Distribute 0.6.11 and Setuptools 0.7.

‘--index-url=URL, -i URL’ (New in 0.4a1; default changed in 0.6c7)

     Specifies the base URL of the Python Package Index.  The default is
     ‘https://pypi.org/simple/’ if not specified.  When a package is
     requested that is not locally available or linked from a
     ‘--find-links’ download page, the package index will be searched
     for download pages for the needed package, and those download pages
     will be searched for links to download an egg or source
     distribution.

‘--editable, -e’ (New in 0.6a1)

     Only find and download source distributions for the specified
     projects, unpacking them to subdirectories of the specified
     ‘--build-directory’.  EasyInstall will not actually build or
     install the requested projects or their dependencies; it will just
     find and extract them for you.  See *note Editing and Viewing
     Source Packages: ef. above for more details.

‘--build-directory=DIR, -b DIR’ (UPDATED in 0.6a1)

     Set the directory used to build source packages.  If a package is
     built from a source distribution or checkout, it will be extracted
     to a subdirectory of the specified directory.  The subdirectory
     will have the same name as the extracted distribution’s project,
     but in all-lowercase.  If a file or directory of that name already
     exists in the given directory, a warning will be printed to the
     console, and the build will take place in a temporary directory
     instead.

     This option is most useful in combination with the ‘--editable’
     option, which forces EasyInstall to `only' find and extract (but
     not build and install) source distributions.  See *note Editing and
     Viewing Source Packages: ef, above, for more information.

‘--verbose, -v, --quiet, -q’ (New in 0.4a4)

     Control the level of detail of EasyInstall’s progress messages.
     The default detail level is “info”, which prints information only
     about relatively time-consuming operations like running a setup
     script, unpacking an archive, or retrieving a URL. Using ‘-q’ or
     ‘--quiet’ drops the detail level to “warn”, which will only display
     installation reports, warnings, and errors.  Using ‘-v’ or
     ‘--verbose’ increases the detail level to include individual
     file-level operations, link analysis messages, and distutils
     messages from any setup scripts that get run.  If you include the
     ‘-v’ option more than once, the second and subsequent uses are
     passed down to any setup scripts, increasing the verbosity of their
     reporting as well.

‘--dry-run, -n’ (New in 0.4a4)

     Don’t actually install the package or scripts.  This option is
     passed down to any setup scripts run, so packages should not
     actually build either.  This does `not' skip downloading, nor does
     it skip extracting source distributions to a temporary/build
     directory.

‘--optimize=LEVEL’, ‘-O LEVEL’ (New in 0.4a4)

     If you are installing from a source distribution, and are `not'
     using the ‘--zip-ok’ option, this option controls the optimization
     level for compiling installed ‘.py’ files to ‘.pyo’ files.  It does
     not affect the compilation of modules contained in ‘.egg’ files,
     only those in ‘.egg’ directories.  The optimization level can be
     set to 0, 1, or 2; the default is 0 (unless it’s set under
     ‘install’ or ‘install_lib’ in one of your distutils configuration
     files).

‘--record=FILENAME’ (New in 0.5a4)

     Write a record of all installed files to FILENAME. This is
     basically the same as the same option for the standard distutils
     “install” command, and is included for compatibility with tools
     that expect to pass this option to “setup.py install”.

‘--site-dirs=DIRLIST, -S DIRLIST’ (New in 0.6a1)

     Specify one or more custom “site” directories (separated by
     commas).  “Site” directories are directories where ‘.pth’ files are
     processed, such as the main Python ‘site-packages’ directory.  As
     of 0.6a10, EasyInstall automatically detects whether a given
     directory processes ‘.pth’ files (or can be made to do so), so you
     should not normally need to use this option.  It is is now only
     necessary if you want to override EasyInstall’s judgment and force
     an installation directory to be treated as if it supported ‘.pth’
     files.

‘--no-deps, -N’ (New in 0.6a6)

     Don’t install any dependencies.  This is intended as a convenience
     for tools that wrap eggs in a platform-specific packaging system.
     (We don’t recommend that you use it for anything else.)

‘--allow-hosts=PATTERNS, -H PATTERNS’ (New in 0.6a6)

     Restrict downloading and spidering to hosts matching the specified
     glob patterns.  E.g.  ‘-H *.python.org’ restricts web access so
     that only packages listed and downloadable from machines in the
     ‘python.org’ domain.  The glob patterns must match the `entire'
     user/host/port section of the target URL(s).  For example,
     ‘*.python.org’ will NOT accept a URL like ‘http://python.org/foo’
     or ‘http://www.python.org:8080/’.  Multiple patterns can be
     specified by separating them with commas.  The default pattern is
     ‘*’, which matches anything.

     In general, this option is mainly useful for blocking EasyInstall’s
     web access altogether (e.g.  ‘-Hlocalhost’), or to restrict it to
     an intranet or other trusted site.  EasyInstall will do the best it
     can to satisfy dependencies given your host restrictions, but of
     course can fail if it can’t find suitable packages.  EasyInstall
     displays all blocked URLs, so that you can adjust your
     ‘--allow-hosts’ setting if it is more strict than you intended.
     Some sites may wish to define a restrictive default setting for
     this option in their *note configuration files: f0, and then
     manually override the setting on the command line as needed.

‘--prefix=DIR’ (New in 0.6a10)

     Use the specified directory as a base for computing the default
     installation and script directories.  On Windows, the resulting
     default directories will be ‘prefix\\Lib\\site-packages’ and
     ‘prefix\\Scripts’, while on other platforms the defaults will be
     ‘prefix/lib/python2.X/site-packages’ (with the appropriate version
     substituted) for libraries and ‘prefix/bin’ for scripts.

     Note that the ‘--prefix’ option only sets the `default'
     installation and script directories, and does not override the ones
     set on the command line or in a configuration file.

‘--local-snapshots-ok, -l’ (New in 0.6c6)

     Normally, EasyInstall prefers to only install `released' versions
     of projects, not in-development ones, because such projects may not
     have a currently-valid version number.  So, it usually only
     installs them when their ‘setup.py’ directory is explicitly passed
     on the command line.

     However, if this option is used, then any in-development projects
     that were installed using the ‘setup.py develop’ command, will be
     used to build eggs, effectively upgrading the “in-development”
     project to a snapshot release.  Normally, this option is used only
     in conjunction with the ‘--always-copy’ option to create a
     distributable snapshot of every egg needed to run an application.

     Note that if you use this option, you must make sure that there is
     a valid version number (such as an SVN revision number tag) for any
     in-development projects that may be used, as otherwise EasyInstall
     may not be able to tell what version of the project is “newer” when
     future installations or upgrades are attempted.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0370


File: setuptools.info,  Node: Custom Installation Locations,  Next: Package Index “API”,  Prev: Command-Line Options,  Up: Reference Manual

8.3.2.3 Custom Installation Locations
.....................................

By default, EasyInstall installs python packages into Python’s main
‘site-packages’ directory, and manages them using a custom ‘.pth’ file
in that same directory.

Very often though, a user or developer wants ‘easy_install’ to install
and manage python packages in an alternative location, usually for one
of 3 reasons:

  1. They don’t have access to write to the main Python site-packages
     directory.

  2. They want a user-specific stash of packages, that is not visible to
     other users.

  3. They want to isolate a set of packages to a specific python
     application, usually to minimize the possibility of version
     conflicts.

Historically, there have been many approaches to achieve custom
installation.  The following section lists only the easiest and most
relevant approaches (1).

*note Use the "–user" option: 104.

*note Use the "–user" option and customize "PYTHONUSERBASE": 105.

*note Use "virtualenv": 106.

* Menu:

* Use the “–user” option::
* Use the “–user” option and customize “PYTHONUSERBASE”::
* Use “virtualenv”::

   ---------- Footnotes ----------

   (1) (1) There are older ways to achieve custom installation using
various ‘easy_install’ and ‘setup.py install’ options, combined with
‘PYTHONPATH’ and/or ‘PYTHONUSERBASE’ alterations, but all of these are
effectively deprecated by the User scheme brought in by PEP-370
(http://www.python.org/dev/peps/pep-0370/).


File: setuptools.info,  Node: Use the “–user” option,  Next: Use the “–user” option and customize “PYTHONUSERBASE”,  Up: Custom Installation Locations

8.3.2.4 Use the “–user” option
..............................

Python provides a User scheme for installation, which means that all
python distributions support an alternative install location that is
specific to a user (1).  The Default location for each OS is explained
in the python documentation for the ‘site.USER_BASE’ variable.  This
mode of installation can be turned on by specifying the ‘--user’ option
to ‘setup.py install’ or ‘easy_install’.  This approach serves the need
to have a user-specific stash of packages.

   ---------- Footnotes ----------

   (1) (3) Prior to the User scheme, there was the Home scheme, which is
still available, but requires more effort than the User scheme to get
packages recognized.


File: setuptools.info,  Node: Use the “–user” option and customize “PYTHONUSERBASE”,  Next: Use “virtualenv”,  Prev: Use the “–user” option,  Up: Custom Installation Locations

8.3.2.5 Use the “–user” option and customize “PYTHONUSERBASE”
.............................................................

The User scheme install location can be customized by setting the
‘PYTHONUSERBASE’ environment variable, which updates the value of
‘site.USER_BASE’.  To isolate packages to a specific application, simply
set the OS environment of that application to a specific value of
‘PYTHONUSERBASE’, that contains just those packages.


File: setuptools.info,  Node: Use “virtualenv”,  Prev: Use the “–user” option and customize “PYTHONUSERBASE”,  Up: Custom Installation Locations

8.3.2.6 Use “virtualenv”
........................

“virtualenv” is a 3rd-party python package that effectively “clones” a
python installation, thereby creating an isolated location to install
packages.  The evolution of “virtualenv” started before the existence of
the User installation scheme.  “virtualenv” provides a version of
‘easy_install’ that is scoped to the cloned python install and is used
in the normal way.  “virtualenv” does offer various features that the
User installation scheme alone does not provide, e.g.  the ability to
hide the main python site-packages.

Please refer to the virtualenv(1) documentation for more details.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/virtualenv/


File: setuptools.info,  Node: Package Index “API”,  Prev: Custom Installation Locations,  Up: Reference Manual

8.3.2.7 Package Index “API”
...........................

Custom package indexes (and PyPI) must follow the following rules for
EasyInstall to be able to look up and download packages:

  1. Except where stated otherwise, “pages” are HTML or XHTML, and
     “links” refer to ‘href’ attributes.

  2. Individual project version pages’ URLs must be of the form
     ‘base/projectname/version’, where ‘base’ is the package index’s
     base URL.

  3. Omitting the ‘/version’ part of a project page’s URL (but keeping
     the trailing ‘/’) should result in a page that is either:

       a. The single active version of that project, as though the
          version had been explicitly included, OR

       b. A page with links to all of the active version pages for that
          project.

  4. Individual project version pages should contain direct links to
     downloadable distributions where possible.  It is explicitly
     permitted for a project’s “long_description” to include URLs, and
     these should be formatted as HTML links by the package index, as
     EasyInstall does no special processing to identify what parts of a
     page are index-specific and which are part of the project’s
     supplied description.

  5. Where available, MD5 information should be added to download URLs
     by appending a fragment identifier of the form ‘#md5=...’, where
     ‘...’ is the 32-character hex MD5 digest.  EasyInstall will verify
     that the downloaded file’s MD5 digest matches the given value.

  6. Individual project version pages should identify any “homepage” or
     “download” URLs using ‘rel="homepage"’ and ‘rel="download"’
     attributes on the HTML elements linking to those URLs.  Use of
     these attributes will cause EasyInstall to always follow the
     provided links, unless it can be determined by inspection that they
     are downloadable distributions.  If the links are not to
     downloadable distributions, they are retrieved, and if they are
     HTML, they are scanned for download links.  They are `not' scanned
     for additional “homepage” or “download” links, as these are only
     processed for pages that are part of a package index site.

  7. The root URL of the index, if retrieved with a trailing ‘/’, must
     result in a page containing links to `all' projects’ active version
     pages.

     (Note: This requirement is a workaround for the absence of
     case-insensitive ‘safe_name()’ matching of project names in URL
     paths.  If project names are matched in this fashion (e.g.  via the
     PyPI server, mod_rewrite, or a similar mechanism), then it is not
     necessary to include this all-packages listing page.)

  8. If a package index is accessed via a ‘file://’ URL, then
     EasyInstall will automatically use ‘index.html’ files, if present,
     when trying to read a directory with a trailing ‘/’ on the URL.


File: setuptools.info,  Node: Porting from Distutils,  Next: “Eggsecutable” Scripts,  Prev: Easy Install,  Up: Guides on backward compatibility & deprecated practice

8.4 Porting from Distutils
==========================

Setuptools and the PyPA have a stated goal(1) to make Setuptools the
reference API for distutils.

Since the 49.1.2 release, Setuptools includes a local, vendored copy of
distutils (from late copies of CPython) that is disabled by default.  To
enable the use of this copy of distutils when invoking setuptools, set
the enviroment variable:

     SETUPTOOLS_USE_DISTUTILS=local

This behavior is planned to become the default.

* Menu:

* Prefer Setuptools::

   ---------- Footnotes ----------

   (1) https://github.com/pypa/packaging-problems/issues/127


File: setuptools.info,  Node: Prefer Setuptools,  Up: Porting from Distutils

8.4.1 Prefer Setuptools
-----------------------

As Distutils is deprecated, any usage of functions or objects from
distutils is similarly discouraged, and Setuptools aims to replace or
deprecate all such uses.  This section describes the recommended
replacements.

‘distutils.core.setup’ → ‘setuptools.setup’

‘distutils.cmd.Command’ → ‘setuptools.Command’

‘distutils.log’ → (no replacement yet)

‘distutils.version.*’ → ‘packaging.version.*’

If a project relies on uses of ‘distutils’ that do not have a suitable
replacement above, please search the Setuptools issue tracker(1) and
file a request, describing the use-case so that Setuptools’ maintainers
can investigate.  Please provide enough detail to help the maintainers
understand how distutils is used, what value it provides, and why that
behavior should be supported.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/


File: setuptools.info,  Node: “Eggsecutable” Scripts,  Prev: Porting from Distutils,  Up: Guides on backward compatibility & deprecated practice

8.5 “Eggsecutable” Scripts
==========================

Deprecated since version 45.3.0.

Occasionally, there are situations where it’s desirable to make an
‘.egg’ file directly executable.  You can do this by including an entry
point such as the following:

     setup(
         # other arguments here...
         entry_points={
             "setuptools.installation": [
                 "eggsecutable = my_package.some_module:main_func",
             ]
         }
     )

Any eggs built from the above setup script will include a short
executable prelude that imports and calls ‘main_func()’ from
‘my_package.some_module’.  The prelude can be run on Unix-like platforms
(including Mac and Linux) by invoking the egg with ‘/bin/sh’, or by
enabling execute permissions on the ‘.egg’ file.  For the executable
prelude to run, the appropriate version of Python must be available via
the ‘PATH’ environment variable, under its “long” name.  That is, if the
egg is built for Python 2.3, there must be a ‘python2.3’ executable
present in a directory on ‘PATH’.

IMPORTANT NOTE: Eggs with an “eggsecutable” header cannot be renamed, or
invoked via symlinks.  They `must' be invoked using their original
filename, in order to ensure that, once running, ‘pkg_resources’ will
know what project and version is in use.  The header script will check
this and exit with an error if the ‘.egg’ file has been renamed or is
invoked via a symlink that changes its base name.


File: setuptools.info,  Node: History<2>,  Next: Credits,  Prev: Guides on backward compatibility & deprecated practice,  Up: Top

9 History
*********

* Menu:

* v50.3.2: v50 3 2.
* v50.3.1: v50 3 1.
* v50.3.0: v50 3 0.
* v50.2.0: v50 2 0.
* v50.1.0: v50 1 0.
* v50.0.3: v50 0 3.
* v50.0.2: v50 0 2.
* v50.0.1: v50 0 1.
* v50.0.0: v50 0 0.
* v49.6.0: v49 6 0.
* v49.5.0: v49 5 0.
* v49.4.0: v49 4 0.
* v49.3.2: v49 3 2.
* v49.3.1: v49 3 1.
* v49.3.0: v49 3 0.
* v49.2.1: v49 2 1.
* v49.2.0: v49 2 0.
* v49.1.3: v49 1 3.
* v49.1.2: v49 1 2.
* v49.1.1: v49 1 1.
* v49.0.1: v49 0 1.
* v49.1.0: v49 1 0.
* v49.0.0: v49 0 0.
* v48.0.0: v48 0 0.
* v47.3.2: v47 3 2.
* v47.3.1: v47 3 1.
* v47.3.0: v47 3 0.
* v47.2.0: v47 2 0.
* v47.1.1: v47 1 1.
* v44.1.1: v44 1 1.
* v47.1.0: v47 1 0.
* v47.0.0: v47 0 0.
* v46.4.0: v46 4 0.
* v46.3.1: v46 3 1.
* v46.3.0: v46 3 0.
* v46.2.0: v46 2 0.
* v46.1.3: v46 1 3.
* v46.1.2: v46 1 2.
* v46.1.1: v46 1 1.
* v46.1.0: v46 1 0.
* v44.1.0: v44 1 0.
* v46.0.0: v46 0 0.
* v45.3.0: v45 3 0.
* v45.2.0: v45 2 0.
* v45.1.0: v45 1 0.
* v45.0.0: v45 0 0.
* v44.0.0: v44 0 0.
* v43.0.0: v43 0 0.
* v42.0.2: v42 0 2.
* v42.0.1: v42 0 1.
* v42.0.0: v42 0 0.
* v41.6.0: v41 6 0.
* v41.5.1: v41 5 1.
* v41.5.0: v41 5 0.
* v41.4.0: v41 4 0.
* v41.3.0: v41 3 0.
* v41.2.0: v41 2 0.
* v41.1.0: v41 1 0.
* v41.0.1: v41 0 1.
* v41.0.0: v41 0 0.
* v40.9.0: v40 9 0.
* v40.8.0: v40 8 0.
* v40.7.3: v40 7 3.
* v40.7.2: v40 7 2.
* v40.7.1: v40 7 1.
* v40.7.0: v40 7 0.
* v40.6.3: v40 6 3.
* v40.6.2: v40 6 2.
* v40.6.1: v40 6 1.
* v40.6.0: v40 6 0.
* v40.5.0: v40 5 0.
* v40.4.3: v40 4 3.
* v40.4.2: v40 4 2.
* v40.4.1: v40 4 1.
* v40.4.0: v40 4 0.
* v40.3.0: v40 3 0.
* v40.2.0: v40 2 0.
* v40.1.1: v40 1 1.
* v40.1.0: v40 1 0.
* v40.0.0: v40 0 0.
* v39.2.0: v39 2 0.
* v39.1.0: v39 1 0.
* v39.0.1: v39 0 1.
* v39.0.0: v39 0 0.
* v38.7.0: v38 7 0.
* v38.6.1: v38 6 1.
* v38.6.0: v38 6 0.
* v38.5.2: v38 5 2.
* v38.5.1: v38 5 1.
* v38.5.0: v38 5 0.
* v38.4.1: v38 4 1.
* v38.4.0: v38 4 0.
* v38.3.0: v38 3 0.
* v38.2.5: v38 2 5.
* v38.2.4: v38 2 4.
* v38.2.3: v38 2 3.
* v38.2.2: v38 2 2.
* v38.2.1: v38 2 1.
* v38.2.0: v38 2 0.
* v38.1.0: v38 1 0.
* v38.0.0: v38 0 0.
* v37.0.0: v37 0 0.
* v36.8.0: v36 8 0.
* v36.7.3: v36 7 3.
* v36.7.2: v36 7 2.
* v36.7.1: v36 7 1.
* v36.7.0: v36 7 0.
* v36.6.1: v36 6 1.
* v36.6.0: v36 6 0.
* v36.5.0: v36 5 0.
* v36.4.0: v36 4 0.
* v36.3.0: v36 3 0.
* v36.2.7: v36 2 7.
* v36.2.6: v36 2 6.
* v36.2.5: v36 2 5.
* v36.2.4: v36 2 4.
* v36.2.3: v36 2 3.
* v36.2.2: v36 2 2.
* v36.2.1: v36 2 1.
* v36.2.0: v36 2 0.
* v36.1.1: v36 1 1.
* v36.1.0: v36 1 0.
* v36.0.1: v36 0 1.
* v36.0.0: v36 0 0.
* v35.0.2: v35 0 2.
* v35.0.1: v35 0 1.
* v35.0.0: v35 0 0.
* v34.4.1: v34 4 1.
* v34.4.0: v34 4 0.
* v34.3.3: v34 3 3.
* v34.3.2: v34 3 2.
* v34.3.1: v34 3 1.
* v34.3.0: v34 3 0.
* v34.2.0: v34 2 0.
* v34.1.1: v34 1 1.
* v34.1.0: v34 1 0.
* v34.0.3: v34 0 3.
* v34.0.2: v34 0 2.
* v34.0.1: v34 0 1.
* v34.0.0: v34 0 0.
* v33.1.1: v33 1 1.
* v33.1.0: v33 1 0.
* v33.0.0: v33 0 0.
* v32.3.1: v32 3 1.
* v32.3.0: v32 3 0.
* v32.2.0: v32 2 0.
* v32.1.3: v32 1 3.
* v32.1.2: v32 1 2.
* v32.1.1: v32 1 1.
* v32.1.0: v32 1 0.
* v32.0.0: v32 0 0.
* v31.0.1: v31 0 1.
* v31.0.0: v31 0 0.
* v30.4.0: v30 4 0.
* v30.3.0: v30 3 0.
* v30.2.1: v30 2 1.
* v30.2.0: v30 2 0.
* v30.1.0: v30 1 0.
* v30.0.0: v30 0 0.
* v29.0.1: v29 0 1.
* v29.0.0: v29 0 0.
* v28.8.0: v28 8 0.
* v28.7.1: v28 7 1.
* v28.7.0: v28 7 0.
* v28.6.1: v28 6 1.
* v28.6.0: v28 6 0.
* v28.5.0: v28 5 0.
* v28.4.0: v28 4 0.
* v28.3.0: v28 3 0.
* v28.1.0: v28 1 0.
* v28.0.0: v28 0 0.
* v27.3.1: v27 3 1.
* v27.3.0: v27 3 0.
* v27.2.0: v27 2 0.
* v27.1.2: v27 1 2.
* v27.1.1: v27 1 1.
* v27.1.0: v27 1 0.
* v27.0.0: v27 0 0.
* v26.1.1: v26 1 1.
* v26.1.0: v26 1 0.
* v26.0.0: v26 0 0.
* v25.4.0: v25 4 0.
* v25.3.0: v25 3 0.
* v25.2.0: v25 2 0.
* v25.1.6: v25 1 6.
* v25.1.5: v25 1 5.
* v25.1.4: v25 1 4.
* v25.1.3: v25 1 3.
* v25.1.2: v25 1 2.
* v25.1.1: v25 1 1.
* v25.1.0: v25 1 0.
* v25.0.2: v25 0 2.
* v25.0.1: v25 0 1.
* v25.0.0: v25 0 0.
* v24.3.1: v24 3 1.
* v24.3.0: v24 3 0.
* v24.2.1: v24 2 1.
* v24.2.0: v24 2 0.
* v24.1.1: v24 1 1.
* v24.1.0: v24 1 0.
* v24.0.3: v24 0 3.
* v24.0.2: v24 0 2.
* v24.0.1: v24 0 1.
* v24.0.0: v24 0 0.
* v23.2.1: v23 2 1.
* v23.1.0: v23 1 0.
* v23.0.0: v23 0 0.
* v22.0.5: v22 0 5.
* v22.0.4: v22 0 4.
* v22.0.3: v22 0 3.
* v22.0.2: v22 0 2.
* v22.0.1: v22 0 1.
* v22.0.0: v22 0 0.
* v21.2.2: v21 2 2.
* v21.2.1: v21 2 1.
* v21.2.0: v21 2 0.
* v21.1.0: v21 1 0.
* v21.0.0: v21 0 0.
* v20.10.0: v20 10 0.
* v20.9.0: v20 9 0.
* v20.8.1: v20 8 1.
* v20.8.0: v20 8 0.
* v20.7.0: v20 7 0.
* v20.6.8: v20 6 8.
* v20.6.7: v20 6 7.
* v20.6.6: v20 6 6.
* v20.6.0: v20 6 0.
* 20.5: 20 5.
* 20.4: 20 4.
* 20.3.1: 20 3 1.
* 20.3: 20 3.
* 20.2.2: 20 2 2.
* 20.2.1: 20 2 1.
* 20.2: 20 2.
* 20.1.1: 20 1 1.
* 20.1: 20 1.
* 20.0: 20 0.
* 19.7: 19 7.
* 19.6.2: 19 6 2.
* 19.6.1: 19 6 1.
* 19.6: 19 6.
* 19.5: 19 5.
* 19.4.1: 19 4 1.
* 19.4: 19 4.
* 19.3: 19 3.
* 19.2: 19 2.
* 19.1.1: 19 1 1.
* 19.1: 19 1.
* 19.0: 19 0.
* 18.8.1: 18 8 1.
* 18.8: 18 8.
* 18.7.1: 18 7 1.
* 18.7: 18 7.
* 18.6.1: 18 6 1.
* 18.6: 18 6.
* 18.5: 18 5.
* 18.4: 18 4.
* 18.3.2: 18 3 2.
* 18.3.1: 18 3 1.
* 18.3: 18 3.
* 18.2: 18 2.
* 18.1: 18 1.
* 18.0.1: 18 0 1.
* 18.0: 18 0.
* 17.1.1: 17 1 1.
* 17.1: 17 1.
* 17.0: 17 0.
* 16.0: 16 0.
* 15.2: 15 2.
* 15.1: 15 1.
* 15.0: 15 0.
* 14.3.1: 14 3 1.
* 14.3: 14 3.
* 14.2: 14 2.
* 14.1.1: 14 1 1.
* 14.1: 14 1.
* 14.0: 14 0.
* 13.0.2: 13 0 2.
* 13.0.1: 13 0 1.
* 13.0: 13 0.
* 12.4: 12 4.
* 12.3: 12 3.
* 12.2: 12 2.
* 12.1: 12 1.
* 12.0.5: 12 0 5.
* 12.0.4: 12 0 4.
* 12.0.3: 12 0 3.
* 12.0.2: 12 0 2.
* 12.0.1: 12 0 1.
* 12.0: 12 0.
* 11.3.1: 11 3 1.
* 11.3: 11 3.
* 11.2: 11 2.
* 11.1: 11 1.
* 11.0: 11 0.
* 10.2.1: 10 2 1.
* 10.2: 10 2.
* 10.1: 10 1.
* 10.0.1: 10 0 1.
* 10.0: 10 0.
* 9.1: 9 1.
* 9.0.1: 9 0 1.
* 9.0: 9 0.
* 8.4: 8 4.
* 8.3: 8 3.
* 8.2.1: 8 2 1.
* 8.2: 8 2.
* 8.1: 8 1.
* 8.0.4: 8 0 4.
* 8.0.3: 8 0 3.
* 8.0.2: 8 0 2.
* 8.0.1: 8 0 1.
* 8.0: 8 0.
* 7.0: 7 0.
* 6.1: 6 1.
* 6.0.2: 6 0 2.
* 6.0.1: 6 0 1.
* 6.0: 6 0.
* 5.8: 5 8.
* 5.7: 5 7.
* 5.6: 5 6.
* 5.5.1: 5 5 1.
* 5.5: 5 5.
* 5.4.2: 5 4 2.
* 5.4.1: 5 4 1.
* 5.4: 5 4.
* 5.3: 5 3.
* 5.2: 5 2.
* 5.1: 5 1.
* 5.0.2: 5 0 2.
* 5.0.1: 5 0 1.
* 5.0: 5 0.
* 3.7.1 and 3.8.1 and 4.0.1: 3 7 1 and 3 8 1 and 4 0 1.
* 4.0: 4 0.
* 3.8: 3 8.
* 3.7: 3 7.
* 3.6: 3 6.
* 3.5.2: 3 5 2.
* 3.5.1: 3 5 1.
* 3.5: 3 5.
* 3.4.4: 3 4 4.
* 3.4.3: 3 4 3.
* 3.4.2: 3 4 2.
* 3.4.1: 3 4 1.
* 3.4: 3 4.
* 3.3: 3 3.
* 3.2: 3 2.
* 3.1: 3 1.
* 3.0.2: 3 0 2.
* 3.0.1: 3 0 1.
* 3.0: 3 0.
* 2.2: 2 2.
* 2.1.2: 2 1 2.
* 2.1.1: 2 1 1.
* 2.1: 2 1.
* 2.0.2: 2 0 2.
* 2.0.1: 2 0 1.
* 2.0: 2 0.
* 1.4.2: 1 4 2.
* 1.4.1: 1 4 1.
* 1.4: 1 4.
* 1.3.2: 1 3 2.
* 1.3.1: 1 3 1.
* 1.3: 1 3.
* 1.2: 1 2.
* 1.1.7: 1 1 7.
* 1.1.6: 1 1 6.
* 1.1.5: 1 1 5.
* 1.1.4: 1 1 4.
* 1.1.3: 1 1 3.
* 1.1.2: 1 1 2.
* 1.1.1: 1 1 1.
* 1.1: 1 1.
* 1.0: 1 0.
* 0.9.8: 0 9 8.
* 0.9.7: 0 9 7.
* 0.9.6: 0 9 6.
* 0.9.5: 0 9 5.
* 0.9.4: 0 9 4.
* 0.9.3: 0 9 3.
* 0.9.2: 0 9 2.
* 0.9.1: 0 9 1.
* 0.9: 0 9.
* 0.8: 0 8.
* 0.7.8: 0 7 8.
* 0.7.7: 0 7 7.
* 0.7.6: 0 7 6.
* 0.7.5: 0 7 5.
* 0.7.4: 0 7 4.
* 0.7.3: 0 7 3.
* 0.7.2: 0 7 2.
* 0.7.1: 0 7 1.
* 0.7: 0 7.
* 0.7b4: 0 7b4.
* 0.6.49: 0 6 49.
* 0.6.48: 0 6 48.
* 0.6.47: 0 6 47.
* 0.6.46: 0 6 46.
* 0.6.45: 0 6 45.
* 0.6.44: 0 6 44.
* 0.6.43: 0 6 43.
* 0.6.42: 0 6 42.
* 0.6.41: 0 6 41.
* 0.6.40: 0 6 40.
* 0.6.39: 0 6 39.
* 0.6.38: 0 6 38.
* 0.6.37: 0 6 37.
* 0.6.36: 0 6 36.
* 0.6.35: 0 6 35.
* 0.6.34: 0 6 34.
* 0.6.33: 0 6 33.
* 0.6.32: 0 6 32.
* 0.6.31: 0 6 31.
* 0.6.30: 0 6 30.
* 0.6.29: 0 6 29.
* 0.6.28: 0 6 28.
* 0.6.27: 0 6 27.
* 0.6.26: 0 6 26.
* 0.6.25: 0 6 25.
* 0.6.24: 0 6 24.
* 0.6.23: 0 6 23.
* 0.6.21: 0 6 21.
* 0.6.20: 0 6 20.
* 0.6.19: 0 6 19.
* 0.6.18: 0 6 18.
* 0.6.17: 0 6 17.
* 0.6.16: 0 6 16.
* 0.6.15: 0 6 15.
* 0.6.14: 0 6 14.
* 0.6.13: 0 6 13.
* 0.6.12: 0 6 12.
* 0.6.11: 0 6 11.
* 0.6.10: 0 6 10.
* 0.6.9: 0 6 9.
* 0.6.8: 0 6 8.
* 0.6.7: 0 6 7.
* 0.6.6: 0 6 6.
* 0.6.5: 0 6 5.
* 0.6.4: 0 6 4.
* 0.6.3: 0 6 3.
* 0.6.2: 0 6 2.
* 0.6.1: 0 6 1.
* 0.6: 0 6.
* 0.6c9: 0 6c9.
* 0.6c7: 0 6c7.
* 0.6c6: 0 6c6.
* 0.6c5: 0 6c5.
* 0.6c4: 0 6c4.
* 0.6c3: 0 6c3.
* 0.6c2: 0 6c2.
* 0.6c1: 0 6c1.
* 0.6b4: 0 6b4.
* 0.6b3: 0 6b3.
* 0.6b2: 0 6b2.
* 0.6b1: 0 6b1.
* 0.6a11: 0 6a11.
* 0.6a10: 0 6a10.
* 0.6a9: 0 6a9.
* 0.6a8: 0 6a8.
* 0.6a7: 0 6a7.
* 0.6a6: 0 6a6.
* 0.6a5: 0 6a5.
* 0.6a3: 0 6a3.
* 0.6a2: 0 6a2.
* 0.6a1: 0 6a1.
* 0.5a12: 0 5a12.
* 0.5a11: 0 5a11.
* 0.5a10: 0 5a10.
* 0.5a9: 0 5a9.
* 0.5a8: 0 5a8.
* 0.5a7: 0 5a7.
* 0.5a6: 0 5a6.
* 0.5a5: 0 5a5.
* 0.5a4: 0 5a4.
* 0.5a3: 0 5a3.
* 0.5a2: 0 5a2.
* 0.5a1: 0 5a1.
* 0.4a4: 0 4a4.
* 0.4a3: 0 4a3.
* 0.4a2: 0 4a2.
* 0.4a1: 0 4a1.
* 0.3a4: 0 3a4.
* 0.3a3: 0 3a3.
* 0.3a2: 0 3a2.
* 0.3a1: 0 3a1.


File: setuptools.info,  Node: v50 3 2,  Next: v50 3 1,  Up: History<2>

9.1 v50.3.2
===========

17 Oct 2020

* Menu:

* Documentation changes::
* Misc::


File: setuptools.info,  Node: Documentation changes,  Next: Misc,  Up: v50 3 2

9.1.1 Documentation changes
---------------------------

   * #2394(1): Extended towncrier news template to include change note
     categories.  This allows to see what types of changes a given
     version introduces – by @webknjaz(2)

   * #2427(3): Started enforcing strict syntax and reference validation
     in the Sphinx docs – by @webknjaz(4)

   * #2428(5): Removed redundant Sphinx ‘Makefile’ support – by
     @webknjaz(6)

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2394

   (2) https://github.com/sponsors/webknjaz

   (3) https://github.com/pypa/setuptools/issues/2427

   (4) https://github.com/sponsors/webknjaz

   (5) https://github.com/pypa/setuptools/issues/2428

   (6) https://github.com/sponsors/webknjaz


File: setuptools.info,  Node: Misc,  Prev: Documentation changes,  Up: v50 3 2

9.1.2 Misc
----------

   * #2401(1): Enabled test results reporting in AppVeyor CI – by
     @webknjaz(2)

   * #2420(3): Replace Python 3.9.0 beta with 3.9.0 final on GitHub
     Actions.

   * #2421(4): Python 3.9 Trove classifier got added to the dist
     metadata – by @webknjaz(5)

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2401

   (2) https://github.com/sponsors/webknjaz

   (3) https://github.com/pypa/setuptools/issues/2420

   (4) https://github.com/pypa/setuptools/issues/2421

   (5) https://github.com/sponsors/webknjaz


File: setuptools.info,  Node: v50 3 1,  Next: v50 3 0,  Prev: v50 3 2,  Up: History<2>

9.2 v50.3.1
===========

14 Oct 2020

* Menu:

* Documentation changes: Documentation changes<2>.
* Misc: Misc<2>.


File: setuptools.info,  Node: Documentation changes<2>,  Next: Misc<2>,  Up: v50 3 1

9.2.1 Documentation changes
---------------------------

   * #2093(1): Finalized doc revamp.

   * #2097(2): doc: simplify index and group deprecated files

   * #2102(3): doc overhaul step 2: break main doc into multiple
     sections

   * #2111(4): doc overhaul step 3: update userguide

   * #2395(5): Added a ‘:user:’ role to Sphinx config – by @webknjaz(6)

   * #2395(7): Added an illustrative explanation about the change notes
     to fragments dir – by @webknjaz(8)

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2093

   (2) https://github.com/pypa/setuptools/issues/2097

   (3) https://github.com/pypa/setuptools/issues/2102

   (4) https://github.com/pypa/setuptools/issues/2111

   (5) https://github.com/pypa/setuptools/issues/2395

   (6) https://github.com/sponsors/webknjaz

   (7) https://github.com/pypa/setuptools/issues/2395

   (8) https://github.com/sponsors/webknjaz


File: setuptools.info,  Node: Misc<2>,  Prev: Documentation changes<2>,  Up: v50 3 1

9.2.2 Misc
----------

   * #2379(1): Travis CI test suite now tests against PPC64.

   * #2413(2): Suppress EOF errors (and other exceptions) when importing
     lib2to3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2379

   (2) https://github.com/pypa/setuptools/issues/2413


File: setuptools.info,  Node: v50 3 0,  Next: v50 2 0,  Prev: v50 3 1,  Up: History<2>

9.3 v50.3.0
===========

05 Sep 2020

* Menu:

* Changes::


File: setuptools.info,  Node: Changes,  Up: v50 3 0

9.3.1 Changes
-------------

   * #2368(1): In distutils, restore support for monkeypatched
     CCompiler.spawn per pypa/distutils#15(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2368

   (2) https://github.com/pypa/distutils/issues/15


File: setuptools.info,  Node: v50 2 0,  Next: v50 1 0,  Prev: v50 3 0,  Up: History<2>

9.4 v50.2.0
===========

04 Sep 2020

* Menu:

* Changes: Changes<2>.


File: setuptools.info,  Node: Changes<2>,  Up: v50 2 0

9.4.1 Changes
-------------

   * #2355(1): When pip is imported as part of a build, leave distutils
     patched.

   * #2380(2): There are some setuptools specific changes in the
     ‘setuptools.command.bdist_rpm’ module that are no longer needed,
     because they are part of the ‘bdist_rpm’ module in distutils in
     Python 3.5.0.  Therefore, code was removed from
     ‘setuptools.command.bdist_rpm’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2355

   (2) https://github.com/pypa/setuptools/issues/2380


File: setuptools.info,  Node: v50 1 0,  Next: v50 0 3,  Prev: v50 2 0,  Up: History<2>

9.5 v50.1.0
===========

02 Sep 2020

* Menu:

* Changes: Changes<3>.


File: setuptools.info,  Node: Changes<3>,  Up: v50 1 0

9.5.1 Changes
-------------

   * #2350(1): Setuptools reverts using the included distutils by
     default.  Platform maintainers and system integrators and others
     are `strongly' encouraged to set ‘SETUPTOOLS_USE_DISTUTILS=local’
     to help identify and work through the reported issues with
     distutils adoption, mainly to file issues and pull requests with
     pypa/distutils such that distutils performs as needed across every
     supported environment.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2350


File: setuptools.info,  Node: v50 0 3,  Next: v50 0 2,  Prev: v50 1 0,  Up: History<2>

9.6 v50.0.3
===========

01 Sep 2020

* Menu:

* Misc: Misc<3>.


File: setuptools.info,  Node: Misc<3>,  Up: v50 0 3

9.6.1 Misc
----------

   * #2363(1): Restore link_libpython support on Python 3.7 and earlier
     (see pypa/distutils#9(2)).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2363

   (2) https://github.com/pypa/distutils/issues/9


File: setuptools.info,  Node: v50 0 2,  Next: v50 0 1,  Prev: v50 0 3,  Up: History<2>

9.7 v50.0.2
===========

01 Sep 2020

* Menu:

* Misc: Misc<4>.


File: setuptools.info,  Node: Misc<4>,  Up: v50 0 2

9.7.1 Misc
----------

   * #2352(1): In distutils hack, use absolute import rather than
     relative to avoid bpo-30876(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2352

   (2) http://bugs.python.org/issue30876


File: setuptools.info,  Node: v50 0 1,  Next: v50 0 0,  Prev: v50 0 2,  Up: History<2>

9.8 v50.0.1
===========

01 Sep 2020

* Menu:

* Misc: Misc<5>.


File: setuptools.info,  Node: Misc<5>,  Up: v50 0 1

9.8.1 Misc
----------

   * #2357(1): Restored Python 3.5 support in distutils.util for missing
     ‘subprocess._optim_args_from_interpreter_flags’.

   * #2358(2): Restored AIX support on Python 3.8 and earlier.

   * #2361(3): Add Python 3.10 support to _distutils_hack.  Get the
     ‘Loader’ abstract class from importlib.abc rather than
     importlib.util.abc (alias removed in Python 3.10).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2357

   (2) https://github.com/pypa/setuptools/issues/2358

   (3) https://github.com/pypa/setuptools/issues/2361


File: setuptools.info,  Node: v50 0 0,  Next: v49 6 0,  Prev: v50 0 1,  Up: History<2>

9.9 v50.0.0
===========

20 Aug 2020

* Menu:

* Breaking Changes::
* Changes: Changes<4>.


File: setuptools.info,  Node: Breaking Changes,  Next: Changes<4>,  Up: v50 0 0

9.9.1 Breaking Changes
----------------------

   * #2232(1): Once again, Setuptools overrides the stdlib distutils on
     import.  For environments or invocations where this behavior is
     undesirable, users are provided with a temporary escape hatch.  If
     the environment variable ‘SETUPTOOLS_USE_DISTUTILS’ is set to
     ‘stdlib’, Setuptools will fall back to the legacy behavior.  Use of
     this escape hatch is discouraged, but it is provided to ease the
     transition while proper fixes for edge cases can be addressed.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2232


File: setuptools.info,  Node: Changes<4>,  Prev: Breaking Changes,  Up: v50 0 0

9.9.2 Changes
-------------

   * #2334(1): In MSVC module, refine text in error message.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2334


File: setuptools.info,  Node: v49 6 0,  Next: v49 5 0,  Prev: v50 0 0,  Up: History<2>

9.10 v49.6.0
============

13 Aug 2020

* Menu:

* Changes: Changes<5>.


File: setuptools.info,  Node: Changes<5>,  Up: v49 6 0

9.10.1 Changes
--------------

   * #2129(1): In pkg_resources, no longer detect any pathname ending in
     .egg as a Python egg.  Now the path must be an unpacked egg or a
     zip file.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2129


File: setuptools.info,  Node: v49 5 0,  Next: v49 4 0,  Prev: v49 6 0,  Up: History<2>

9.11 v49.5.0
============

13 Aug 2020

* Menu:

* Changes: Changes<6>.


File: setuptools.info,  Node: Changes<6>,  Up: v49 5 0

9.11.1 Changes
--------------

   * #2306(1): When running as a PEP 517(2) backend, setuptools does not
     try to install ‘setup_requires’ itself.  They are reported as build
     requirements for the frontend to install.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2306

   (2) https://www.python.org/dev/peps/pep-0517/


File: setuptools.info,  Node: v49 4 0,  Next: v49 3 2,  Prev: v49 5 0,  Up: History<2>

9.12 v49.4.0
============

13 Aug 2020

* Menu:

* Changes: Changes<7>.


File: setuptools.info,  Node: Changes<7>,  Up: v49 4 0

9.12.1 Changes
--------------

   * #2310(1): Updated vendored packaging version to 20.4.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2310


File: setuptools.info,  Node: v49 3 2,  Next: v49 3 1,  Prev: v49 4 0,  Up: History<2>

9.13 v49.3.2
============

12 Aug 2020

* Menu:

* Documentation changes: Documentation changes<3>.
* Misc: Misc<6>.


File: setuptools.info,  Node: Documentation changes<3>,  Next: Misc<6>,  Up: v49 3 2

9.13.1 Documentation changes
----------------------------

   * #2300(1): Improve the ‘safe_version’ function documentation

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2300


File: setuptools.info,  Node: Misc<6>,  Prev: Documentation changes<3>,  Up: v49 3 2

9.13.2 Misc
-----------

   * #2297(1): Once again, in stubs prefer exec_module to the deprecated
     load_module.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2297


File: setuptools.info,  Node: v49 3 1,  Next: v49 3 0,  Prev: v49 3 2,  Up: History<2>

9.14 v49.3.1
============

10 Aug 2020

* Menu:

* Changes: Changes<8>.


File: setuptools.info,  Node: Changes<8>,  Up: v49 3 1

9.14.1 Changes
--------------

   * #2316(1): Removed warning when ‘distutils’ is imported before
     ‘setuptools’ when ‘distutils’ replacement is not enabled.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2316


File: setuptools.info,  Node: v49 3 0,  Next: v49 2 1,  Prev: v49 3 1,  Up: History<2>

9.15 v49.3.0
============

09 Aug 2020

* Menu:

* Changes: Changes<9>.


File: setuptools.info,  Node: Changes<9>,  Up: v49 3 0

9.15.1 Changes
--------------

   * #2259(1): Setuptools now provides a .pth file (except for editable
     installs of setuptools) to the target environment to ensure that
     when enabled, the setuptools-provided distutils is preferred before
     setuptools has been imported (and even if setuptools is never
     imported).  Honors the SETUPTOOLS_USE_DISTUTILS environment
     variable.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2259


File: setuptools.info,  Node: v49 2 1,  Next: v49 2 0,  Prev: v49 3 0,  Up: History<2>

9.16 v49.2.1
============

02 Aug 2020

* Menu:

* Misc: Misc<7>.


File: setuptools.info,  Node: Misc<7>,  Up: v49 2 1

9.16.1 Misc
-----------

   * #2257(1): Fixed two flaws in
     distutils._msvccompiler.MSVCCompiler.spawn.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2257


File: setuptools.info,  Node: v49 2 0,  Next: v49 1 3,  Prev: v49 2 1,  Up: History<2>

9.17 v49.2.0
============

12 Jul 2020

* Menu:

* Changes: Changes<10>.


File: setuptools.info,  Node: Changes<10>,  Up: v49 2 0

9.17.1 Changes
--------------

   * #2230(1): Now warn the user when setuptools is imported after
     distutils modules have been loaded (exempting PyPy for 3.6),
     directing the users of packages to import setuptools first.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2230


File: setuptools.info,  Node: v49 1 3,  Next: v49 1 2,  Prev: v49 2 0,  Up: History<2>

9.18 v49.1.3
============

12 Jul 2020

* Menu:

* Misc: Misc<8>.


File: setuptools.info,  Node: Misc<8>,  Up: v49 1 3

9.18.1 Misc
-----------

   * #2212(1): (Distutils) Allow spawn to accept environment.  Avoid
     monkey-patching global state.

   * #2249(2): Fix extension loading technique in stubs.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2212

   (2) https://github.com/pypa/setuptools/issues/2249


File: setuptools.info,  Node: v49 1 2,  Next: v49 1 1,  Prev: v49 1 3,  Up: History<2>

9.19 v49.1.2
============

11 Jul 2020

* Menu:

* Changes: Changes<11>.


File: setuptools.info,  Node: Changes<11>,  Up: v49 1 2

9.19.1 Changes
--------------

   * #2232(1): In preparation for re-enabling a local copy of distutils,
     Setuptools now honors an environment variable,
     SETUPTOOLS_USE_DISTUTILS. If set to ‘stdlib’ (current default),
     distutils will be used from the standard library.  If set to
     ‘local’ (default in a imminent backward-incompatible release), the
     local copy of distutils will be used.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2232


File: setuptools.info,  Node: v49 1 1,  Next: v49 0 1,  Prev: v49 1 2,  Up: History<2>

9.20 v49.1.1
============

10 Jul 2020

* Menu:

* Misc: Misc<9>.


File: setuptools.info,  Node: Misc<9>,  Up: v49 1 1

9.20.1 Misc
-----------

   * #2094(1): Removed pkg_resources.py2_warn module, which is no longer
     reachable.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2094


File: setuptools.info,  Node: v49 0 1,  Next: v49 1 0,  Prev: v49 1 1,  Up: History<2>

9.21 v49.0.1
============

05 Jul 2020

* Menu:

* Misc: Misc<10>.


File: setuptools.info,  Node: Misc<10>,  Up: v49 0 1

9.21.1 Misc
-----------

   * #2228(1): Applied fix for pypa/distutils#3(2), restoring
     expectation that spawn will raise a DistutilsExecError when
     attempting to execute a missing file.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2228

   (2) https://github.com/pypa/distutils/issues/3


File: setuptools.info,  Node: v49 1 0,  Next: v49 0 0,  Prev: v49 0 1,  Up: History<2>

9.22 v49.1.0
============

03 Jul 2020

* Menu:

* Changes: Changes<12>.


File: setuptools.info,  Node: Changes<12>,  Up: v49 1 0

9.22.1 Changes
--------------

   * #2228(1): Disabled distutils adoption for now while emergent issues
     are addressed.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2228


File: setuptools.info,  Node: v49 0 0,  Next: v48 0 0,  Prev: v49 1 0,  Up: History<2>

9.23 v49.0.0
============

03 Jul 2020

* Menu:

* Breaking Changes: Breaking Changes<2>.
* Changes: Changes<13>.
* Misc: Misc<11>.


File: setuptools.info,  Node: Breaking Changes<2>,  Next: Changes<13>,  Up: v49 0 0

9.23.1 Breaking Changes
-----------------------

   * #2165(1): Setuptools no longer installs a site.py file during
     easy_install or develop installs.  As a result, .eggs on PYTHONPATH
     will no longer take precedence over other packages on sys.path.  If
     this issue affects your production environment, please reach out to
     the maintainers at #2165(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2165

   (2) https://github.com/pypa/setuptools/issues/2165


File: setuptools.info,  Node: Changes<13>,  Next: Misc<11>,  Prev: Breaking Changes<2>,  Up: v49 0 0

9.23.2 Changes
--------------

   * #2137(1): Removed (private) pkg_resources.RequirementParseError,
     now replaced by packaging.requirements.InvalidRequirement.  Kept
     the name for compatibility, but users should catch
     InvalidRequirement instead.

   * #2180(2): Update vendored packaging in pkg_resources to 19.2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2137

   (2) https://github.com/pypa/setuptools/issues/2180


File: setuptools.info,  Node: Misc<11>,  Prev: Changes<13>,  Up: v49 0 0

9.23.3 Misc
-----------

   * #2199(1): Fix exception causes all over the codebase by using
     ‘raise new_exception from old_exception’

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2199


File: setuptools.info,  Node: v48 0 0,  Next: v47 3 2,  Prev: v49 0 0,  Up: History<2>

9.24 v48.0.0
============

03 Jul 2020

* Menu:

* Breaking Changes: Breaking Changes<3>.


File: setuptools.info,  Node: Breaking Changes<3>,  Up: v48 0 0

9.24.1 Breaking Changes
-----------------------

   * #2143(1): Setuptools adopts distutils from the Python 3.9 standard
     library and no longer depends on distutils in the standard library.
     When importing ‘setuptools’ or ‘setuptools.distutils_patch’,
     Setuptools will expose its bundled version as a top-level
     ‘distutils’ package (and unload any previously-imported top-level
     distutils package), retaining the expectation that ‘distutils’’
     objects are actually Setuptools objects.  To avoid getting any
     legacy behavior from the standard library, projects are advised to
     always “import setuptools” prior to importing anything from
     distutils.  This behavior happens by default when using ‘pip
     install’ or ‘pep517.build’.  Workflows that rely on ‘setup.py
     (anything)’ will need to first ensure setuptools is imported.  One
     way to achieve this behavior without modifying code is to invoke
     Python thus: ‘python -c "import setuptools;
     exec(open('setup.py').read())" (anything)’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2143


File: setuptools.info,  Node: v47 3 2,  Next: v47 3 1,  Prev: v48 0 0,  Up: History<2>

9.25 v47.3.2
============

03 Jul 2020

* Menu:

* Misc: Misc<12>.


File: setuptools.info,  Node: Misc<12>,  Up: v47 3 2

9.25.1 Misc
-----------

   * #2071(1): Replaced references to the deprecated imp package with
     references to importlib

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2071


File: setuptools.info,  Node: v47 3 1,  Next: v47 3 0,  Prev: v47 3 2,  Up: History<2>

9.26 v47.3.1
============

16 Jun 2020

* Menu:

* Misc: Misc<13>.


File: setuptools.info,  Node: Misc<13>,  Up: v47 3 1

9.26.1 Misc
-----------

   * #1973(1): Removed ‘pkg_resources.py31compat.makedirs’ in favor of
     the stdlib.  Use ‘os.makedirs()’ instead.

   * #2198(2): Restore ‘__requires__’ directive in easy-install wrapper
     scripts.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1973

   (2) https://github.com/pypa/setuptools/issues/2198


File: setuptools.info,  Node: v47 3 0,  Next: v47 2 0,  Prev: v47 3 1,  Up: History<2>

9.27 v47.3.0
============

15 Jun 2020

* Menu:

* Changes: Changes<14>.
* Misc: Misc<14>.


File: setuptools.info,  Node: Changes<14>,  Next: Misc<14>,  Up: v47 3 0

9.27.1 Changes
--------------

   * #2197(1): Console script wrapper for editable installs now has a
     unified template and honors importlib_metadata if present for
     faster script execution on older Pythons.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2197


File: setuptools.info,  Node: Misc<14>,  Prev: Changes<14>,  Up: v47 3 0

9.27.2 Misc
-----------

   * #2195(1): Fix broken entry points generated by easy-install (pip
     editable installs).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2195


File: setuptools.info,  Node: v47 2 0,  Next: v47 1 1,  Prev: v47 3 0,  Up: History<2>

9.28 v47.2.0
============

15 Jun 2020

* Menu:

* Changes: Changes<15>.


File: setuptools.info,  Node: Changes<15>,  Up: v47 2 0

9.28.1 Changes
--------------

   * #2194(1): Editable-installed entry points now load significantly
     faster on Python versions 3.8+.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2194


File: setuptools.info,  Node: v47 1 1,  Next: v44 1 1,  Prev: v47 2 0,  Up: History<2>

9.29 v47.1.1
============

28 May 2020

* Menu:

* Documentation changes: Documentation changes<4>.
* Incorporate changes from v44.1.1;: Incorporate changes from v44 1 1.


File: setuptools.info,  Node: Documentation changes<4>,  Next: Incorporate changes from v44 1 1,  Up: v47 1 1

9.29.1 Documentation changes
----------------------------

   * #2156(1): Update mailing list pointer in developer docs

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2156


File: setuptools.info,  Node: Incorporate changes from v44 1 1,  Prev: Documentation changes<4>,  Up: v47 1 1

9.29.2 Incorporate changes from v44.1.1:
----------------------------------------

   * #2158(1): Avoid loading working set during
     ‘Distribution.finalize_options’ prior to invoking
     ‘_install_setup_requires’, broken since v42.0.0.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2158


File: setuptools.info,  Node: v44 1 1,  Next: v47 1 0,  Prev: v47 1 1,  Up: History<2>

9.30 v44.1.1
============

28 May 2020

* Menu:

* Misc: Misc<15>.


File: setuptools.info,  Node: Misc<15>,  Up: v44 1 1

9.30.1 Misc
-----------

   * #2158(1): Avoid loading working set during
     ‘Distribution.finalize_options’ prior to invoking
     ‘_install_setup_requires’, broken since v42.0.0.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2158


File: setuptools.info,  Node: v47 1 0,  Next: v47 0 0,  Prev: v44 1 1,  Up: History<2>

9.31 v47.1.0
============

28 May 2020

* Menu:

* Changes: Changes<16>.


File: setuptools.info,  Node: Changes<16>,  Up: v47 1 0

9.31.1 Changes
--------------

   * #2070(1): In wheel-to-egg conversion, use simple
     pkg_resources-style namespace declaration for packages that declare
     namespace_packages.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2070


File: setuptools.info,  Node: v47 0 0,  Next: v46 4 0,  Prev: v47 1 0,  Up: History<2>

9.32 v47.0.0
============

28 May 2020

* Menu:

* Breaking Changes: Breaking Changes<4>.
* Changes: Changes<17>.


File: setuptools.info,  Node: Breaking Changes<4>,  Next: Changes<17>,  Up: v47 0 0

9.32.1 Breaking Changes
-----------------------

   * #2094(1): Setuptools now actively crashes under Python 2.  Python
     3.5 or later is required.  Users of Python 2 should use
     ‘setuptools<45’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2094


File: setuptools.info,  Node: Changes<17>,  Prev: Breaking Changes<4>,  Up: v47 0 0

9.32.2 Changes
--------------

   * #1700(1): Document all supported keywords by migrating the ones
     from distutils.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1700


File: setuptools.info,  Node: v46 4 0,  Next: v46 3 1,  Prev: v47 0 0,  Up: History<2>

9.33 v46.4.0
============

16 May 2020

* Menu:

* Changes: Changes<18>.


File: setuptools.info,  Node: Changes<18>,  Up: v46 4 0

9.33.1 Changes
--------------

   * #1753(1): ‘attr:’ now extracts variables through rudimentary
     examination of the AST, thereby supporting modules with third-party
     imports.  If examining the AST fails to find the variable, ‘attr:’
     falls back to the old behavior of importing the module.  Works on
     Python 3 only.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1753


File: setuptools.info,  Node: v46 3 1,  Next: v46 3 0,  Prev: v46 4 0,  Up: History<2>

9.34 v46.3.1
============

15 May 2020

No significant changes.


File: setuptools.info,  Node: v46 3 0,  Next: v46 2 0,  Prev: v46 3 1,  Up: History<2>

9.35 v46.3.0
============

13 May 2020

* Menu:

* Changes: Changes<19>.
* Misc: Misc<16>.


File: setuptools.info,  Node: Changes<19>,  Next: Misc<16>,  Up: v46 3 0

9.35.1 Changes
--------------

   * #2089(1): Package index functionality no longer attempts to remove
     an md5 fragment from the index URL. This functionality, added for
     distribute #163(2) is no longer relevant.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2089

   (2) https://github.com/pypa/setuptools/issues/163


File: setuptools.info,  Node: Misc<16>,  Prev: Changes<19>,  Up: v46 3 0

9.35.2 Misc
-----------

   * #2041(1): Preserve file modes during pkg files copying, but clear
     read only flag for target afterwards.

   * #2105(2): Filter ‘2to3’ deprecation warnings from
     ‘TestDevelop.test_2to3_user_mode’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2041

   (2) https://github.com/pypa/setuptools/issues/2105


File: setuptools.info,  Node: v46 2 0,  Next: v46 1 3,  Prev: v46 3 0,  Up: History<2>

9.36 v46.2.0
============

10 May 2020

* Menu:

* Changes: Changes<20>.
* Documentation changes: Documentation changes<5>.
* Misc: Misc<17>.


File: setuptools.info,  Node: Changes<20>,  Next: Documentation changes<5>,  Up: v46 2 0

9.36.1 Changes
--------------

   * #2040(1): Deprecated the ‘bdist_wininst’ command.  Binary packages
     should be built as wheels instead.

   * #2062(2): Change ‘Mac OS X’ to ‘macOS’ in code.

   * #2075(3): Stop recognizing files ending with ‘.dist-info’ as
     distribution metadata.

   * #2086(4): Deprecate ‘use_2to3’ functionality.  Packagers are
     encouraged to use single-source solutions or build tool chains to
     manage conversions outside of setuptools.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2040

   (2) https://github.com/pypa/setuptools/issues/2062

   (3) https://github.com/pypa/setuptools/issues/2075

   (4) https://github.com/pypa/setuptools/issues/2086


File: setuptools.info,  Node: Documentation changes<5>,  Next: Misc<17>,  Prev: Changes<20>,  Up: v46 2 0

9.36.2 Documentation changes
----------------------------

   * #1698(1): Added documentation for ‘build_meta’ (a bare minimum, not
     completed).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1698


File: setuptools.info,  Node: Misc<17>,  Prev: Documentation changes<5>,  Up: v46 2 0

9.36.3 Misc
-----------

   * #2082(1): Filter ‘lib2to3’ ‘PendingDeprecationWarning’ and
     ‘DeprecationWarning’ in tests, because ‘lib2to3’ is deprecated in
     Python 3.9(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2082

   (2) https://bugs.python.org/issue40360


File: setuptools.info,  Node: v46 1 3,  Next: v46 1 2,  Prev: v46 2 0,  Up: History<2>

9.37 v46.1.3
============

25 Mar 2020

No significant changes.


File: setuptools.info,  Node: v46 1 2,  Next: v46 1 1,  Prev: v46 1 3,  Up: History<2>

9.38 v46.1.2
============

25 Mar 2020

* Menu:

* Misc: Misc<18>.


File: setuptools.info,  Node: Misc<18>,  Up: v46 1 2

9.38.1 Misc
-----------

   * #1458(1): Added template for reporting Python 2 incompatibilities.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1458


File: setuptools.info,  Node: v46 1 1,  Next: v46 1 0,  Prev: v46 1 2,  Up: History<2>

9.39 v46.1.1
============

21 Mar 2020

No significant changes.


File: setuptools.info,  Node: v46 1 0,  Next: v44 1 0,  Prev: v46 1 1,  Up: History<2>

9.40 v46.1.0
============

21 Mar 2020

* Menu:

* Changes: Changes<21>.
* Incorporate changes from v44.1.0;: Incorporate changes from v44 1 0.


File: setuptools.info,  Node: Changes<21>,  Next: Incorporate changes from v44 1 0,  Up: v46 1 0

9.40.1 Changes
--------------

   * #308(1): Allow version number normalization to be bypassed by
     wrapping in a ‘setuptools.sic()’ call.

   * #1424(2): Prevent keeping files mode for package_data build.  It
     may break a build if user’s package data has read only flag.

   * #1431(3): In ‘easy_install.check_site_dir’, ensure the installation
     directory exists.

   * #1563(4): In ‘pkg_resources’ prefer ‘find_spec’ (PEP 451(5)) to
     ‘find_module’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/308

   (2) https://github.com/pypa/setuptools/issues/1424

   (3) https://github.com/pypa/setuptools/issues/1431

   (4) https://github.com/pypa/setuptools/issues/1563

   (5) https://www.python.org/dev/peps/pep-0451/


File: setuptools.info,  Node: Incorporate changes from v44 1 0,  Prev: Changes<21>,  Up: v46 1 0

9.40.2 Incorporate changes from v44.1.0:
----------------------------------------

   * #1704(1): Set sys.argv[0] in setup script run by
     build_meta.__legacy__

   * #1959(2): Fix for Python 4: replace unsafe six.PY3 with six.PY2

   * #1994(3): Fixed a bug in the
     “setuptools.finalize_distribution_options” hook that lead to
     ignoring the order attribute of entry points managed by this hook.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1704

   (2) https://github.com/pypa/setuptools/issues/1959

   (3) https://github.com/pypa/setuptools/issues/1994


File: setuptools.info,  Node: v44 1 0,  Next: v46 0 0,  Prev: v46 1 0,  Up: History<2>

9.41 v44.1.0
============

21 Mar 2020

* Menu:

* Changes: Changes<22>.


File: setuptools.info,  Node: Changes<22>,  Up: v44 1 0

9.41.1 Changes
--------------

   * #1704(1): Set sys.argv[0] in setup script run by
     build_meta.__legacy__

   * #1959(2): Fix for Python 4: replace unsafe six.PY3 with six.PY2

   * #1994(3): Fixed a bug in the
     “setuptools.finalize_distribution_options” hook that lead to
     ignoring the order attribute of entry points managed by this hook.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1704

   (2) https://github.com/pypa/setuptools/issues/1959

   (3) https://github.com/pypa/setuptools/issues/1994


File: setuptools.info,  Node: v46 0 0,  Next: v45 3 0,  Prev: v44 1 0,  Up: History<2>

9.42 v46.0.0
============

08 Mar 2020

* Menu:

* Breaking Changes: Breaking Changes<5>.
* Changes: Changes<23>.
* Documentation changes: Documentation changes<6>.
* Misc: Misc<19>.


File: setuptools.info,  Node: Breaking Changes<5>,  Next: Changes<23>,  Up: v46 0 0

9.42.1 Breaking Changes
-----------------------

   * #65(1): Once again as in 3.0, removed the Features feature.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/65


File: setuptools.info,  Node: Changes<23>,  Next: Documentation changes<6>,  Prev: Breaking Changes<5>,  Up: v46 0 0

9.42.2 Changes
--------------

   * #1890(1): Fix vendored dependencies so importing
     ‘setuptools.extern.some_module’ gives the same object as
     ‘setuptools._vendor.some_module’.  This makes Metadata picklable
     again.

   * #1899(2): Test suite now fails on warnings.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1890

   (2) https://github.com/pypa/setuptools/issues/1899


File: setuptools.info,  Node: Documentation changes<6>,  Next: Misc<19>,  Prev: Changes<23>,  Up: v46 0 0

9.42.3 Documentation changes
----------------------------

   * #2011(1): Fix broken link to distutils docs on package_data

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/2011


File: setuptools.info,  Node: Misc<19>,  Prev: Documentation changes<6>,  Up: v46 0 0

9.42.4 Misc
-----------

   * #1991(1): Include pkg_resources test data in sdist, so tests can be
     executed from it.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1991


File: setuptools.info,  Node: v45 3 0,  Next: v45 2 0,  Prev: v46 0 0,  Up: History<2>

9.43 v45.3.0
============

07 Mar 2020

* Menu:

* Changes: Changes<24>.


File: setuptools.info,  Node: Changes<24>,  Up: v45 3 0

9.43.1 Changes
--------------

   * #1557(1): Deprecated eggsecutable scripts and updated docs.

   * #1904(2): Update msvc.py to use CPython 3.8.0 mechanism to find
     msvc 14+

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1557

   (2) https://github.com/pypa/setuptools/issues/1904


File: setuptools.info,  Node: v45 2 0,  Next: v45 1 0,  Prev: v45 3 0,  Up: History<2>

9.44 v45.2.0
============

08 Feb 2020

* Menu:

* Changes: Changes<25>.
* Misc: Misc<20>.


File: setuptools.info,  Node: Changes<25>,  Next: Misc<20>,  Up: v45 2 0

9.44.1 Changes
--------------

   * #1905(1): Fixed defect in _imp, introduced in 41.6.0 when the
     ‘tests’ directory is not present.

   * #1941(2): Improve editable installs with PEP 518(3) build
     isolation:

        * The ‘--user’ option is now always available.  A warning is
          issued if the user site directory is not available.

        * The error shown when the install directory is not in
          ‘PYTHONPATH’ has been turned into a warning.

   * #1981(4): Setuptools now declares its ‘tests’ and ‘docs’
     dependencies in metadata (extras).

   * #1985(5): Add support for installing scripts in environments where
     bdist_wininst is missing (i.e.  Python 3.9).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1905

   (2) https://github.com/pypa/setuptools/issues/1941

   (3) https://www.python.org/dev/peps/pep-0518/

   (4) https://github.com/pypa/setuptools/issues/1981

   (5) https://github.com/pypa/setuptools/issues/1985


File: setuptools.info,  Node: Misc<20>,  Prev: Changes<25>,  Up: v45 2 0

9.44.2 Misc
-----------

   * #1968(1): Add flake8-2020 to check for misuse of sys.version or
     sys.version_info.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1968


File: setuptools.info,  Node: v45 1 0,  Next: v45 0 0,  Prev: v45 2 0,  Up: History<2>

9.45 v45.1.0
============

19 Jan 2020

* Menu:

* Changes: Changes<26>.


File: setuptools.info,  Node: Changes<26>,  Up: v45 1 0

9.45.1 Changes
--------------

   * #1458(1): Add minimum sunset date and preamble to Python 2 warning.

   * #1704(2): Set sys.argv[0] in setup script run by
     build_meta.__legacy__

   * #1974(3): Add Python 3 Only Trove Classifier and remove universal
     wheel declaration for more complete transition from Python 2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1458

   (2) https://github.com/pypa/setuptools/issues/1704

   (3) https://github.com/pypa/setuptools/issues/1974


File: setuptools.info,  Node: v45 0 0,  Next: v44 0 0,  Prev: v45 1 0,  Up: History<2>

9.46 v45.0.0
============

11 Jan 2020

* Menu:

* Breaking Changes: Breaking Changes<6>.
* Changes: Changes<27>.


File: setuptools.info,  Node: Breaking Changes<6>,  Next: Changes<27>,  Up: v45 0 0

9.46.1 Breaking Changes
-----------------------

   * #1458(1): Drop support for Python 2.  Setuptools now requires
     Python 3.5 or later.  Install setuptools using pip >=9 or pin to
     Setuptools <45 to maintain 2.7 support.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1458


File: setuptools.info,  Node: Changes<27>,  Prev: Breaking Changes<6>,  Up: v45 0 0

9.46.2 Changes
--------------

   * #1959(1): Fix for Python 4: replace unsafe six.PY3 with six.PY2

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1959


File: setuptools.info,  Node: v44 0 0,  Next: v43 0 0,  Prev: v45 0 0,  Up: History<2>

9.47 v44.0.0
============

01 Jan 2020

* Menu:

* Breaking Changes: Breaking Changes<7>.


File: setuptools.info,  Node: Breaking Changes<7>,  Up: v44 0 0

9.47.1 Breaking Changes
-----------------------

   * #1908(1): Drop support for Python 3.4.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1908


File: setuptools.info,  Node: v43 0 0,  Next: v42 0 2,  Prev: v44 0 0,  Up: History<2>

9.48 v43.0.0
============

31 Dec 2019

* Menu:

* Breaking Changes: Breaking Changes<8>.
* Changes: Changes<28>.


File: setuptools.info,  Node: Breaking Changes<8>,  Next: Changes<28>,  Up: v43 0 0

9.48.1 Breaking Changes
-----------------------

   * #1634(1): Include ‘pyproject.toml’ in source distribution by
     default.  Projects relying on the previous behavior where
     ‘pyproject.toml’ was excluded by default should stop relying on
     that behavior or add ‘exclude pyproject.toml’ to their MANIFEST.in
     file.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1634


File: setuptools.info,  Node: Changes<28>,  Prev: Breaking Changes<8>,  Up: v43 0 0

9.48.2 Changes
--------------

   * #1927(1): Setuptools once again declares ‘setuptools’ in the
     ‘build-system.requires’ and adds PEP 517(2) build support by
     declaring itself as the ‘build-backend’.  It additionally specifies
     ‘build-system.backend-path’ to rely on itself for those builders
     that support it.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1927

   (2) https://www.python.org/dev/peps/pep-0517/


File: setuptools.info,  Node: v42 0 2,  Next: v42 0 1,  Prev: v43 0 0,  Up: History<2>

9.49 v42.0.2
============

01 Dec 2019

* Menu:

* Changes: Changes<29>.


File: setuptools.info,  Node: Changes<29>,  Up: v42 0 2

9.49.1 Changes
--------------

   * #1921(1): Fix support for easy_install’s ‘find-links’ option in
     ‘setup.cfg’.

   * #1922(2): Build dependencies (setup_requires and tests_require) now
     install transitive dependencies indicated by extras.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1921

   (2) https://github.com/pypa/setuptools/issues/1922


File: setuptools.info,  Node: v42 0 1,  Next: v42 0 0,  Prev: v42 0 2,  Up: History<2>

9.50 v42.0.1
============

25 Nov 2019

* Menu:

* Changes: Changes<30>.


File: setuptools.info,  Node: Changes<30>,  Up: v42 0 1

9.50.1 Changes
--------------

   * #1918(1): Fix regression in handling wheels compatibility tags.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1918


File: setuptools.info,  Node: v42 0 0,  Next: v41 6 0,  Prev: v42 0 1,  Up: History<2>

9.51 v42.0.0
============

23 Nov 2019

* Menu:

* Breaking Changes: Breaking Changes<9>.
* Changes: Changes<31>.


File: setuptools.info,  Node: Breaking Changes<9>,  Next: Changes<31>,  Up: v42 0 0

9.51.1 Breaking Changes
-----------------------

   * 
     #1830(1), #1909(2): Mark the easy_install script and setuptools command as deprecated, and use pip(3) when available to fetch/build wheels for missing ‘setup_requires’/‘tests_require’ requirements, with the following differences in behavior:

             * support for ‘python_requires’

             * better support for wheels (proper handling of priority
               with respect to PEP 425(4) tags)

             * PEP 517(5)/518 support

             * eggs are not supported

             * no support for the ‘allow_hosts’ easy_install option
               (‘index_url’/‘find_links’ are still honored)

             * pip environment variables are honored (and take
               precedence over easy_install options)

   * #1898(6): Removed the “upload” and “register” commands in favor of
     twine(7).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1830

   (2) https://github.com/pypa/setuptools/issues/1909

   (3) https://pip.pypa.io/en/stable/

   (4) https://www.python.org/dev/peps/pep-0425/

   (5) https://www.python.org/dev/peps/pep-0517/

   (6) https://github.com/pypa/setuptools/issues/1898

   (7) https://pypi.org/p/twine


File: setuptools.info,  Node: Changes<31>,  Prev: Breaking Changes<9>,  Up: v42 0 0

9.51.2 Changes
--------------

   * #1767(1): Add support for the ‘license_files’ option in ‘setup.cfg’
     to automatically include multiple license files in a source
     distribution.

   * #1829(2): Update handling of wheels compatibility tags: * add
     support for manylinux2010 * fix use of removed ‘m’ ABI flag in
     Python 3.8 on Windows

   * #1861(3): Fix empty namespace package installation from wheel.

   * #1877(4): Setuptools now exposes a new entry point hook
     “setuptools.finalize_distribution_options”, enabling plugins like
     setuptools_scm(5) to configure options on the distribution at
     finalization time.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1767

   (2) https://github.com/pypa/setuptools/issues/1829

   (3) https://github.com/pypa/setuptools/issues/1861

   (4) https://github.com/pypa/setuptools/issues/1877

   (5) https://pypi.org/project/setuptools_scm


File: setuptools.info,  Node: v41 6 0,  Next: v41 5 1,  Prev: v42 0 0,  Up: History<2>

9.52 v41.6.0
============

29 Oct 2019

* Menu:

* Changes: Changes<32>.


File: setuptools.info,  Node: Changes<32>,  Up: v41 6 0

9.52.1 Changes
--------------

   * #479(1): Replace usage of deprecated ‘imp’ module with local
     re-implementation in ‘setuptools._imp’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/479


File: setuptools.info,  Node: v41 5 1,  Next: v41 5 0,  Prev: v41 6 0,  Up: History<2>

9.53 v41.5.1
============

28 Oct 2019

* Menu:

* Changes: Changes<33>.


File: setuptools.info,  Node: Changes<33>,  Up: v41 5 1

9.53.1 Changes
--------------

   * #1891(1): Fix code for detecting Visual Studio’s version on Windows
     under Python 2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1891


File: setuptools.info,  Node: v41 5 0,  Next: v41 4 0,  Prev: v41 5 1,  Up: History<2>

9.54 v41.5.0
============

27 Oct 2019

* Menu:

* Changes: Changes<34>.
* Documentation changes: Documentation changes<7>.
* Misc: Misc<21>.


File: setuptools.info,  Node: Changes<34>,  Next: Documentation changes<7>,  Up: v41 5 0

9.54.1 Changes
--------------

   * #1811(1): Improve Visual C++ 14.X support, mainly for Visual Studio
     2017 and 2019.

   * #1814(2): Fix ‘pkg_resources.Requirement’ hash/equality
     implementation: take PEP 508(3) direct URL into account.

   * #1824(4): Fix tests when running under ‘python3.10’.

   * #1878(5): Formally deprecated the ‘test’ command, with the
     recommendation that users migrate to ‘tox’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1811

   (2) https://github.com/pypa/setuptools/issues/1814

   (3) https://www.python.org/dev/peps/pep-0508/

   (4) https://github.com/pypa/setuptools/issues/1824

   (5) https://github.com/pypa/setuptools/issues/1878


File: setuptools.info,  Node: Documentation changes<7>,  Next: Misc<21>,  Prev: Changes<34>,  Up: v41 5 0

9.54.2 Documentation changes
----------------------------

   * #1860(1): Update documentation to mention the egg format is not
     supported by pip and dependency links support was dropped starting
     with pip 19.0.

   * #1862(2): Drop ez_setup documentation: deprecated for some time
     (last updated in 2016), and still relying on easy_install
     (deprecated too).

   * #1868(3): Drop most documentation references to (deprecated)
     EasyInstall.

   * #1884(4): Added a trove classifier to document support for Python
     3.8.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1860

   (2) https://github.com/pypa/setuptools/issues/1862

   (3) https://github.com/pypa/setuptools/issues/1868

   (4) https://github.com/pypa/setuptools/issues/1884


File: setuptools.info,  Node: Misc<21>,  Prev: Documentation changes<7>,  Up: v41 5 0

9.54.3 Misc
-----------

   * #1886(1): Added Python 3.8 release to the Travis test matrix.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1886


File: setuptools.info,  Node: v41 4 0,  Next: v41 3 0,  Prev: v41 5 0,  Up: History<2>

9.55 v41.4.0
============

06 Oct 2019

* Menu:

* Changes: Changes<35>.


File: setuptools.info,  Node: Changes<35>,  Up: v41 4 0

9.55.1 Changes
--------------

   * #1847(1): In declarative config, now traps errors when invalid
     ‘python_requires’ values are supplied.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1847


File: setuptools.info,  Node: v41 3 0,  Next: v41 2 0,  Prev: v41 4 0,  Up: History<2>

9.56 v41.3.0
============

06 Oct 2019

* Menu:

* Changes: Changes<36>.
* Misc: Misc<22>.


File: setuptools.info,  Node: Changes<36>,  Next: Misc<22>,  Up: v41 3 0

9.56.1 Changes
--------------

   * #1690(1): When storing extras, rely on OrderedSet to retain order
     of extras as indicated by the packager, which will also be
     deterministic on Python 2.7 (with PYTHONHASHSEED unset) and Python
     3.6+.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1690


File: setuptools.info,  Node: Misc<22>,  Prev: Changes<36>,  Up: v41 3 0

9.56.2 Misc
-----------

   * #1858(1): Fixed failing integration test triggered by
     ‘long_description_content_type’ in packaging.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1858


File: setuptools.info,  Node: v41 2 0,  Next: v41 1 0,  Prev: v41 3 0,  Up: History<2>

9.57 v41.2.0
============

21 Aug 2019

* Menu:

* Changes: Changes<37>.
* Misc: Misc<23>.


File: setuptools.info,  Node: Changes<37>,  Next: Misc<23>,  Up: v41 2 0

9.57.1 Changes
--------------

   * #479(1): Remove some usage of the deprecated ‘imp’ module.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/479


File: setuptools.info,  Node: Misc<23>,  Prev: Changes<37>,  Up: v41 2 0

9.57.2 Misc
-----------

   * #1565(1): Changed html_sidebars from string to list of string as
     per ‘https://www.sphinx-doc.org/en/master/changes.html#id58’

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1565


File: setuptools.info,  Node: v41 1 0,  Next: v41 0 1,  Prev: v41 2 0,  Up: History<2>

9.58 v41.1.0
============

13 Aug 2019

* Menu:

* Misc: Misc<24>.
* Documentation changes: Documentation changes<8>.


File: setuptools.info,  Node: Misc<24>,  Next: Documentation changes<8>,  Up: v41 1 0

9.58.1 Misc
-----------

   * #1697(1): Moved most of the constants from setup.py to setup.cfg

   * #1749(2): Fixed issue with the PEP 517(3) backend where building a
     source distribution would fail if any tarball existed in the
     destination directory.

   * #1750(4): Fixed an issue with PEP 517(5) backend where wheel builds
     would fail if the destination directory did not already exist.

   * #1756(6): Force metadata-version >= 1.2.  when project urls are
     present.

   * #1769(7): Improve ‘package_data’ check: ensure the dictionary
     values are lists/tuples of strings.

   * #1788(8): Changed compatibility fallback logic for ‘html.unescape’
     to avoid accessing ‘HTMLParser.unescape’ when not necessary.
     ‘HTMLParser.unescape’ is deprecated and will be removed in Python
     3.9.

   * #1790(9): Added the file path to the error message when a
     ‘UnicodeDecodeError’ occurs while reading a metadata file.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1697

   (2) https://github.com/pypa/setuptools/issues/1749

   (3) https://www.python.org/dev/peps/pep-0517/

   (4) https://github.com/pypa/setuptools/issues/1750

   (5) https://www.python.org/dev/peps/pep-0517/

   (6) https://github.com/pypa/setuptools/issues/1756

   (7) https://github.com/pypa/setuptools/issues/1769

   (8) https://github.com/pypa/setuptools/issues/1788

   (9) https://github.com/pypa/setuptools/issues/1790


File: setuptools.info,  Node: Documentation changes<8>,  Prev: Misc<24>,  Up: v41 1 0

9.58.2 Documentation changes
----------------------------

   * #1776(1): Use license classifiers rather than the license field.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1776


File: setuptools.info,  Node: v41 0 1,  Next: v41 0 0,  Prev: v41 1 0,  Up: History<2>

9.59 v41.0.1
============

22 Apr 2019

* Menu:

* Changes: Changes<38>.


File: setuptools.info,  Node: Changes<38>,  Up: v41 0 1

9.59.1 Changes
--------------

   * #1671(1): Fixed issue with the PEP 517(2) backend that prevented
     building a wheel when the ‘dist/’ directory contained existing
     ‘.whl’ files.

   * #1709(3): In test.paths_on_python_path, avoid adding unnecessary
     duplicates to the PYTHONPATH.

   * #1741(4): In package_index, now honor “current directory” during a
     checkout of git and hg repositories under Windows

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1671

   (2) https://www.python.org/dev/peps/pep-0517/

   (3) https://github.com/pypa/setuptools/issues/1709

   (4) https://github.com/pypa/setuptools/issues/1741


File: setuptools.info,  Node: v41 0 0,  Next: v40 9 0,  Prev: v41 0 1,  Up: History<2>

9.60 v41.0.0
============

05 Apr 2019

* Menu:

* Breaking Changes: Breaking Changes<10>.


File: setuptools.info,  Node: Breaking Changes<10>,  Up: v41 0 0

9.60.1 Breaking Changes
-----------------------

   * #1735(1): When parsing setup.cfg files, setuptools now requires the
     files to be encoded as UTF-8.  Any other encoding will lead to a
     UnicodeDecodeError.  This change removes support for specifying an
     encoding using a ‘coding: ‘ directive in the header of the file, a
     feature that was introduces in 40.7.  Given the recent release of
     the aforementioned feature, it is assumed that few if any projects
     are utilizing the feature to specify an encoding other than UTF-8.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1735


File: setuptools.info,  Node: v40 9 0,  Next: v40 8 0,  Prev: v41 0 0,  Up: History<2>

9.61 v40.9.0
============

03 Apr 2019

* Menu:

* Changes: Changes<39>.
* Documentation changes: Documentation changes<9>.


File: setuptools.info,  Node: Changes<39>,  Next: Documentation changes<9>,  Up: v40 9 0

9.61.1 Changes
--------------

   * #1675(1): Added support for ‘setup.cfg’-only projects when using
     the ‘setuptools.build_meta’ backend.  Projects that have enabled
     PEP 517(2) no longer need to have a ‘setup.py’ and can use the
     purely declarative ‘setup.cfg’ configuration file instead.

   * #1720(3): Added support for
     ‘pkg_resources.parse_requirements’-style requirements in
     ‘setup_requires’ when ‘setup.py’ is invoked from the
     ‘setuptools.build_meta’ build backend.

   * #1664(4): Added the path to the ‘PKG-INFO’ or ‘METADATA’ file in
     the exception text when the ‘Version:’ header can’t be found.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1675

   (2) https://www.python.org/dev/peps/pep-0517/

   (3) https://github.com/pypa/setuptools/issues/1720

   (4) https://github.com/pypa/setuptools/issues/1664


File: setuptools.info,  Node: Documentation changes<9>,  Prev: Changes<39>,  Up: v40 9 0

9.61.2 Documentation changes
----------------------------

   * #1705(1): Removed some placeholder documentation sections referring
     to deprecated features.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1705


File: setuptools.info,  Node: v40 8 0,  Next: v40 7 3,  Prev: v40 9 0,  Up: History<2>

9.62 v40.8.0
============

05 Feb 2019

* Menu:

* Changes: Changes<40>.


File: setuptools.info,  Node: Changes<40>,  Up: v40 8 0

9.62.1 Changes
--------------

   * #1652(1): Added the ‘build_meta:__legacy__’ backend, a
     “compatibility mode” PEP 517(2) backend that can be used as the
     default when ‘build-backend’ is left unspecified in
     ‘pyproject.toml’.

   * #1635(3): Resource paths are passed to
     ‘pkg_resources.resource_string’ and similar no longer accept paths
     that traverse parents, that begin with a leading ‘/’.  Violations
     of this expectation raise DeprecationWarnings and will become
     errors.  Additionally, any paths that are absolute on Windows are
     strictly disallowed and will raise ValueErrors.

   * #1536(4): ‘setuptools’ will now automatically include licenses if
     ‘setup.cfg’ contains a ‘license_file’ attribute, unless this file
     is manually excluded inside ‘MANIFEST.in’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1652

   (2) https://www.python.org/dev/peps/pep-0517/

   (3) https://github.com/pypa/setuptools/issues/1635

   (4) https://github.com/pypa/setuptools/issues/1536


File: setuptools.info,  Node: v40 7 3,  Next: v40 7 2,  Prev: v40 8 0,  Up: History<2>

9.63 v40.7.3
============

03 Feb 2019

* Menu:

* Changes: Changes<41>.


File: setuptools.info,  Node: Changes<41>,  Up: v40 7 3

9.63.1 Changes
--------------

   * #1670(1): In package_index, revert to using a copy of splituser
     from Python 3.8.  Attempts to use ‘urllib.parse.urlparse’ led to
     problems as reported in #1663(2) and #1668(3).  This change serves
     as an alternative to #1499(4) and fixes #1668(5).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1670

   (2) https://github.com/pypa/setuptools/issues/1663

   (3) https://github.com/pypa/setuptools/issues/1668

   (4) https://github.com/pypa/setuptools/issues/1499

   (5) https://github.com/pypa/setuptools/issues/1668


File: setuptools.info,  Node: v40 7 2,  Next: v40 7 1,  Prev: v40 7 3,  Up: History<2>

9.64 v40.7.2
============

31 Jan 2019

* Menu:

* Changes: Changes<42>.


File: setuptools.info,  Node: Changes<42>,  Up: v40 7 2

9.64.1 Changes
--------------

   * #1666(1): Restore port in URL handling in package_index.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1666


File: setuptools.info,  Node: v40 7 1,  Next: v40 7 0,  Prev: v40 7 2,  Up: History<2>

9.65 v40.7.1
============

28 Jan 2019

* Menu:

* Changes: Changes<43>.


File: setuptools.info,  Node: Changes<43>,  Up: v40 7 1

9.65.1 Changes
--------------

   * #1660(1): On Python 2, when reading config files, downcast options
     from text to bytes to satisfy distutils expectations.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1660


File: setuptools.info,  Node: v40 7 0,  Next: v40 6 3,  Prev: v40 7 1,  Up: History<2>

9.66 v40.7.0
============

27 Jan 2019

* Menu:

* Breaking Changes: Breaking Changes<11>.
* Changes: Changes<44>.


File: setuptools.info,  Node: Breaking Changes<11>,  Next: Changes<44>,  Up: v40 7 0

9.66.1 Breaking Changes
-----------------------

   * #1551(1): File inputs for the ‘license’ field in ‘setup.cfg’ files
     now explicitly raise an error.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1551


File: setuptools.info,  Node: Changes<44>,  Prev: Breaking Changes<11>,  Up: v40 7 0

9.66.2 Changes
--------------

   * #1180(1): Add support for non-ASCII in setup.cfg (#1062(2)).  Add
     support for native strings on some parameters (#1136(3)).

   * #1499(4): ‘setuptools.package_index’ no longer relies on the
     deprecated ‘urllib.parse.splituser’ per Python #27485(5).

   * #1544(6): Added tests for PackageIndex.download (for git URLs).

   * #1625(7): In PEP 517(8) build_meta builder, ensure that sdists are
     built as gztar per the spec.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1180

   (2) https://github.com/pypa/setuptools/issues/1062

   (3) https://github.com/pypa/setuptools/issues/1136

   (4) https://github.com/pypa/setuptools/issues/1499

   (5) http://bugs.python.org/issue27485

   (6) https://github.com/pypa/setuptools/issues/1544

   (7) https://github.com/pypa/setuptools/issues/1625

   (8) https://www.python.org/dev/peps/pep-0517/


File: setuptools.info,  Node: v40 6 3,  Next: v40 6 2,  Prev: v40 7 0,  Up: History<2>

9.67 v40.6.3
============

11 Dec 2018

* Menu:

* Changes: Changes<45>.


File: setuptools.info,  Node: Changes<45>,  Up: v40 6 3

9.67.1 Changes
--------------

   * #1594(1): PEP 517(2) backend no longer declares setuptools as a
     dependency as it can be assumed.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1594

   (2) https://www.python.org/dev/peps/pep-0517/


File: setuptools.info,  Node: v40 6 2,  Next: v40 6 1,  Prev: v40 6 3,  Up: History<2>

9.68 v40.6.2
============

13 Nov 2018

* Menu:

* Changes: Changes<46>.


File: setuptools.info,  Node: Changes<46>,  Up: v40 6 2

9.68.1 Changes
--------------

   * #1592(1): Fix invalid dependency on external six module (instead of
     vendored version).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1592


File: setuptools.info,  Node: v40 6 1,  Next: v40 6 0,  Prev: v40 6 2,  Up: History<2>

9.69 v40.6.1
============

12 Nov 2018

* Menu:

* Changes: Changes<47>.


File: setuptools.info,  Node: Changes<47>,  Up: v40 6 1

9.69.1 Changes
--------------

   * #1590(1): Fixed regression where packages without ‘author’ or
     ‘author_email’ fields generated malformed package metadata.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1590


File: setuptools.info,  Node: v40 6 0,  Next: v40 5 0,  Prev: v40 6 1,  Up: History<2>

9.70 v40.6.0
============

12 Nov 2018

* Menu:

* Deprecations::
* Changes: Changes<48>.
* Documentation changes: Documentation changes<10>.
* Misc: Misc<25>.


File: setuptools.info,  Node: Deprecations,  Next: Changes<48>,  Up: v40 6 0

9.70.1 Deprecations
-------------------

   * #1541(1): Officially deprecated the ‘requires’ parameter in
     ‘setup()’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1541


File: setuptools.info,  Node: Changes<48>,  Next: Documentation changes<10>,  Prev: Deprecations,  Up: v40 6 0

9.70.2 Changes
--------------

   * #1519(1): In ‘pkg_resources.normalize_path’, additional path
     normalization is now performed to ensure path values to a directory
     is always the same, preventing false positives when checking
     scripts have a consistent prefix to set up on Windows.

   * #1545(2): Changed the warning class of all deprecation warnings;
     deprecation warning classes are no longer derived from
     ‘DeprecationWarning’ and are thus visible by default.

   * #1554(3): ‘build_meta.build_sdist’ now includes ‘setup.py’ in
     source distributions by default.

   * #1576(4): Started monkey-patching ‘get_metadata_version’ and
     ‘read_pkg_file’ onto ‘distutils.DistributionMetadata’ to retain the
     correct version on the ‘PKG-INFO’ file in the (deprecated) ‘upload’
     command.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1519

   (2) https://github.com/pypa/setuptools/issues/1545

   (3) https://github.com/pypa/setuptools/issues/1554

   (4) https://github.com/pypa/setuptools/issues/1576


File: setuptools.info,  Node: Documentation changes<10>,  Next: Misc<25>,  Prev: Changes<48>,  Up: v40 6 0

9.70.3 Documentation changes
----------------------------

   * #1395(1): Changed Pyrex references to Cython in the documentation.

   * #1456(2): Documented that the ‘rpmbuild’ packages is required for
     the ‘bdist_rpm’ command.

   * #1537(3): Documented how to use ‘setup.cfg’ for ‘src/ layouts’

   * #1539(4): Added minimum version column in ‘setup.cfg’ metadata
     table.

   * #1552(5): Fixed a minor typo in the python 2/3 compatibility
     documentation.

   * #1553(6): Updated installation instructions to point to ‘pip
     install’ instead of ‘ez_setup.py’.

   * #1560(7): Updated ‘setuptools’ distribution documentation to remove
     some outdated information.

   * #1564(8): Documented ‘setup.cfg’ minimum version for version and
     project_urls.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1395

   (2) https://github.com/pypa/setuptools/issues/1456

   (3) https://github.com/pypa/setuptools/issues/1537

   (4) https://github.com/pypa/setuptools/issues/1539

   (5) https://github.com/pypa/setuptools/issues/1552

   (6) https://github.com/pypa/setuptools/issues/1553

   (7) https://github.com/pypa/setuptools/issues/1560

   (8) https://github.com/pypa/setuptools/issues/1564


File: setuptools.info,  Node: Misc<25>,  Prev: Documentation changes<10>,  Up: v40 6 0

9.70.4 Misc
-----------

   * #1533(1): Restricted the ‘recursive-include setuptools/_vendor’ to
     contain only .py and .txt files.

   * #1572(2): Added the ‘concurrent.futures’ backport ‘futures’ to the
     Python 2.7 test suite requirements.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1533

   (2) https://github.com/pypa/setuptools/issues/1572


File: setuptools.info,  Node: v40 5 0,  Next: v40 4 3,  Prev: v40 6 0,  Up: History<2>

9.71 v40.5.0
============

26 Oct 2018

* Menu:

* Changes: Changes<49>.
* Documentation changes: Documentation changes<11>.


File: setuptools.info,  Node: Changes<49>,  Next: Documentation changes<11>,  Up: v40 5 0

9.71.1 Changes
--------------

   * #1335(1): In ‘pkg_resources.normalize_path’, fix issue on Cygwin
     when cwd contains symlinks.

   * #1502(2): Deprecated support for downloads from Subversion in
     package_index/easy_install.

   * #1517(3): Dropped use of six.u in favor of ‘u""’ literals.

   * #1520(4): Added support for ‘data_files’ in ‘setup.cfg’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1335

   (2) https://github.com/pypa/setuptools/issues/1502

   (3) https://github.com/pypa/setuptools/issues/1517

   (4) https://github.com/pypa/setuptools/issues/1520


File: setuptools.info,  Node: Documentation changes<11>,  Prev: Changes<49>,  Up: v40 5 0

9.71.2 Documentation changes
----------------------------

   * #1525(1): Fixed rendering of the deprecation warning in
     easy_install doc.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1525


File: setuptools.info,  Node: v40 4 3,  Next: v40 4 2,  Prev: v40 5 0,  Up: History<2>

9.72 v40.4.3
============

23 Sep 2018

* Menu:

* Changes: Changes<50>.


File: setuptools.info,  Node: Changes<50>,  Up: v40 4 3

9.72.1 Changes
--------------

   * #1480(1): Bump vendored pyparsing in pkg_resources to 2.2.1.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1480


File: setuptools.info,  Node: v40 4 2,  Next: v40 4 1,  Prev: v40 4 3,  Up: History<2>

9.73 v40.4.2
============

21 Sep 2018

* Menu:

* Misc: Misc<26>.


File: setuptools.info,  Node: Misc<26>,  Up: v40 4 2

9.73.1 Misc
-----------

   * #1497(1): Updated gitignore in repo.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1497


File: setuptools.info,  Node: v40 4 1,  Next: v40 4 0,  Prev: v40 4 2,  Up: History<2>

9.74 v40.4.1
============

18 Sep 2018

* Menu:

* Changes: Changes<51>.


File: setuptools.info,  Node: Changes<51>,  Up: v40 4 1

9.74.1 Changes
--------------

   * #1480(1): Bump vendored pyparsing to 2.2.1.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1480


File: setuptools.info,  Node: v40 4 0,  Next: v40 3 0,  Prev: v40 4 1,  Up: History<2>

9.75 v40.4.0
============

18 Sep 2018

* Menu:

* Changes: Changes<52>.


File: setuptools.info,  Node: Changes<52>,  Up: v40 4 0

9.75.1 Changes
--------------

   * #1481(1): Join the sdist ‘--dist-dir’ and the ‘build_meta’ sdist
     directory argument to point to the same target (meaning the build
     frontend no longer needs to clean manually the dist dir to avoid
     multiple sdist presence, and setuptools no longer needs to handle
     conflicts between the two).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1481


File: setuptools.info,  Node: v40 3 0,  Next: v40 2 0,  Prev: v40 4 0,  Up: History<2>

9.76 v40.3.0
============

16 Sep 2018

* Menu:

* Changes: Changes<53>.
* Misc: Misc<27>.


File: setuptools.info,  Node: Changes<53>,  Next: Misc<27>,  Up: v40 3 0

9.76.1 Changes
--------------

   * #1402(1): Fixed a bug with namespace packages under Python 3.6 when
     one package in current directory hides another which is installed.

   * #1427(2): Set timestamp of ‘.egg-info’ directory whenever
     ‘egg_info’ command is run.

   * #1474(3): ‘build_meta.get_requires_for_build_sdist’ now does not
     include the ‘wheel’ package anymore.

   * #1486(4): Suppress warnings in pkg_resources.handle_ns.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1402

   (2) https://github.com/pypa/setuptools/issues/1427

   (3) https://github.com/pypa/setuptools/issues/1474

   (4) https://github.com/pypa/setuptools/issues/1486


File: setuptools.info,  Node: Misc<27>,  Prev: Changes<53>,  Up: v40 3 0

9.76.2 Misc
-----------

   * #1479(1): Remove internal use of six.binary_type.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1479


File: setuptools.info,  Node: v40 2 0,  Next: v40 1 1,  Prev: v40 3 0,  Up: History<2>

9.77 v40.2.0
============

21 Aug 2018

* Menu:

* Changes: Changes<54>.


File: setuptools.info,  Node: Changes<54>,  Up: v40 2 0

9.77.1 Changes
--------------

   * #1466(1): Fix handling of Unicode arguments in PEP 517(2) backend

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1466

   (2) https://www.python.org/dev/peps/pep-0517/


File: setuptools.info,  Node: v40 1 1,  Next: v40 1 0,  Prev: v40 2 0,  Up: History<2>

9.78 v40.1.1
============

21 Aug 2018

* Menu:

* Changes: Changes<55>.


File: setuptools.info,  Node: Changes<55>,  Up: v40 1 1

9.78.1 Changes
--------------

   * #1465(1): Fix regression with ‘egg_info’ command when tagging is
     used.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1465


File: setuptools.info,  Node: v40 1 0,  Next: v40 0 0,  Prev: v40 1 1,  Up: History<2>

9.79 v40.1.0
============

17 Aug 2018

* Menu:

* Changes: Changes<56>.
* Misc: Misc<28>.


File: setuptools.info,  Node: Changes<56>,  Next: Misc<28>,  Up: v40 1 0

9.79.1 Changes
--------------

   * #1410(1): Deprecated ‘upload’ and ‘register’ commands.

   * #1312(2): Introduced find_namespace_packages() to find PEP 420(3)
     namespace packages.

   * #1420(4): Added find_namespace: directive to config parser.

   * #1418(5): Solved race in when creating egg cache directories.

   * #1450(6): Upgraded vendored PyParsing from 2.1.10 to 2.2.0.

   * #1451(7): Upgraded vendored appdirs from 1.4.0 to 1.4.3.

   * #1388(8): Fixed “Microsoft Visual C++ Build Tools” link in
     exception when Visual C++ not found.

   * #1389(9): Added support for scripts which have unicode content.

   * #1416(10): Moved several Python version checks over to using
     ‘six.PY2’ and ‘six.PY3’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1410

   (2) https://github.com/pypa/setuptools/issues/1312

   (3) https://www.python.org/dev/peps/pep-0420/

   (4) https://github.com/pypa/setuptools/issues/1420

   (5) https://github.com/pypa/setuptools/issues/1418

   (6) https://github.com/pypa/setuptools/issues/1450

   (7) https://github.com/pypa/setuptools/issues/1451

   (8) https://github.com/pypa/setuptools/issues/1388

   (9) https://github.com/pypa/setuptools/issues/1389

   (10) https://github.com/pypa/setuptools/issues/1416


File: setuptools.info,  Node: Misc<28>,  Prev: Changes<56>,  Up: v40 1 0

9.79.2 Misc
-----------

   * #1441(1): Removed spurious executable permissions from files that
     don’t need them.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1441


File: setuptools.info,  Node: v40 0 0,  Next: v39 2 0,  Prev: v40 1 0,  Up: History<2>

9.80 v40.0.0
============

09 Jul 2018

* Menu:

* Breaking Changes: Breaking Changes<12>.
* Changes: Changes<57>.
* Documentation changes: Documentation changes<12>.
* Misc: Misc<29>.


File: setuptools.info,  Node: Breaking Changes<12>,  Next: Changes<57>,  Up: v40 0 0

9.80.1 Breaking Changes
-----------------------

   * #1342(1): Drop support for Python 3.3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1342


File: setuptools.info,  Node: Changes<57>,  Next: Documentation changes<12>,  Prev: Breaking Changes<12>,  Up: v40 0 0

9.80.2 Changes
--------------

   * #1366(1): In package_index, fixed handling of encoded entities in
     URLs.

   * #1383(2): In pkg_resources VendorImporter, avoid removing packages
     imported from the root.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1366

   (2) https://github.com/pypa/setuptools/issues/1383


File: setuptools.info,  Node: Documentation changes<12>,  Next: Misc<29>,  Prev: Changes<57>,  Up: v40 0 0

9.80.3 Documentation changes
----------------------------

   * #1379(1): Minor doc fixes after actually using the new release
     process.

   * #1385(2): Removed section on non-package data files.

   * #1403(3): Fix developer’s guide.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1379

   (2) https://github.com/pypa/setuptools/issues/1385

   (3) https://github.com/pypa/setuptools/issues/1403


File: setuptools.info,  Node: Misc<29>,  Prev: Documentation changes<12>,  Up: v40 0 0

9.80.4 Misc
-----------

   * #1404(1): Fix PEP 518(2) configuration: set build requirements in
     ‘pyproject.toml’ to ‘["wheel"]’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1404

   (2) https://www.python.org/dev/peps/pep-0518/


File: setuptools.info,  Node: v39 2 0,  Next: v39 1 0,  Prev: v40 0 0,  Up: History<2>

9.81 v39.2.0
============

19 May 2018

* Menu:

* Changes: Changes<58>.
* Documentation changes: Documentation changes<13>.
* Misc: Misc<30>.


File: setuptools.info,  Node: Changes<58>,  Next: Documentation changes<13>,  Up: v39 2 0

9.81.1 Changes
--------------

   * #1359(1): Support using “file:” to load a PEP 440(2)-compliant
     package version from a text file.

   * #1360(3): Fixed issue with a mismatch between the name of the
     package and the name of the .dist-info file in wheel files

   * #1364(4): Add ‘__dir__()’ implementation to
     ‘pkg_resources.Distribution()’ that includes the attributes in the
     ‘_provider’ instance variable.

   * #1365(5): Take the package_dir option into account when loading the
     version from a module attribute.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1359

   (2) https://www.python.org/dev/peps/pep-0440/

   (3) https://github.com/pypa/setuptools/issues/1360

   (4) https://github.com/pypa/setuptools/issues/1364

   (5) https://github.com/pypa/setuptools/issues/1365


File: setuptools.info,  Node: Documentation changes<13>,  Next: Misc<30>,  Prev: Changes<58>,  Up: v39 2 0

9.81.2 Documentation changes
----------------------------

   * #1353(1): Added coverage badge to README.

   * #1356(2): Made small fixes to the developer guide documentation.

   * #1357(3): Fixed warnings in documentation builds and started
     enforcing that the docs build without warnings in tox.

   * #1376(4): Updated release process docs.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1353

   (2) https://github.com/pypa/setuptools/issues/1356

   (3) https://github.com/pypa/setuptools/issues/1357

   (4) https://github.com/pypa/setuptools/issues/1376


File: setuptools.info,  Node: Misc<30>,  Prev: Documentation changes<13>,  Up: v39 2 0

9.81.3 Misc
-----------

   * #1343(1): The ‘setuptools’ specific
     ‘long_description_content_type’, ‘project_urls’ and
     ‘provides_extras’ fields are now set consistently after any
     ‘distutils’ ‘setup_keywords’ calls, allowing them to override
     values.

   * #1352(2): Added ‘tox’ environment for documentation builds.

   * #1354(3): Added ‘towncrier’ for changelog management.

   * #1355(4): Add PR template.

   * #1368(5): Fixed tests which failed without network connectivity.

   * #1369(6): Added unit tests for PEP 425(7) compatibility tags
     support.

   * #1372(8): Stop testing Python 3.3 in Travis CI, now that the latest
     version of ‘wheel’ no longer installs on it.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1343

   (2) https://github.com/pypa/setuptools/issues/1352

   (3) https://github.com/pypa/setuptools/issues/1354

   (4) https://github.com/pypa/setuptools/issues/1355

   (5) https://github.com/pypa/setuptools/issues/1368

   (6) https://github.com/pypa/setuptools/issues/1369

   (7) https://www.python.org/dev/peps/pep-0425/

   (8) https://github.com/pypa/setuptools/issues/1372


File: setuptools.info,  Node: v39 1 0,  Next: v39 0 1,  Prev: v39 2 0,  Up: History<2>

9.82 v39.1.0
============

28 Apr 2018

   * #1340(1): Update all PyPI URLs to reflect the switch to the new
     Warehouse codebase.

   * #1337(2): In ‘pkg_resources’, now support loading resources for
     modules loaded by the ‘SourcelessFileLoader’.

   * #1332(3): Silence spurious wheel related warnings on Windows.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1340

   (2) https://github.com/pypa/setuptools/issues/1337

   (3) https://github.com/pypa/setuptools/issues/1332


File: setuptools.info,  Node: v39 0 1,  Next: v39 0 0,  Prev: v39 1 0,  Up: History<2>

9.83 v39.0.1
============

18 Mar 2018

   * #1297(1): Restore Unicode handling for Maintainer fields in
     metadata.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1297


File: setuptools.info,  Node: v39 0 0,  Next: v38 7 0,  Prev: v39 0 1,  Up: History<2>

9.84 v39.0.0
============

17 Mar 2018

   * #1296(1): Setuptools now vendors its own direct dependencies, no
     longer relying on the dependencies as vendored by pkg_resources.

   * #296(2): Removed long-deprecated support for iteration on Version
     objects as returned by ‘pkg_resources.parse_version’.  Removed the
     ‘SetuptoolsVersion’ and ‘SetuptoolsLegacyVersion’ names as well.
     They should not have been used, but if they were, replace with
     ‘Version’ and ‘LegacyVersion’ from ‘packaging.version’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1296

   (2) https://github.com/pypa/setuptools/issues/296


File: setuptools.info,  Node: v38 7 0,  Next: v38 6 1,  Prev: v39 0 0,  Up: History<2>

9.85 v38.7.0
============

17 Mar 2018

   * #1288(1): Add support for maintainer in PKG-INFO.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1288


File: setuptools.info,  Node: v38 6 1,  Next: v38 6 0,  Prev: v38 7 0,  Up: History<2>

9.86 v38.6.1
============

17 Mar 2018

   * #1292(1): Avoid generating ‘Provides-Extra’ in metadata when no
     extra is present (but environment markers are).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1292


File: setuptools.info,  Node: v38 6 0,  Next: v38 5 2,  Prev: v38 6 1,  Up: History<2>

9.87 v38.6.0
============

15 Mar 2018

   * #1286(1): Add support for Metadata 2.1 (PEP 566(2)).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1286

   (2) https://www.python.org/dev/peps/pep-0566/


File: setuptools.info,  Node: v38 5 2,  Next: v38 5 1,  Prev: v38 6 0,  Up: History<2>

9.88 v38.5.2
============

06 Mar 2018

   * #1285(1): Fixed RuntimeError in pkg_resources.parse_requirements on
     Python 3.7 (stemming from PEP 479(2)).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1285

   (2) https://www.python.org/dev/peps/pep-0479/


File: setuptools.info,  Node: v38 5 1,  Next: v38 5 0,  Prev: v38 5 2,  Up: History<2>

9.89 v38.5.1
============

06 Feb 2018

   * #1271(1): Revert to Cython legacy ‘build_ext’ behavior for
     compatibility.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1271


File: setuptools.info,  Node: v38 5 0,  Next: v38 4 1,  Prev: v38 5 1,  Up: History<2>

9.90 v38.5.0
============

04 Feb 2018

   * #1229(1): Expand imports in ‘build_ext’ to refine detection of
     Cython availability.

   * #1270(2): When Cython is available, ‘build_ext’ now uses the
     new_build_ext.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1229

   (2) https://github.com/pypa/setuptools/issues/1270


File: setuptools.info,  Node: v38 4 1,  Next: v38 4 0,  Prev: v38 5 0,  Up: History<2>

9.91 v38.4.1
============

03 Feb 2018

   * #1257(1): In bdist_egg.scan_module, fix ValueError on Python 3.7.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1257


File: setuptools.info,  Node: v38 4 0,  Next: v38 3 0,  Prev: v38 4 1,  Up: History<2>

9.92 v38.4.0
============

05 Jan 2018

   * #1231(1): Removed warning when PYTHONDONTWRITEBYTECODE is enabled.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1231


File: setuptools.info,  Node: v38 3 0,  Next: v38 2 5,  Prev: v38 4 0,  Up: History<2>

9.93 v38.3.0
============

04 Jan 2018

   * #1210(1): Add support for PEP 345(2) Project-URL metadata.

   * #1207(3): Add support for ‘long_description_type’ to setup.cfg
     declarative config as intended and documented.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1210

   (2) https://www.python.org/dev/peps/pep-0345/

   (3) https://github.com/pypa/setuptools/issues/1207


File: setuptools.info,  Node: v38 2 5,  Next: v38 2 4,  Prev: v38 3 0,  Up: History<2>

9.94 v38.2.5
============

   * #1232(1): Fix trailing slash handling in
     ‘pkg_resources.ZipProvider’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1232


File: setuptools.info,  Node: v38 2 4,  Next: v38 2 3,  Prev: v38 2 5,  Up: History<2>

9.95 v38.2.4
============

04 Dec 2017

   * #1220(1): Fix ‘data_files’ handling when installing from wheel.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1220


File: setuptools.info,  Node: v38 2 3,  Next: v38 2 2,  Prev: v38 2 4,  Up: History<2>

9.96 v38.2.3
============

28 Nov 2017

   * fix Travis’ Python 3.3 job.


File: setuptools.info,  Node: v38 2 2,  Next: v38 2 1,  Prev: v38 2 3,  Up: History<2>

9.97 v38.2.2
============

27 Nov 2017

   * #1214(1): fix handling of namespace packages when installing from a
     wheel.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1214


File: setuptools.info,  Node: v38 2 1,  Next: v38 2 0,  Prev: v38 2 2,  Up: History<2>

9.98 v38.2.1
============

26 Nov 2017

   * #1212(1): fix encoding handling of metadata when installing from a
     wheel.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1212


File: setuptools.info,  Node: v38 2 0,  Next: v38 1 0,  Prev: v38 2 1,  Up: History<2>

9.99 v38.2.0
============

26 Nov 2017

   * #1200(1): easy_install now support installing from wheels: they
     will be installed as standalone unzipped eggs.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1200


File: setuptools.info,  Node: v38 1 0,  Next: v38 0 0,  Prev: v38 2 0,  Up: History<2>

9.100 v38.1.0
=============

25 Nov 2017

   * #1208(1): Improve error message when failing to locate scripts in
     egg-info metadata.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1208


File: setuptools.info,  Node: v38 0 0,  Next: v37 0 0,  Prev: v38 1 0,  Up: History<2>

9.101 v38.0.0
=============

25 Nov 2017

   * #458(1): In order to support deterministic builds, Setuptools no
     longer allows packages to declare ‘install_requires’ as unordered
     sequences (sets or dicts).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/458


File: setuptools.info,  Node: v37 0 0,  Next: v36 8 0,  Prev: v38 0 0,  Up: History<2>

9.102 v37.0.0
=============

20 Nov 2017

   * #878(1): Drop support for Python 2.6.  Python 2.6 users should rely
     on ‘setuptools < 37dev’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/878


File: setuptools.info,  Node: v36 8 0,  Next: v36 7 3,  Prev: v37 0 0,  Up: History<2>

9.103 v36.8.0
=============

19 Nov 2017

   * #1190(1): In SSL support for package index operations, use SNI
     where available.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1190


File: setuptools.info,  Node: v36 7 3,  Next: v36 7 2,  Prev: v36 8 0,  Up: History<2>

9.104 v36.7.3
=============

13 Nov 2017

   * #1175(1): Bug fixes to ‘build_meta’ module.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1175


File: setuptools.info,  Node: v36 7 2,  Next: v36 7 1,  Prev: v36 7 3,  Up: History<2>

9.105 v36.7.2
=============

13 Nov 2017

   * #701(1): Fixed duplicate test discovery on Python 3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/701


File: setuptools.info,  Node: v36 7 1,  Next: v36 7 0,  Prev: v36 7 2,  Up: History<2>

9.106 v36.7.1
=============

11 Nov 2017

   * #1193(1): Avoid test failures in bdist_egg when
     PYTHONDONTWRITEBYTECODE is set.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1193


File: setuptools.info,  Node: v36 7 0,  Next: v36 6 1,  Prev: v36 7 1,  Up: History<2>

9.107 v36.7.0
=============

09 Nov 2017

   * #1054(1): Support ‘setup_requires’ in ‘setup.cfg’ files.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1054


File: setuptools.info,  Node: v36 6 1,  Next: v36 6 0,  Prev: v36 7 0,  Up: History<2>

9.108 v36.6.1
=============

09 Nov 2017

   * #1132(1): Removed redundant and costly serialization/parsing step
     in ‘EntryPoint.__init__’.

   * #844(2): ‘bdist_egg --exclude-source-files’ now tested and works on
     Python 3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1132

   (2) https://github.com/pypa/setuptools/issues/844


File: setuptools.info,  Node: v36 6 0,  Next: v36 5 0,  Prev: v36 6 1,  Up: History<2>

9.109 v36.6.0
=============

12 Oct 2017

   * #1143(1): Added ‘setuptools.build_meta’ module, an implementation
     of PEP-517(2) for Setuptools-defined packages.

   * #1143(3): Added ‘dist_info’ command for producing dist_info
     metadata.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1143

   (2) https://www.python.org/dev/peps/pep-0517/

   (3) https://github.com/pypa/setuptools/issues/1143


File: setuptools.info,  Node: v36 5 0,  Next: v36 4 0,  Prev: v36 6 0,  Up: History<2>

9.110 v36.5.0
=============

15 Sep 2017

   * #170(1): When working with Mercurial checkouts, use
     Windows-friendly syntax for suppressing output.

   * Inspired by #1134(2), performed substantial refactoring of
     ‘pkg_resources.find_on_path’ to facilitate an optimization for
     paths with many non-version entries.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/170

   (2) https://github.com/pypa/setuptools/issues/1134


File: setuptools.info,  Node: v36 4 0,  Next: v36 3 0,  Prev: v36 5 0,  Up: History<2>

9.111 v36.4.0
=============

03 Sep 2017

   * #1075(1): Add new ‘Description-Content-Type’ metadata field.  See
     here for documentation on how to use this field.(2)

   * #1068(3): Sort files and directories when building eggs for
     deterministic order.

   * #196(4): Remove caching of easy_install command in fetch_build_egg.
     Fixes issue where ‘pytest-runner-N.N’ would satisfy the
     installation of ‘pytest’.

   * #1129(5): Fix working set dependencies handling when replacing
     conflicting distributions (e.g.  when using ‘setup_requires’ with a
     conflicting transitive dependency, fix #1124(6)).

   * #1133(7): Improved handling of README files extensions and added
     Markdown to the list of searched READMES.

   * #1135(8): Improve performance of pkg_resources import by not
     invoking ‘access’ or ‘stat’ and using ‘os.listdir’ instead.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1075

   (2) 
https://packaging.python.org/specifications/#description-content-type

   (3) https://github.com/pypa/setuptools/issues/1068

   (4) https://github.com/pypa/setuptools/issues/196

   (5) https://github.com/pypa/setuptools/issues/1129

   (6) https://github.com/pypa/setuptools/issues/1124

   (7) https://github.com/pypa/setuptools/issues/1133

   (8) https://github.com/pypa/setuptools/issues/1135


File: setuptools.info,  Node: v36 3 0,  Next: v36 2 7,  Prev: v36 4 0,  Up: History<2>

9.112 v36.3.0
=============

28 Aug 2017

   * #1131(1): Make possible using several files within ‘file:’
     directive in metadata.long_description in ‘setup.cfg’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1131


File: setuptools.info,  Node: v36 2 7,  Next: v36 2 6,  Prev: v36 3 0,  Up: History<2>

9.113 v36.2.7
=============

02 Aug 2017

   * fix #1105(1): Fix handling of requirements with environment markers
     when declared in ‘setup.cfg’ (same treatment as for #1081(2)).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1105

   (2) https://github.com/pypa/setuptools/issues/1081


File: setuptools.info,  Node: v36 2 6,  Next: v36 2 5,  Prev: v36 2 7,  Up: History<2>

9.114 v36.2.6
=============

31 Jul 2017

   * #462(1): Don’t assume a directory is an egg by the ‘.egg’ extension
     alone.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/462


File: setuptools.info,  Node: v36 2 5,  Next: v36 2 4,  Prev: v36 2 6,  Up: History<2>

9.115 v36.2.5
=============

30 Jul 2017

   * #1093(1): Fix test command handler with extras_require.

   * #1112(2), #1091(3), #1115(4): Now using Trusty containers in Travis
     for CI and CD.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1093

   (2) https://github.com/pypa/setuptools/issues/1112

   (3) https://github.com/pypa/setuptools/issues/1091

   (4) https://github.com/pypa/setuptools/issues/1115


File: setuptools.info,  Node: v36 2 4,  Next: v36 2 3,  Prev: v36 2 5,  Up: History<2>

9.116 v36.2.4
=============

26 Jul 2017

   * #1092(1): ‘pkg_resources’ now uses ‘inspect.getmro’ to resolve
     classes in method resolution order.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1092


File: setuptools.info,  Node: v36 2 3,  Next: v36 2 2,  Prev: v36 2 4,  Up: History<2>

9.117 v36.2.3
=============

25 Jul 2017

   * #1102(1): Restore behavior for empty extras.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1102


File: setuptools.info,  Node: v36 2 2,  Next: v36 2 1,  Prev: v36 2 3,  Up: History<2>

9.118 v36.2.2
=============

24 Jul 2017

   * #1099(1): Revert commit a3ec721, restoring intended purpose of
     extras as part of a requirement declaration.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1099


File: setuptools.info,  Node: v36 2 1,  Next: v36 2 0,  Prev: v36 2 2,  Up: History<2>

9.119 v36.2.1
=============

23 Jul 2017

   * fix #1086(1)

   * fix #1087(2)

   * support extras specifiers in install_requires requirements

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1086

   (2) https://github.com/pypa/setuptools/issues/1087


File: setuptools.info,  Node: v36 2 0,  Next: v36 1 1,  Prev: v36 2 1,  Up: History<2>

9.120 v36.2.0
=============

13 Jul 2017

   * #1081(1): Environment markers indicated in ‘install_requires’ are
     now processed and treated as nameless ‘extras_require’ with
     markers, allowing their metadata in requires.txt to be correctly
     generated.

   * #1053(2): Tagged commits are now released using Travis-CI build
     stages, meaning releases depend on passing tests on all supported
     Python versions (Linux) and not just the latest Python version.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1081

   (2) https://github.com/pypa/setuptools/issues/1053


File: setuptools.info,  Node: v36 1 1,  Next: v36 1 0,  Prev: v36 2 0,  Up: History<2>

9.121 v36.1.1
=============

13 Jul 2017

   * #1083(1): Correct ‘py31compat.makedirs’ to correctly honor
     ‘exist_ok’ parameter.

   * #1083(2): Also use makedirs compatibility throughout setuptools.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1083

   (2) https://github.com/pypa/setuptools/issues/1083


File: setuptools.info,  Node: v36 1 0,  Next: v36 0 1,  Prev: v36 1 1,  Up: History<2>

9.122 v36.1.0
=============

13 Jul 2017

   * #1083(1): Avoid race condition on directory creation in
     ‘pkg_resources.ensure_directory’.

   * Removed deprecation of and restored support for ‘upload_docs’
     command for sites other than PyPI. Only warehouse is dropping
     support, but services like devpi(2) continue to support docs built
     by setuptools’ plugins.  See this comment(3) for more context on
     the motivation for this change.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1083

   (2) http://doc.devpi.net/latest/

   (3) 
https://bitbucket.org/hpk42/devpi/issues/388/support-rtd-model-for-building-uploading#comment-34292423


File: setuptools.info,  Node: v36 0 1,  Next: v36 0 0,  Prev: v36 1 0,  Up: History<2>

9.123 v36.0.1
=============

01 Jun 2017

   * #1042(1): Fix import in py27compat module that still referenced six
     directly, rather than through the externs module (vendored packages
     hook).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1042


File: setuptools.info,  Node: v36 0 0,  Next: v35 0 2,  Prev: v36 0 1,  Up: History<2>

9.124 v36.0.0
=============

30 May 2017

   * #980(1) and others: Once again, Setuptools vendors all of its
     dependencies.  It seems to be the case that in the Python
     ecosystem, all build tools must run without any dependencies
     (build, runtime, or otherwise).  At such a point that a mechanism
     exists that allows build tools to have dependencies, Setuptools
     will adopt it.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/980


File: setuptools.info,  Node: v35 0 2,  Next: v35 0 1,  Prev: v36 0 0,  Up: History<2>

9.125 v35.0.2
=============

27 Apr 2017

   * #1015(1): Fix test failures on Python 3.7.

   * #1024(2): Add workaround for Jython #2581(3) in monkey module.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1015

   (2) https://github.com/pypa/setuptools/issues/1024

   (3) http://bugs.jython.org/issue2581


File: setuptools.info,  Node: v35 0 1,  Next: v35 0 0,  Prev: v35 0 2,  Up: History<2>

9.126 v35.0.1
=============

18 Apr 2017

   * #992(1): Revert change introduced in v34.4.1, now considered
     invalid.

   * #1016(2): Revert change introduced in v35.0.0 per #1014(3),
     referencing #436(4).  The approach had unintended consequences,
     causing sdist installs to be missing files.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/992

   (2) https://github.com/pypa/setuptools/issues/1016

   (3) https://github.com/pypa/setuptools/issues/1014

   (4) https://github.com/pypa/setuptools/issues/436


File: setuptools.info,  Node: v35 0 0,  Next: v34 4 1,  Prev: v35 0 1,  Up: History<2>

9.127 v35.0.0
=============

15 Apr 2017

   * #436(1): In egg_info.manifest_maker, no longer read the file list
     from the manifest file, and instead re-build it on each build.  In
     this way, files removed from the specification will not linger in
     the manifest.  As a result, any files manually added to the
     manifest will be removed on subsequent egg_info invocations.  No
     projects should be manually adding files to the manifest and should
     instead use MANIFEST.in or SCM file finders to force inclusion of
     files in the manifest.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/436


File: setuptools.info,  Node: v34 4 1,  Next: v34 4 0,  Prev: v35 0 0,  Up: History<2>

9.128 v34.4.1
=============

10 Apr 2017

   * #1008(1): In MSVC support, use always the last version available
     for Windows SDK and UCRT SDK.

   * #1008(2): In MSVC support, fix “vcruntime140.dll” returned path
     with Visual Studio 2017.

   * #992(3): In msvc.msvc9_query_vcvarsall, ensure the returned dicts
     have str values and not Unicode for compatibility with os.environ.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1008

   (2) https://github.com/pypa/setuptools/issues/1008

   (3) https://github.com/pypa/setuptools/issues/992


File: setuptools.info,  Node: v34 4 0,  Next: v34 3 3,  Prev: v34 4 1,  Up: History<2>

9.129 v34.4.0
=============

07 Apr 2017

   * #995(1): In MSVC support, add support for “Microsoft Visual Studio
     2017” and “Microsoft Visual Studio Build Tools 2017”.

   * #999(2) via #1007(3): Extend support for declarative package config
     in a setup.cfg file to include the options ‘python_requires’ and
     ‘py_modules’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/995

   (2) https://github.com/pypa/setuptools/issues/999

   (3) https://github.com/pypa/setuptools/issues/1007


File: setuptools.info,  Node: v34 3 3,  Next: v34 3 2,  Prev: v34 4 0,  Up: History<2>

9.130 v34.3.3
=============

26 Mar 2017

   * #967(1) (and #997(2)): Explicitly import submodules of packaging to
     account for environments where the imports of those submodules is
     not implied by other behavior.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/967

   (2) https://github.com/pypa/setuptools/issues/997


File: setuptools.info,  Node: v34 3 2,  Next: v34 3 1,  Prev: v34 3 3,  Up: History<2>

9.131 v34.3.2
=============

11 Mar 2017

   * #993(1): Fix documentation upload by correcting rendering of
     content-type in _build_multipart on Python 3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/993


File: setuptools.info,  Node: v34 3 1,  Next: v34 3 0,  Prev: v34 3 2,  Up: History<2>

9.132 v34.3.1
=============

02 Mar 2017

   * #988(1): Trap ‘os.unlink’ same as ‘os.remove’ in ‘auto_chmod’ error
     handler.

   * #983(2): Fixes to invalid escape sequence deprecations on Python
     3.6.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/988

   (2) https://github.com/pypa/setuptools/issues/983


File: setuptools.info,  Node: v34 3 0,  Next: v34 2 0,  Prev: v34 3 1,  Up: History<2>

9.133 v34.3.0
=============

23 Feb 2017

   * #941(1): In the upload command, if the username is blank, default
     to ‘getpass.getuser()’.

   * #971(2): Correct distutils findall monkeypatch to match appropriate
     versions (namely Python 3.4.6).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/941

   (2) https://github.com/pypa/setuptools/issues/971


File: setuptools.info,  Node: v34 2 0,  Next: v34 1 1,  Prev: v34 3 0,  Up: History<2>

9.134 v34.2.0
=============

12 Feb 2017

   * #966(1): Add support for reading dist-info metadata and thus
     locating Distributions from zip files.

   * #968(2): Allow ‘+’ and ‘!’ in egg fragments so that it can take
     package names that contain PEP 440(3) conforming version
     specifiers.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/966

   (2) https://github.com/pypa/setuptools/issues/968

   (3) https://www.python.org/dev/peps/pep-0440/


File: setuptools.info,  Node: v34 1 1,  Next: v34 1 0,  Prev: v34 2 0,  Up: History<2>

9.135 v34.1.1
=============

03 Feb 2017

   * #953(1): More aggressively employ the compatibility issue
     originally added in #706(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/953

   (2) https://github.com/pypa/setuptools/issues/706


File: setuptools.info,  Node: v34 1 0,  Next: v34 0 3,  Prev: v34 1 1,  Up: History<2>

9.136 v34.1.0
=============

28 Jan 2017

   * #930(1): ‘build_info’ now accepts two new parameters to optimize
     and customize the building of C libraries.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/930


File: setuptools.info,  Node: v34 0 3,  Next: v34 0 2,  Prev: v34 1 0,  Up: History<2>

9.137 v34.0.3
=============

28 Jan 2017

   * #947(1): Loosen restriction on the version of six required,
     restoring compatibility with environments relying on six 1.6.0 and
     later.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/947


File: setuptools.info,  Node: v34 0 2,  Next: v34 0 1,  Prev: v34 0 3,  Up: History<2>

9.138 v34.0.2
=============

24 Jan 2017

   * #882(1): Ensure extras are honored when building the working set.

   * #913(2): Fix issue in develop if package directory has a trailing
     slash.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/882

   (2) https://github.com/pypa/setuptools/issues/913


File: setuptools.info,  Node: v34 0 1,  Next: v34 0 0,  Prev: v34 0 2,  Up: History<2>

9.139 v34.0.1
=============

23 Jan 2017

   * #935(1): Fix glob syntax in graft.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/935


File: setuptools.info,  Node: v34 0 0,  Next: v33 1 1,  Prev: v34 0 1,  Up: History<2>

9.140 v34.0.0
=============

23 Jan 2017

   * #581(1): Instead of vendoring the growing list of dependencies that
     Setuptools requires to function, Setuptools now requires these
     dependencies just like any other project.  Unlike other projects,
     however, Setuptools cannot rely on ‘setup_requires’ to demand the
     dependencies it needs to install because its own machinery would be
     necessary to pull those dependencies if not present (a
     bootstrapping problem).  As a result, Setuptools no longer supports
     self upgrade or installation in the general case.  Instead, users
     are directed to use pip to install and upgrade using the ‘wheel’
     distributions of setuptools.

     Users are welcome to contrive other means to install or upgrade
     Setuptools using other means, such as pre-installing the Setuptools
     dependencies with pip or a bespoke bootstrap tool, but such usage
     is not recommended and is not supported.

     As discovered in #940(2), not all versions of pip will successfully
     install Setuptools from its pre-built wheel.  If you encounter
     issues with “No module named six” or “No module named packaging”,
     especially following a line “Running setup.py egg_info for package
     setuptools”, then your pip is not new enough.

     There’s an additional issue in pip where setuptools is upgraded
     concurrently with other source packages, described in pip #4253(3).
     The proposed workaround is to always upgrade Setuptools first prior
     to upgrading other packages that would upgrade Setuptools.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/581

   (2) https://github.com/pypa/setuptools/issues/940

   (3) https://github.com/pypa/setuptools/issues/4253


File: setuptools.info,  Node: v33 1 1,  Next: v33 1 0,  Prev: v34 0 0,  Up: History<2>

9.141 v33.1.1
=============

16 Jan 2017

   * #921(1): Correct issue where certifi fallback not being reached on
     Windows.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/921


File: setuptools.info,  Node: v33 1 0,  Next: v33 0 0,  Prev: v33 1 1,  Up: History<2>

9.142 v33.1.0
=============

15 Jan 2017

Installation via pip, as indicated in the Python Packaging User’s
Guide(1), is the officially-supported mechanism for installing
Setuptools, and this recommendation is now explicit in the much more
concise README.

Other edits and tweaks were made to the documentation.  The codebase is
unchanged.

   ---------- Footnotes ----------

   (1) https://packaging.python.org/installing/


File: setuptools.info,  Node: v33 0 0,  Next: v32 3 1,  Prev: v33 1 0,  Up: History<2>

9.143 v33.0.0
=============

01 Jan 2017

   * #619(1): Removed support for the ‘tag_svn_revision’ distribution
     option.  If Subversion tagging support is still desired, consider
     adding the functionality to setuptools_svn in setuptools_svn #2(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/619

   (2) https://github.com/jaraco/setuptools_svn/issues/2


File: setuptools.info,  Node: v32 3 1,  Next: v32 3 0,  Prev: v33 0 0,  Up: History<2>

9.144 v32.3.1
=============

28 Dec 2016

   * #866(1): Use ‘dis.Bytecode’ on Python 3.4 and later in
     ‘setuptools.depends’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/866


File: setuptools.info,  Node: v32 3 0,  Next: v32 2 0,  Prev: v32 3 1,  Up: History<2>

9.145 v32.3.0
=============

24 Dec 2016

   * #889(1): Backport proposed fix for disabling interpolation in
     distutils.Distribution.parse_config_files.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/889


File: setuptools.info,  Node: v32 2 0,  Next: v32 1 3,  Prev: v32 3 0,  Up: History<2>

9.146 v32.2.0
=============

22 Dec 2016

   * #884(1): Restore support for running the tests under
     pytest-runner(2) by ensuring that PYTHONPATH is honored in tests
     invoking a subprocess.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/884

   (2) https://github.com/pytest-dev/pytest-runner


File: setuptools.info,  Node: v32 1 3,  Next: v32 1 2,  Prev: v32 2 0,  Up: History<2>

9.147 v32.1.3
=============

21 Dec 2016

   * #706(1): Add rmtree compatibility shim for environments where
     rmtree fails when passed a unicode string.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/706


File: setuptools.info,  Node: v32 1 2,  Next: v32 1 1,  Prev: v32 1 3,  Up: History<2>

9.148 v32.1.2
=============

18 Dec 2016

   * #893(1): Only release sdist in zip format as warehouse now
     disallows releasing two different formats.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/893


File: setuptools.info,  Node: v32 1 1,  Next: v32 1 0,  Prev: v32 1 2,  Up: History<2>

9.149 v32.1.1
=============

18 Dec 2016

   * #704(1): More selectively ensure that ‘rmtree’ is not invoked with
     a byte string, enabling it to remove files that are non-ascii, even
     on Python 2.

   * #712(2): In ‘sandbox.run_setup’, ensure that ‘__file__’ is always a
     ‘str’, modeling the behavior observed by the interpreter when
     invoking scripts and modules.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/704

   (2) https://github.com/pypa/setuptools/issues/712


File: setuptools.info,  Node: v32 1 0,  Next: v32 0 0,  Prev: v32 1 1,  Up: History<2>

9.150 v32.1.0
=============

16 Dec 2016

   * #891(1): In ‘test’ command on test failure, raise DistutilsError,
     suppression invocation of subsequent commands.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/891


File: setuptools.info,  Node: v32 0 0,  Next: v31 0 1,  Prev: v32 1 0,  Up: History<2>

9.151 v32.0.0
=============

14 Dec 2016

   * #890(1): Revert #849(2).  ‘global-exclude .foo’ will not match all
     ‘*.foo’ files any more.  Package authors must add an explicit
     wildcard, such as ‘global-exclude *.foo’, to match all ‘.foo’
     files.  See #886(3), #849(4).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/890

   (2) https://github.com/pypa/setuptools/issues/849

   (3) https://github.com/pypa/setuptools/issues/886

   (4) https://github.com/pypa/setuptools/issues/849


File: setuptools.info,  Node: v31 0 1,  Next: v31 0 0,  Prev: v32 0 0,  Up: History<2>

9.152 v31.0.1
=============

14 Dec 2016

   * #885(1): Fix regression where ‘pkg_resources._rebuild_mod_path’
     would fail when a namespace package’s ‘__path__’ was not a list
     with a sort attribute.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/885


File: setuptools.info,  Node: v31 0 0,  Next: v30 4 0,  Prev: v31 0 1,  Up: History<2>

9.153 v31.0.0
=============

11 Dec 2016

   * #250(1): Install ‘-nspkg.pth’ files for packages installed with
     ‘setup.py develop’.  These .pth files allow namespace packages
     installed by pip or develop to co-mingle.  This change required the
     removal of the change for #805(2) and pip #1924(3), introduced in
     28.3.0 and implicated in #870(4), but means that namespace packages
     not in a site packages directory will no longer work on Python
     earlier than 3.5, whereas before they would work on Python not
     earlier than 3.3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/250

   (2) https://github.com/pypa/setuptools/issues/805

   (3) https://github.com/pypa/setuptools/issues/1924

   (4) https://github.com/pypa/setuptools/issues/870


File: setuptools.info,  Node: v30 4 0,  Next: v30 3 0,  Prev: v31 0 0,  Up: History<2>

9.154 v30.4.0
=============

10 Dec 2016

   * #879(1): For declarative config:

        - read_configuration() now accepts ignore_option_errors
          argument.  This allows scraping tools to read metadata without
          a need to download entire packages.  E.g.  we can gather some
          stats right from GitHub repos just by downloading setup.cfg.

        - packages find: directive now supports fine tuning from a
          subsection.  The same arguments as for find() are accepted.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/879


File: setuptools.info,  Node: v30 3 0,  Next: v30 2 1,  Prev: v30 4 0,  Up: History<2>

9.155 v30.3.0
=============

08 Dec 2016

   * #394(1) via #862(2): Added support for declarative package config
     in a setup.cfg file(3).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/394

   (2) https://github.com/pypa/setuptools/issues/862

   (3) 
https://setuptools.readthedocs.io/en/latest/setuptools.html#configuring-setup-using-setup-cfg-files


File: setuptools.info,  Node: v30 2 1,  Next: v30 2 0,  Prev: v30 3 0,  Up: History<2>

9.156 v30.2.1
=============

08 Dec 2016

   * #850(1): In test command, invoke unittest.main with indication not
     to exit the process.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/850


File: setuptools.info,  Node: v30 2 0,  Next: v30 1 0,  Prev: v30 2 1,  Up: History<2>

9.157 v30.2.0
=============

04 Dec 2016

   * #854(1): Bump to vendored Packaging 16.8(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/854

   (2) https://github.com/pypa/packaging/blob/16.8/CHANGELOG.rst


File: setuptools.info,  Node: v30 1 0,  Next: v30 0 0,  Prev: v30 2 0,  Up: History<2>

9.158 v30.1.0
=============

03 Dec 2016

   * #846(1): Also trap ‘socket.error’ when opening URLs in
     package_index.

   * #849(2): Manifest processing now matches the filename pattern
     anywhere in the filename and not just at the start.  Restores
     behavior found prior to 28.5.0.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/846

   (2) https://github.com/pypa/setuptools/issues/849


File: setuptools.info,  Node: v30 0 0,  Next: v29 0 1,  Prev: v30 1 0,  Up: History<2>

9.159 v30.0.0
=============

01 Dec 2016

   * #864(1): Drop support for Python 3.2.  Systems requiring Python 3.2
     support must use ‘setuptools < 30’.

   * #825(2): Suppress warnings for single files.

   * #830(3) via #843(4): Once again restored inclusion of data files to
     sdists, but now trap TypeError caused by techniques employed rjsmin
     and similar.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/864

   (2) https://github.com/pypa/setuptools/issues/825

   (3) https://github.com/pypa/setuptools/issues/830

   (4) https://github.com/pypa/setuptools/issues/843


File: setuptools.info,  Node: v29 0 1,  Next: v29 0 0,  Prev: v30 0 0,  Up: History<2>

9.160 v29.0.1
=============

26 Nov 2016

   * #861(1): Re-release of v29.0.1 with the executable script launchers
     bundled.  Now, launchers are included by default and users that
     want to disable this behavior must set the environment variable
     ‘SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES’ to a false value like
     “false” or “0”.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/861


File: setuptools.info,  Node: v29 0 0,  Next: v28 8 0,  Prev: v29 0 1,  Up: History<2>

9.161 v29.0.0
=============

25 Nov 2016

   * #841(1): Drop special exception for packages invoking win32com
     during the build/install process.  See Distribute #118(2) for
     history.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/841

   (2) https://bitbucket.org/tarek/distribute/issue/118


File: setuptools.info,  Node: v28 8 0,  Next: v28 7 1,  Prev: v29 0 0,  Up: History<2>

9.162 v28.8.0
=============

04 Nov 2016

   * #629(1): Per the discussion, refine the sorting to use version
     value order for more accurate detection of the latest available
     version when scanning for packages.  See also #829(2).

   * #837(3): Rely on the config var “SO” for Python 3.3.0 only when
     determining the ext filename.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/629

   (2) https://github.com/pypa/setuptools/issues/829

   (3) https://github.com/pypa/setuptools/issues/837


File: setuptools.info,  Node: v28 7 1,  Next: v28 7 0,  Prev: v28 8 0,  Up: History<2>

9.163 v28.7.1
=============

29 Oct 2016

   * #827(1): Update PyPI root for dependency links.

   * #833(2): Backed out changes from #830(3) as the implementation
     seems to have problems in some cases.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/827

   (2) https://github.com/pypa/setuptools/issues/833

   (3) https://github.com/pypa/setuptools/issues/830


File: setuptools.info,  Node: v28 7 0,  Next: v28 6 1,  Prev: v28 7 1,  Up: History<2>

9.164 v28.7.0
=============

28 Oct 2016

   * #832(1): Moved much of the namespace package handling functionality
     into a separate module for re-use in something like #789(2).

   * #830(3): ‘sdist’ command no longer suppresses the inclusion of data
     files, re-aligning with the expectation of distutils and addressing
     #274(4) and #521(5).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/832

   (2) https://github.com/pypa/setuptools/issues/789

   (3) https://github.com/pypa/setuptools/issues/830

   (4) https://github.com/pypa/setuptools/issues/274

   (5) https://github.com/pypa/setuptools/issues/521


File: setuptools.info,  Node: v28 6 1,  Next: v28 6 0,  Prev: v28 7 0,  Up: History<2>

9.165 v28.6.1
=============

19 Oct 2016

   * #816(1): Fix manifest file list order in tests.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/816


File: setuptools.info,  Node: v28 6 0,  Next: v28 5 0,  Prev: v28 6 1,  Up: History<2>

9.166 v28.6.0
=============

16 Oct 2016

   * #629(1): When scanning for packages, ‘pkg_resources’ now ignores
     empty egg-info directories and gives precedence to packages whose
     versions are lexicographically greatest, a rough approximation for
     preferring the latest available version.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/629


File: setuptools.info,  Node: v28 5 0,  Next: v28 4 0,  Prev: v28 6 0,  Up: History<2>

9.167 v28.5.0
=============

14 Oct 2016

   * #810(1): Tests are now invoked with tox and not setup.py test.

   * #249(2) and #450(3) via #764(4): Avoid scanning the whole tree when
     building the manifest.  Also fixes a long-standing bug where
     patterns in ‘MANIFEST.in’ had implicit wildcard matching.  This
     caused ‘global-exclude .foo’ to exclude all ‘*.foo’ files, but also
     ‘global-exclude bar.py’ to exclude ‘foo_bar.py’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/810

   (2) https://github.com/pypa/setuptools/issues/249

   (3) https://github.com/pypa/setuptools/issues/450

   (4) https://github.com/pypa/setuptools/issues/764


File: setuptools.info,  Node: v28 4 0,  Next: v28 3 0,  Prev: v28 5 0,  Up: History<2>

9.168 v28.4.0
=============

14 Oct 2016

   * #732(1): Now extras with a hyphen are honored per PEP 426(2).

   * #811(3): Update to pyparsing 2.1.10.

   * Updated ‘setuptools.command.sdist’ to re-use most of the
     functionality directly from ‘distutils.command.sdist’ for the
     ‘add_defaults’ method with strategic overrides.  See #750(4) for
     rationale.

   * #760(5) via #762(6): Look for certificate bundle where SUSE Linux
     typically presents it.  Use ‘certifi.where()’ to locate the bundle.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/732

   (2) https://www.python.org/dev/peps/pep-0426/

   (3) https://github.com/pypa/setuptools/issues/811

   (4) https://github.com/pypa/setuptools/issues/750

   (5) https://github.com/pypa/setuptools/issues/760

   (6) https://github.com/pypa/setuptools/issues/762


File: setuptools.info,  Node: v28 3 0,  Next: v28 1 0,  Prev: v28 4 0,  Up: History<2>

9.169 v28.3.0
=============

07 Oct 2016

   * #809(1): In ‘find_packages()’, restore support for excluding a
     parent package without excluding a child package.

   * #805(2): Disable ‘-nspkg.pth’ behavior on Python 3.3+ where
     PEP-420(3) functionality is adequate.  Fixes pip #1924(4).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/809

   (2) https://github.com/pypa/setuptools/issues/805

   (3) https://www.python.org/dev/peps/pep-0420/

   (4) https://github.com/pypa/setuptools/issues/1924


File: setuptools.info,  Node: v28 1 0,  Next: v28 0 0,  Prev: v28 3 0,  Up: History<2>

9.170 v28.1.0
=============

01 Oct 2016

   * #803(1): Bump certifi to 2016.9.26.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/803


File: setuptools.info,  Node: v28 0 0,  Next: v27 3 1,  Prev: v28 1 0,  Up: History<2>

9.171 v28.0.0
=============

27 Sep 2016

   * #733(1): Do not search excluded directories for packages.  This
     introduced a backwards incompatible change in ‘find_packages()’ so
     that ‘find_packages(exclude=['foo']) == []’, excluding subpackages
     of ‘foo’.  Previously, ‘find_packages(exclude=['foo']) ==
     ['foo.bar']’, even though the parent ‘foo’ package was excluded.

   * #795(2): Bump certifi.

   * #719(3): Suppress decoding errors and instead log a warning when
     metadata cannot be decoded.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/733

   (2) https://github.com/pypa/setuptools/issues/795

   (3) https://github.com/pypa/setuptools/issues/719


File: setuptools.info,  Node: v27 3 1,  Next: v27 3 0,  Prev: v28 0 0,  Up: History<2>

9.172 v27.3.1
=============

27 Sep 2016

   * #790(1): In MSVC monkeypatching, explicitly patch each function by
     name in the target module instead of inferring the module from the
     function’s ‘__module__’.  Improves compatibility with other
     packages that might have previously patched distutils functions
     (i.e.  NumPy).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/790


File: setuptools.info,  Node: v27 3 0,  Next: v27 2 0,  Prev: v27 3 1,  Up: History<2>

9.173 v27.3.0
=============

20 Sep 2016

   * #794(1): In test command, add installed eggs to PYTHONPATH when
     invoking tests so that subprocesses will also have the dependencies
     available.  Fixes tox 330(2).

   * #795(3): Update vendored pyparsing 2.1.9.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/794

   (2) https://github.com/tox-dev/tox/issues/330

   (3) https://github.com/pypa/setuptools/issues/795


File: setuptools.info,  Node: v27 2 0,  Next: v27 1 2,  Prev: v27 3 0,  Up: History<2>

9.174 v27.2.0
=============

14 Sep 2016

   * #520(1) and #513(2): Suppress ValueErrors in
     fixup_namespace_packages when lookup fails.

   * Nicer, more consistent interfaces for msvc monkeypatching.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/520

   (2) https://github.com/pypa/setuptools/issues/513


File: setuptools.info,  Node: v27 1 2,  Next: v27 1 1,  Prev: v27 2 0,  Up: History<2>

9.175 v27.1.2
=============

09 Sep 2016

   * #779(1) via #781(2): Fix circular import.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/779

   (2) https://github.com/pypa/setuptools/issues/781


File: setuptools.info,  Node: v27 1 1,  Next: v27 1 0,  Prev: v27 1 2,  Up: History<2>

9.176 v27.1.1
=============

09 Sep 2016

   * #778(1): Fix MSVC monkeypatching.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/778


File: setuptools.info,  Node: v27 1 0,  Next: v27 0 0,  Prev: v27 1 1,  Up: History<2>

9.177 v27.1.0
=============

09 Sep 2016

   * Introduce the (private) ‘monkey’ module to encapsulate the
     distutils monkeypatching behavior.


File: setuptools.info,  Node: v27 0 0,  Next: v26 1 1,  Prev: v27 1 0,  Up: History<2>

9.178 v27.0.0
=============

09 Sep 2016

   * Now use Warehouse by default for ‘upload’, patching
     ‘distutils.config.PyPIRCCommand’ to affect default behavior.

     Any config in .pypirc should be updated to replace

          ‘https://pypi.python.org/pypi/’

     with

          ‘https://upload.pypi.org/legacy/’

     Similarly, any passwords stored in the keyring should be updated to
     use this new value for “system”.

     The ‘upload_docs’ command will continue to use the python.org site,
     but the command is now deprecated.  Users are urged to use Read The
     Docs instead.

   * #776(1): Use EXT_SUFFIX for py_limited_api renaming.

   * #774(2) and #775(3): Use LegacyVersion from packaging when
     detecting numpy versions.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/776

   (2) https://github.com/pypa/setuptools/issues/774

   (3) https://github.com/pypa/setuptools/issues/775


File: setuptools.info,  Node: v26 1 1,  Next: v26 1 0,  Prev: v27 0 0,  Up: History<2>

9.179 v26.1.1
=============

29 Aug 2016

   * Re-release of 26.1.0 with pytest pinned to allow for automated
     deployment and thus proper packaging environment variables, fixing
     issues with missing executable launchers.


File: setuptools.info,  Node: v26 1 0,  Next: v26 0 0,  Prev: v26 1 1,  Up: History<2>

9.180 v26.1.0
=============

28 Aug 2016

   * #763(1): ‘pkg_resources.get_default_cache’ now defers to the
     appdirs project(2) to resolve the cache directory.  Adds a vendored
     dependency on appdirs to pkg_resources.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/763

   (2) https://pypi.org/project/appdirs


File: setuptools.info,  Node: v26 0 0,  Next: v25 4 0,  Prev: v26 1 0,  Up: History<2>

9.181 v26.0.0
=============

20 Aug 2016

   * #748(1): By default, sdists are now produced in gzipped tarfile
     format by default on all platforms, adding forward compatibility
     for the same behavior in Python 3.6 (See Python #27819(2)).

   * #459(3) via #736(4): On Windows with script launchers, sys.argv[0]
     now reflects the name of the entry point, consistent with the
     behavior in distlib and pip wrappers.

   * #752(5) via #753(6): When indicating ‘py_limited_api’ to Extension,
     it must be passed as a keyword argument.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/748

   (2) http://bugs.python.org/issue27819

   (3) https://github.com/pypa/setuptools/issues/459

   (4) https://github.com/pypa/setuptools/issues/736

   (5) https://github.com/pypa/setuptools/issues/752

   (6) https://github.com/pypa/setuptools/issues/753


File: setuptools.info,  Node: v25 4 0,  Next: v25 3 0,  Prev: v26 0 0,  Up: History<2>

9.182 v25.4.0
=============

19 Aug 2016

   * Add Extension(py_limited_api=True).  When set to a truthy value,
     that extension gets a filename appropriate for code using
     Py_LIMITED_API. When used correctly this allows a single compiled
     extension to work on all future versions of CPython 3.  The
     py_limited_api argument only controls the filename.  To be
     compatible with multiple versions of Python 3, the C extension will
     also need to set -DPy_LIMITED_API=… and be modified to use only the
     functions in the limited API.


File: setuptools.info,  Node: v25 3 0,  Next: v25 2 0,  Prev: v25 4 0,  Up: History<2>

9.183 v25.3.0
=============

19 Aug 2016

   * #739(1) Fix unquoted libpaths by fixing compatibility between
     ‘numpy.distutils’ and ‘distutils._msvccompiler’ for numpy < 1.11.2
     (Fix issue #728(2), error also fixed in Numpy).

   * #731(3): Bump certifi.

   * Style updates.  See #740(4), #741(5), #743(6), #744(7), #742(8),
     #747(9).

   * #735(10): include license file.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/739

   (2) https://github.com/pypa/setuptools/issues/728

   (3) https://github.com/pypa/setuptools/issues/731

   (4) https://github.com/pypa/setuptools/issues/740

   (5) https://github.com/pypa/setuptools/issues/741

   (6) https://github.com/pypa/setuptools/issues/743

   (7) https://github.com/pypa/setuptools/issues/744

   (8) https://github.com/pypa/setuptools/issues/742

   (9) https://github.com/pypa/setuptools/issues/747

   (10) https://github.com/pypa/setuptools/issues/735


File: setuptools.info,  Node: v25 2 0,  Next: v25 1 6,  Prev: v25 3 0,  Up: History<2>

9.184 v25.2.0
=============

12 Aug 2016

   * #612(1) via #730(2): Add a LICENSE file which needs to be provided
     by the terms of the MIT license.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/612

   (2) https://github.com/pypa/setuptools/issues/730


File: setuptools.info,  Node: v25 1 6,  Next: v25 1 5,  Prev: v25 2 0,  Up: History<2>

9.185 v25.1.6
=============

05 Aug 2016

   * #725(1): revert ‘library_dir_option’ patch (Error is related to
     ‘numpy.distutils’ and make errors on non Numpy users).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/725


File: setuptools.info,  Node: v25 1 5,  Next: v25 1 4,  Prev: v25 1 6,  Up: History<2>

9.186 v25.1.5
=============

05 Aug 2016

   * #720(1)

   * #723(2): Improve patch for ‘library_dir_option’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/720

   (2) https://github.com/pypa/setuptools/issues/723


File: setuptools.info,  Node: v25 1 4,  Next: v25 1 3,  Prev: v25 1 5,  Up: History<2>

9.187 v25.1.4
=============

04 Aug 2016

   * #717(1)

   * #713(2)

   * #707(3): Fix Python 2 compatibility for MSVC by catching errors
     properly.

   * #715(4): Fix unquoted libpaths by patching ‘library_dir_option’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/717

   (2) https://github.com/pypa/setuptools/issues/713

   (3) https://github.com/pypa/setuptools/issues/707

   (4) https://github.com/pypa/setuptools/issues/715


File: setuptools.info,  Node: v25 1 3,  Next: v25 1 2,  Prev: v25 1 4,  Up: History<2>

9.188 v25.1.3
=============

02 Aug 2016

   * #714(1) and #704(2): Revert fix as it breaks other components
     downstream that can’t handle unicode.  See #709(3), #710(4), and
     #712(5).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/714

   (2) https://github.com/pypa/setuptools/issues/704

   (3) https://github.com/pypa/setuptools/issues/709

   (4) https://github.com/pypa/setuptools/issues/710

   (5) https://github.com/pypa/setuptools/issues/712


File: setuptools.info,  Node: v25 1 2,  Next: v25 1 1,  Prev: v25 1 3,  Up: History<2>

9.189 v25.1.2
=============

01 Aug 2016

   * #704(1): Fix errors when installing a zip sdist that contained
     files named with non-ascii characters on Windows would crash the
     install when it attempted to clean up the build.

   * #646(2): MSVC compatibility - catch errors properly in
     RegistryInfo.lookup.

   * #702(3): Prevent UnboundLocalError when initial working_set is
     empty.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/704

   (2) https://github.com/pypa/setuptools/issues/646

   (3) https://github.com/pypa/setuptools/issues/702


File: setuptools.info,  Node: v25 1 1,  Next: v25 1 0,  Prev: v25 1 2,  Up: History<2>

9.190 v25.1.1
=============

28 Jul 2016

   * #686(1): Fix issue in sys.path ordering by pkg_resources when
     rewrite technique is “raw”.

   * #699(2): Fix typo in msvc support.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/686

   (2) https://github.com/pypa/setuptools/issues/699


File: setuptools.info,  Node: v25 1 0,  Next: v25 0 2,  Prev: v25 1 1,  Up: History<2>

9.191 v25.1.0
=============

25 Jul 2016

   * #609(1): Setuptools will now try to download a distribution from
     the next possible download location if the first download fails.
     This means you can now specify multiple links as ‘dependency_links’
     and all links will be tried until a working download link is
     encountered.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/609


File: setuptools.info,  Node: v25 0 2,  Next: v25 0 1,  Prev: v25 1 0,  Up: History<2>

9.192 v25.0.2
=============

25 Jul 2016

   * #688(1): Fix AttributeError in setup.py when invoked not from the
     current directory.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/688


File: setuptools.info,  Node: v25 0 1,  Next: v25 0 0,  Prev: v25 0 2,  Up: History<2>

9.193 v25.0.1
=============

25 Jul 2016

   * Cleanup of setup.py script.

   * Fixed documentation builders by allowing setup.py to be imported
     without having bootstrapped the metadata.

   * More style cleanup.  See #677(1), #678(2), #679(3), #681(4),
     #685(5).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/677

   (2) https://github.com/pypa/setuptools/issues/678

   (3) https://github.com/pypa/setuptools/issues/679

   (4) https://github.com/pypa/setuptools/issues/681

   (5) https://github.com/pypa/setuptools/issues/685


File: setuptools.info,  Node: v25 0 0,  Next: v24 3 1,  Prev: v25 0 1,  Up: History<2>

9.194 v25.0.0
=============

23 Jul 2016

   * #674(1): Default ‘sys.path’ manipulation by easy-install.pth is now
     “raw”, meaning that when writing easy-install.pth during any
     install operation, the ‘sys.path’ will not be rewritten and will no
     longer give preference to easy_installed packages.

     To retain the old behavior when using any easy_install operation
     (including ‘setup.py install’ when setuptools is present), set the
     environment variable:

          SETUPTOOLS_SYS_PATH_TECHNIQUE=rewrite

     This project hopes that that few if any environments find it
     necessary to retain the old behavior, and intends to drop support
     for it altogether in a future release.  Please report any relevant
     concerns in the ticket for this change.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/674


File: setuptools.info,  Node: v24 3 1,  Next: v24 3 0,  Prev: v25 0 0,  Up: History<2>

9.195 v24.3.1
=============

23 Jul 2016

   * #398(1): Fix shebang handling on Windows in script headers where
     spaces in ‘sys.executable’ would produce an improperly-formatted
     shebang header, introduced in 12.0 with the fix for #188(2).

   * #663(3), #670(4): More style updates.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/398

   (2) https://github.com/pypa/setuptools/issues/188

   (3) https://github.com/pypa/setuptools/issues/663

   (4) https://github.com/pypa/setuptools/issues/670


File: setuptools.info,  Node: v24 3 0,  Next: v24 2 1,  Prev: v24 3 1,  Up: History<2>

9.196 v24.3.0
=============

21 Jul 2016

   * #516(1): Disable ‘os.link’ to avoid hard linking in
     ‘sdist.make_distribution’, avoiding errors on systems that support
     hard links but not on the file system in which the build is
     occurring.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/516


File: setuptools.info,  Node: v24 2 1,  Next: v24 2 0,  Prev: v24 3 0,  Up: History<2>

9.197 v24.2.1
=============

21 Jul 2016

   * #667(1): Update Metadata-Version to 1.2 when ‘python_requires’ is
     supplied.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/667


File: setuptools.info,  Node: v24 2 0,  Next: v24 1 1,  Prev: v24 2 1,  Up: History<2>

9.198 v24.2.0
=============

20 Jul 2016

   * #631(1): Add support for ‘python_requires’ keyword.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/631


File: setuptools.info,  Node: v24 1 1,  Next: v24 1 0,  Prev: v24 2 0,  Up: History<2>

9.199 v24.1.1
=============

20 Jul 2016

   * More style updates.  See #660(1), #661(2), #641(3).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/660

   (2) https://github.com/pypa/setuptools/issues/661

   (3) https://github.com/pypa/setuptools/issues/641


File: setuptools.info,  Node: v24 1 0,  Next: v24 0 3,  Prev: v24 1 1,  Up: History<2>

9.200 v24.1.0
=============

20 Jul 2016

   * #659(1): ‘setup.py’ now will fail fast and with a helpful error
     message when the necessary metadata is missing.

   * More style updates.  See #656(2), #635(3), #640(4), #644(5),
     #650(6), #652(7), and #655(8).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/659

   (2) https://github.com/pypa/setuptools/issues/656

   (3) https://github.com/pypa/setuptools/issues/635

   (4) https://github.com/pypa/setuptools/issues/640

   (5) https://github.com/pypa/setuptools/issues/644

   (6) https://github.com/pypa/setuptools/issues/650

   (7) https://github.com/pypa/setuptools/issues/652

   (8) https://github.com/pypa/setuptools/issues/655


File: setuptools.info,  Node: v24 0 3,  Next: v24 0 2,  Prev: v24 1 0,  Up: History<2>

9.201 v24.0.3
=============

14 Jul 2016

   * Updated style in much of the codebase to match community
     expectations.  See #632(1), #633(2), #634(3), #637(4), #639(5),
     #638(6), #642(7), #648(8).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/632

   (2) https://github.com/pypa/setuptools/issues/633

   (3) https://github.com/pypa/setuptools/issues/634

   (4) https://github.com/pypa/setuptools/issues/637

   (5) https://github.com/pypa/setuptools/issues/639

   (6) https://github.com/pypa/setuptools/issues/638

   (7) https://github.com/pypa/setuptools/issues/642

   (8) https://github.com/pypa/setuptools/issues/648


File: setuptools.info,  Node: v24 0 2,  Next: v24 0 1,  Prev: v24 0 3,  Up: History<2>

9.202 v24.0.2
=============

04 Jul 2016

   * If MSVC++14 is needed ‘setuptools.msvc’ now redirect user to Visual
     C++ Build Tools web page.


File: setuptools.info,  Node: v24 0 1,  Next: v24 0 0,  Prev: v24 0 2,  Up: History<2>

9.203 v24.0.1
=============

03 Jul 2016

   * #625(1) and #626(2): Fixes on ‘setuptools.msvc’ mainly for Python 2
     and Linux.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/625

   (2) https://github.com/pypa/setuptools/issues/626


File: setuptools.info,  Node: v24 0 0,  Next: v23 2 1,  Prev: v24 0 1,  Up: History<2>

9.204 v24.0.0
=============

02 Jul 2016

   * Pull Request #174(1): Add more aggressive support for standalone
     Microsoft Visual C++ compilers in msvc9compiler patch.
     Particularly : Windows SDK 6.1 and 7.0 (MSVC++ 9.0), Windows SDK
     7.1 (MSVC++ 10.0), Visual C++ Build Tools 2015 (MSVC++14)

   * Renamed ‘setuptools.msvc9_support’ to ‘setuptools.msvc’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/174


File: setuptools.info,  Node: v23 2 1,  Next: v23 1 0,  Prev: v24 0 0,  Up: History<2>

9.205 v23.2.1
=============

02 Jul 2016

Re-release of v23.2.0, which was missing the intended commits.

   * #623(1): Remove used of deprecated ‘U’ flag when reading manifests.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/623


File: setuptools.info,  Node: v23 1 0,  Next: v23 0 0,  Prev: v23 2 1,  Up: History<2>

9.206 v23.1.0
=============

24 Jun 2016

   * #619(1): Deprecated ‘tag_svn_revision’ distribution option.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/619


File: setuptools.info,  Node: v23 0 0,  Next: v22 0 5,  Prev: v23 1 0,  Up: History<2>

9.207 v23.0.0
=============

09 Jun 2016

   * #611(1): Removed ARM executables for CLI and GUI script launchers
     on Windows.  If this was a feature you cared about, please comment
     in the ticket.

   * #604(2): Removed docs building support.  The project now relies on
     documentation hosted at ‘https://setuptools.readthedocs.io/’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/611

   (2) https://github.com/pypa/setuptools/issues/604


File: setuptools.info,  Node: v22 0 5,  Next: v22 0 4,  Prev: v23 0 0,  Up: History<2>

9.208 v22.0.5
=============

03 Jun 2016

   * #604(1): Restore repository for upload_docs command to restore
     publishing of docs during release.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/604


File: setuptools.info,  Node: v22 0 4,  Next: v22 0 3,  Prev: v22 0 5,  Up: History<2>

9.209 v22.0.4
=============

03 Jun 2016

   * #589(1): Upload releases to pypi.io using the upload hostname and
     legacy path.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/589


File: setuptools.info,  Node: v22 0 3,  Next: v22 0 2,  Prev: v22 0 4,  Up: History<2>

9.210 v22.0.3
=============

03 Jun 2016

   * #589(1): Releases are now uploaded to pypi.io (Warehouse) even when
     releases are made on Twine via Travis.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/589


File: setuptools.info,  Node: v22 0 2,  Next: v22 0 1,  Prev: v22 0 3,  Up: History<2>

9.211 v22.0.2
=============

03 Jun 2016

   * #589(1): Releases are now uploaded to pypi.io (Warehouse).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/589


File: setuptools.info,  Node: v22 0 1,  Next: v22 0 0,  Prev: v22 0 2,  Up: History<2>

9.212 v22.0.1
=============

03 Jun 2016

   * #190(1): On Python 2, if unicode is passed for packages to
     ‘build_py’ command, it will be handled just as with text on Python
     3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/190


File: setuptools.info,  Node: v22 0 0,  Next: v21 2 2,  Prev: v22 0 1,  Up: History<2>

9.213 v22.0.0
=============

01 Jun 2016

Intended to be v21.3.0, but jaraco accidentally released as a major
bump.

   * #598(1): Setuptools now lists itself first in the User-Agent for
     web requests, better following the guidelines in RFC 7231(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/598

   (2) https://tools.ietf.org/html/rfc7231#section-5.5.3


File: setuptools.info,  Node: v21 2 2,  Next: v21 2 1,  Prev: v22 0 0,  Up: History<2>

9.214 v21.2.2
=============

29 May 2016

   * Minor fixes to changelog and docs.


File: setuptools.info,  Node: v21 2 1,  Next: v21 2 0,  Prev: v21 2 2,  Up: History<2>

9.215 v21.2.1
=============

22 May 2016

   * #261(1): Exclude directories when resolving globs in package_data.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/261


File: setuptools.info,  Node: v21 2 0,  Next: v21 1 0,  Prev: v21 2 1,  Up: History<2>

9.216 v21.2.0
=============

21 May 2016

   * #539(1): In the easy_install get_site_dirs, honor all paths found
     in ‘site.getsitepackages’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/539


File: setuptools.info,  Node: v21 1 0,  Next: v21 0 0,  Prev: v21 2 0,  Up: History<2>

9.217 v21.1.0
=============

18 May 2016

   * #572(1): In build_ext, now always import ‘_CONFIG_VARS’ from
     ‘distutils’ rather than from ‘sysconfig’ to allow
     ‘distutils.sysconfig.customize_compiler’ configure the OS X
     compiler for ‘-dynamiclib’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/572


File: setuptools.info,  Node: v21 0 0,  Next: v20 10 0,  Prev: v21 1 0,  Up: History<2>

9.218 v21.0.0
=============

02 May 2016

   * Removed ez_setup.py from Setuptools sdist.  The bootstrap script
     will be maintained in its own branch and should be generally be
     retrieved from its canonical location at
     ‘https://bootstrap.pypa.io/ez_setup.py’.


File: setuptools.info,  Node: v20 10 0,  Next: v20 9 0,  Prev: v21 0 0,  Up: History<2>

9.219 v20.10.0
==============

25 Apr 2016

   * #553(1): egg_info section is now generated in a deterministic
     order, matching the order generated by earlier versions of Python.
     Except on Python 2.6, order is preserved when existing settings are
     present.

   * #556(2): Update to Packaging 16.7(3), restoring support for
     deprecated ‘python_implmentation’ marker.

   * #555(4): Upload command now prompts for a password when uploading
     to PyPI (or other repository) if no password is present in .pypirc
     or in the keyring.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/553

   (2) https://github.com/pypa/setuptools/issues/556

   (3) https://github.com/pypa/packaging/blob/16.7/CHANGELOG.rst

   (4) https://github.com/pypa/setuptools/issues/555


File: setuptools.info,  Node: v20 9 0,  Next: v20 8 1,  Prev: v20 10 0,  Up: History<2>

9.220 v20.9.0
=============

16 Apr 2016

   * #548(1): Update certify version to 2016.2.28

   * #545(2): Safely handle deletion of non-zip eggs in rotate command.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/548

   (2) https://github.com/pypa/setuptools/issues/545


File: setuptools.info,  Node: v20 8 1,  Next: v20 8 0,  Prev: v20 9 0,  Up: History<2>

9.221 v20.8.1
=============

15 Apr 2016

   * Issue #544(1): Fix issue with extra environment marker processing
     in WorkingSet due to refactor in v20.7.0.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/544


File: setuptools.info,  Node: v20 8 0,  Next: v20 7 0,  Prev: v20 8 1,  Up: History<2>

9.222 v20.8.0
=============

15 Apr 2016

   * Issue #543(1): Re-release so that latest release doesn’t cause déjà
     vu with distribute and setuptools 0.7 in older environments.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/543


File: setuptools.info,  Node: v20 7 0,  Next: v20 6 8,  Prev: v20 8 0,  Up: History<2>

9.223 v20.7.0
=============

10 Apr 2016

   * Refactored extra environment marker processing in WorkingSet.

   * Issue #533(1): Fixed intermittent test failures.

   * Issue #536(2): In msvc9_support, trap additional exceptions that
     might occur when importing ‘distutils.msvc9compiler’ in mingw
     environments.

   * Issue #537(3): Provide better context when package metadata fails
     to decode in UTF-8.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/533

   (2) https://github.com/pypa/setuptools/issues/536

   (3) https://github.com/pypa/setuptools/issues/537


File: setuptools.info,  Node: v20 6 8,  Next: v20 6 7,  Prev: v20 7 0,  Up: History<2>

9.224 v20.6.8
=============

09 May 2016

   * Issue #523(1): Restored support for environment markers, now
     honoring ‘extra’ environment markers.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/523


File: setuptools.info,  Node: v20 6 7,  Next: v20 6 6,  Prev: v20 6 8,  Up: History<2>

9.225 v20.6.7
=============

31 Mar 2016

   * Issue #523(1): Disabled support for environment markers introduced
     in v20.5.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/523


File: setuptools.info,  Node: v20 6 6,  Next: v20 6 0,  Prev: v20 6 7,  Up: History<2>

9.226 v20.6.6
=============

30 Mar 2016

   * Issue #503(1): Restore support for PEP 345(2) environment markers
     by updating to Packaging 16.6(3).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/503

   (2) https://www.python.org/dev/peps/pep-0345/

   (3) https://github.com/pypa/packaging/blob/16.6/CHANGELOG.rst


File: setuptools.info,  Node: v20 6 0,  Next: 20 5,  Prev: v20 6 6,  Up: History<2>

9.227 v20.6.0
=============

29 Mar 2016

   * New release process that relies on bumpversion(1) and Travis CI for
     continuous deployment.

   * Project versioning semantics now follow semver(2) precisely.  The
     ‘v’ prefix on version numbers now also allows version numbers to be
     referenced in the changelog, e.g.
     ‘http://setuptools.readthedocs.io/en/latest/history.html#v20-6-0’.

   ---------- Footnotes ----------

   (1) https://github.com/peritus/bumpversion

   (2) https://semver.org


File: setuptools.info,  Node: 20 5,  Next: 20 4,  Prev: v20 6 0,  Up: History<2>

9.228 20.5
==========

29 Mar 2016

   * BB Pull Request #185(1), #470(2): Add support for environment
     markers in requirements in install_requires, setup_requires,
     tests_require as well as adding a test for the existing
     extra_requires machinery.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/185

   (2) https://github.com/pypa/setuptools/issues/470


File: setuptools.info,  Node: 20 4,  Next: 20 3 1,  Prev: 20 5,  Up: History<2>

9.229 20.4
==========

29 Mar 2016

   * Issue #422(1): Moved hosting to Github(2) from Bitbucket(3).
     Issues have been migrated, though all issues and comments are
     attributed to bb-migration.  So if you have a particular issue or
     issues to which you’ve been subscribed, you will want to “watch”
     the equivalent issue in Github.  The Bitbucket project will be
     retained for the indefinite future, but Github now hosts the
     canonical project repository.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/422

   (2) https://github.com/pypa/setuptools

   (3) https://bitbucket.org/pypa/setuptools


File: setuptools.info,  Node: 20 3 1,  Next: 20 3,  Prev: 20 4,  Up: History<2>

9.230 20.3.1
============

18 Mar 2016

   * Issue #519(1): Remove import hook when reloading the
     ‘pkg_resources’ module.

   * BB Pull Request #184(2): Update documentation in ‘pkg_resources’
     around new ‘Requirement’ implementation.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/519

   (2) https://bitbucket.org/pypa/setuptools/pull-request/184


File: setuptools.info,  Node: 20 3,  Next: 20 2 2,  Prev: 20 3 1,  Up: History<2>

9.231 20.3
==========

15 Mar 2016

   * BB Pull Request #179(1): ‘pkg_resources.Requirement’ objects are
     now a subclass of ‘packaging.requirements.Requirement’, allowing
     any environment markers and url (if any) to be affiliated with the
     requirement

   * BB Pull Request #179(2): Restore use of RequirementParseError
     exception unintentionally dropped in 20.2.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/179

   (2) https://bitbucket.org/pypa/setuptools/pull-request/179


File: setuptools.info,  Node: 20 2 2,  Next: 20 2 1,  Prev: 20 3,  Up: History<2>

9.232 20.2.2
============

27 Feb 2016

   * Issue #502(1): Correct regression in parsing of multiple version
     specifiers separated by commas and spaces.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/502


File: setuptools.info,  Node: 20 2 1,  Next: 20 2,  Prev: 20 2 2,  Up: History<2>

9.233 20.2.1
============

24 Feb 2016

   * Issue #499(1): Restore compatibility for legacy versions by bumping
     to packaging 16.4(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/499

   (2) https://github.com/pypa/packaging/blob/16.4/CHANGELOG.rst


File: setuptools.info,  Node: 20 2,  Next: 20 1 1,  Prev: 20 2 1,  Up: History<2>

9.234 20.2
==========

19 Feb 2016

   * Changelog now includes release dates and links to PEPs.

   * BB Pull Request #173(1): Replace dual PEP 345(2) _markerlib
     implementation and PEP 426(3) implementation of environment marker
     support from packaging 16.1(4) and PEP 508(5).  Fixes Issue
     #122(6).  See also BB Pull Request #175(7), BB Pull Request
     #168(8), and BB Pull Request #164(9).  Additionally:

             - ‘Requirement.parse’ no longer retains the order of
               extras.

             - ‘parse_requirements’ now requires that all versions be
               PEP-440(10) compliant, as revealed in #499(11).  Packages
               released with invalid local versions should be
               re-released using the proper local version syntax, e.g.
               ‘mypkg-1.0+myorg.1’.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/173

   (2) https://www.python.org/dev/peps/pep-0345/

   (3) https://www.python.org/dev/peps/pep-0426/

   (4) https://github.com/pypa/packaging/blob/16.1/CHANGELOG.rst

   (5) https://www.python.org/dev/peps/pep-0508/

   (6) https://github.com/pypa/setuptools/issues/122

   (7) https://bitbucket.org/pypa/setuptools/pull-request/175

   (8) https://bitbucket.org/pypa/setuptools/pull-request/168

   (9) https://bitbucket.org/pypa/setuptools/pull-request/164

   (10) https://www.python.org/dev/peps/pep-0440/

   (11) https://github.com/pypa/setuptools/issues/499


File: setuptools.info,  Node: 20 1 1,  Next: 20 1,  Prev: 20 2,  Up: History<2>

9.235 20.1.1
============

12 Feb 2016

   * Update ‘upload_docs’ command to also honor keyring for password
     resolution.


File: setuptools.info,  Node: 20 1,  Next: 20 0,  Prev: 20 1 1,  Up: History<2>

9.236 20.1
==========

11 Feb 2016

   * Added support for using passwords from keyring in the upload
     command.  See the upload docs(1) for details.

   ---------- Footnotes ----------

   (1) 
https://setuptools.readthedocs.io/en/latest/setuptools.html#upload-upload-source-and-or-egg-distributions-to-pypi


File: setuptools.info,  Node: 20 0,  Next: 19 7,  Prev: 20 1,  Up: History<2>

9.237 20.0
==========

07 Feb 2016

   * Issue #118(1): Once again omit the package metadata (egg-info) from
     the list of outputs in ‘--record’.  This version of setuptools can
     no longer be used to upgrade pip earlier than 6.0.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/118


File: setuptools.info,  Node: 19 7,  Next: 19 6 2,  Prev: 20 0,  Up: History<2>

9.238 19.7
==========

03 Feb 2016

   * Off-project PR: 0dcee79(1) and f9bd9b9(2) For FreeBSD, also honor
     root certificates from ca_root_nss(3).

   ---------- Footnotes ----------

   (1) 
https://github.com/pypa/setuptools/commit/0dcee791dfdcfacddaaec79b29f30a347a147413

   (2) 
https://github.com/pypa/setuptools/commit/f9bd9b9f5df54ef5a0bf8d16c3a889ab8c640580

   (3) 
https://github.com/pypa/setuptools/commit/3ae46c30225eb46e1f5aada1a19e88b79f04dc72


File: setuptools.info,  Node: 19 6 2,  Next: 19 6 1,  Prev: 19 7,  Up: History<2>

9.239 19.6.2
============

31 Jan 2016

   * Issue #491(1): Correct regression incurred in 19.4 where a
     double-namespace package installed using pip would cause a
     TypeError.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/491


File: setuptools.info,  Node: 19 6 1,  Next: 19 6,  Prev: 19 6 2,  Up: History<2>

9.240 19.6.1
============

29 Jan 2016

   * Restore compatibility for PyPy 3 compatibility lost in 19.4.1
     addressing Issue #487(1).

   * ‘setuptools.launch’ shim now loads scripts in a new namespace,
     avoiding getting relative imports from the setuptools package on
     Python 2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/487


File: setuptools.info,  Node: 19 6,  Next: 19 5,  Prev: 19 6 1,  Up: History<2>

9.241 19.6
==========

24 Jan 2016

   * Added a new entry script ‘setuptools.launch’, implementing the shim
     found in ‘pip.util.setuptools_build’.  Use this command to launch
     distutils-only packages under setuptools in the same way that pip
     does, causing the setuptools monkeypatching of distutils to be
     invoked prior to invoking a script.  Useful for debugging or
     otherwise installing a distutils-only package under setuptools when
     pip isn’t available or otherwise does not expose the desired
     functionality.  For example:

          $ python -m setuptools.launch setup.py develop

   * Issue #488(1): Fix dual manifestation of Extension class in
     extension packages installed as dependencies when Cython is
     present.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/488


File: setuptools.info,  Node: 19 5,  Next: 19 4 1,  Prev: 19 6,  Up: History<2>

9.242 19.5
==========

23 Jan 2016

   * Issue #486(1): Correct TypeError when getfilesystemencoding returns
     None.

   * Issue #139(2): Clarified the license as MIT.

   * BB Pull Request #169(3): Removed special handling of command spec
     in scripts for Jython.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/486

   (2) https://github.com/pypa/setuptools/issues/139

   (3) https://bitbucket.org/pypa/setuptools/pull-request/169


File: setuptools.info,  Node: 19 4 1,  Next: 19 4,  Prev: 19 5,  Up: History<2>

9.243 19.4.1
============

23 Jan 2016

   * Issue #487(1): Use direct invocation of ‘importlib.machinery’ in
     ‘pkg_resources’ to avoid missing detection on relevant platforms.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/487


File: setuptools.info,  Node: 19 4,  Next: 19 3,  Prev: 19 4 1,  Up: History<2>

9.244 19.4
==========

16 Jan 2016

   * Issue #341(1): Correct error in path handling of package data files
     in ‘build_py’ command when package is empty.

   * Distribute #323(2), Issue #141(3), Issue #207(4), and BB Pull
     Request #167(5): Another implementation of
     ‘pkg_resources.WorkingSet’ and ‘pkg_resources.Distribution’ that
     supports replacing an extant package with a new one, allowing for
     setup_requires dependencies to supersede installed packages for the
     session.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/341

   (2) https://bitbucket.org/tarek/distribute/issue/323

   (3) https://github.com/pypa/setuptools/issues/141

   (4) https://github.com/pypa/setuptools/issues/207

   (5) https://bitbucket.org/pypa/setuptools/pull-request/167


File: setuptools.info,  Node: 19 3,  Next: 19 2,  Prev: 19 4,  Up: History<2>

9.245 19.3
==========

06 Jan 2016

   * Issue #229(1): Implement new technique for readily incorporating
     dependencies conditionally from vendored copies or primary
     locations.  Adds a new dependency on six.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/229


File: setuptools.info,  Node: 19 2,  Next: 19 1 1,  Prev: 19 3,  Up: History<2>

9.246 19.2
==========

25 Dec 2015

   * BB Pull Request #163(1): Add get_command_list method to
     Distribution.

   * BB Pull Request #162(2): Add missing whitespace to multiline string
     literals.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/163

   (2) https://bitbucket.org/pypa/setuptools/pull-request/162


File: setuptools.info,  Node: 19 1 1,  Next: 19 1,  Prev: 19 2,  Up: History<2>

9.247 19.1.1
============

16 Dec 2015

   * Issue #476(1): Cast version to string (using default encoding) to
     avoid creating Unicode types on Python 2 clients.

   * Issue #477(2): In Powershell downloader, use explicit rendering of
     strings, rather than rely on ‘repr’, which can be incorrect
     (especially on Python 2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/476

   (2) https://github.com/pypa/setuptools/issues/477


File: setuptools.info,  Node: 19 1,  Next: 19 0,  Prev: 19 1 1,  Up: History<2>

9.248 19.1
==========

16 Dec 2015

   * Issue #215(1): The bootstrap script ‘ez_setup.py’ now automatically
     detects the latest version of setuptools (using PyPI JSON API)
     rather than hard-coding a particular value.

   * Issue #475(2): Fix incorrect usage in _translate_metadata2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/215

   (2) https://github.com/pypa/setuptools/issues/475


File: setuptools.info,  Node: 19 0,  Next: 18 8 1,  Prev: 19 1,  Up: History<2>

9.249 19.0
==========

15 Dec 2015

   * Issue #442(1): Use RawConfigParser for parsing .pypirc file.
     Interpolated values are no longer honored in .pypirc files.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/442


File: setuptools.info,  Node: 18 8 1,  Next: 18 8,  Prev: 19 0,  Up: History<2>

9.250 18.8.1
============

13 Dec 2015

   * Issue #440(1): Prevent infinite recursion when a SandboxViolation
     or other UnpickleableException occurs in a sandbox context with
     setuptools hidden.  Fixes regression introduced in Setuptools 12.0.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/440


File: setuptools.info,  Node: 18 8,  Next: 18 7 1,  Prev: 18 8 1,  Up: History<2>

9.251 18.8
==========

11 Dec 2015

   * Deprecated ‘egg_info.get_pkg_info_revision’.

   * Issue #471(1): Don’t rely on repr for an HTML attribute value in
     package_index.

   * Issue #419(2): Avoid errors in FileMetadata when the metadata
     directory is broken.

   * Issue #472(3): Remove deprecated use of ‘U’ in mode parameter when
     opening files.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/471

   (2) https://github.com/pypa/setuptools/issues/419

   (3) https://github.com/pypa/setuptools/issues/472


File: setuptools.info,  Node: 18 7 1,  Next: 18 7,  Prev: 18 8,  Up: History<2>

9.252 18.7.1
============

01 Dec 2015

   * Issue #469(1): Refactored logic for Issue #419(2) fix to re-use
     metadata loading from Provider.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/469

   (2) https://github.com/pypa/setuptools/issues/419


File: setuptools.info,  Node: 18 7,  Next: 18 6 1,  Prev: 18 7 1,  Up: History<2>

9.253 18.7
==========

28 Nov 2015

   * Update dependency on certify.

   * BB Pull Request #160(1): Improve detection of gui script in
     ‘easy_install._adjust_header’.

   * Made ‘test.test_args’ a non-data property; alternate fix for the
     issue reported in BB Pull Request #155(2).

   * Issue #453(3): In ‘ez_setup’ bootstrap module, unload all
     ‘pkg_resources’ modules following download.

   * BB Pull Request #158(4): Honor PEP-488(5) when excluding files for
     namespace packages.

   * Issue #419(6) and BB Pull Request #144(7): Add experimental support
     for reading the version info from distutils-installed metadata
     rather than using the version in the filename.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/160

   (2) https://bitbucket.org/pypa/setuptools/pull-request/155

   (3) https://github.com/pypa/setuptools/issues/453

   (4) https://bitbucket.org/pypa/setuptools/pull-request/158

   (5) https://www.python.org/dev/peps/pep-0488/

   (6) https://github.com/pypa/setuptools/issues/419

   (7) https://bitbucket.org/pypa/setuptools/pull-request/144


File: setuptools.info,  Node: 18 6 1,  Next: 18 6,  Prev: 18 7,  Up: History<2>

9.254 18.6.1
============

24 Nov 2015

   * Issue #464(1): Correct regression in invocation of superclass on
     old-style class on Python 2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/464


File: setuptools.info,  Node: 18 6,  Next: 18 5,  Prev: 18 6 1,  Up: History<2>

9.255 18.6
==========

24 Nov 2015

   * Issue #439(1): When installing entry_point scripts under
     development, omit the version number of the package, allowing any
     version of the package to be used.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/439


File: setuptools.info,  Node: 18 5,  Next: 18 4,  Prev: 18 6,  Up: History<2>

9.256 18.5
==========

01 Nov 2015

   * In preparation for dropping support for Python 3.2, a warning is
     now logged when pkg_resources is imported on Python 3.2 or earlier
     Python 3 versions.

   * Add support for python_platform_implementation environment
     marker(1).

   * Fix dictionary mutation during iteration(2).

   ---------- Footnotes ----------

   (1) 
https://github.com/pypa/setuptools/commit/94416707fd59a65f4a8f7f70541d6b3fc018b626

   (2) 
https://github.com/pypa/setuptools/commit/57ebfa41e0f96b97e599ecd931b7ae8a143e096e


File: setuptools.info,  Node: 18 4,  Next: 18 3 2,  Prev: 18 5,  Up: History<2>

9.257 18.4
==========

10 Oct 2015

   * Issue #446(1): Test command now always invokes unittest, even if no
     test suite is supplied.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/446


File: setuptools.info,  Node: 18 3 2,  Next: 18 3 1,  Prev: 18 4,  Up: History<2>

9.258 18.3.2
============

19 Sep 2015

   * Correct another regression in setuptools.findall where the fix for
     Python #12885(1) was lost.

   ---------- Footnotes ----------

   (1) http://bugs.python.org/issue12885


File: setuptools.info,  Node: 18 3 1,  Next: 18 3,  Prev: 18 3 2,  Up: History<2>

9.259 18.3.1
============

07 Sep 2015

   * Issue #425(1): Correct regression in setuptools.findall.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/425


File: setuptools.info,  Node: 18 3,  Next: 18 2,  Prev: 18 3 1,  Up: History<2>

9.260 18.3
==========

06 Sep 2015

   * BB Pull Request #135(1): Setuptools now allows disabling of the
     manipulation of the sys.path during the processing of the
     easy-install.pth file.  To do so, set the environment variable
     ‘SETUPTOOLS_SYS_PATH_TECHNIQUE’ to anything but “rewrite” (consider
     “raw”).  During any install operation with manipulation disabled,
     setuptools packages will be appended to sys.path naturally.

     Future versions may change the default behavior to disable
     manipulation.  If so, the default behavior can be retained by
     setting the variable to “rewrite”.

   * Issue #257(2): ‘easy_install --version’ now shows more detail about
     the installation location and Python version.

   * Refactor setuptools.findall in preparation for re-submission back
     to distutils.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/135

   (2) https://github.com/pypa/setuptools/issues/257


File: setuptools.info,  Node: 18 2,  Next: 18 1,  Prev: 18 3,  Up: History<2>

9.261 18.2
==========

19 Aug 2015

   * Issue #412(1): More efficient directory search in ‘find_packages’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/412


File: setuptools.info,  Node: 18 1,  Next: 18 0 1,  Prev: 18 2,  Up: History<2>

9.262 18.1
==========

02 Aug 2015

   * Upgrade to vendored packaging 15.3(1).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/packaging/blob/15.3/CHANGELOG.rst


File: setuptools.info,  Node: 18 0 1,  Next: 18 0,  Prev: 18 1,  Up: History<2>

9.263 18.0.1
============

24 Jun 2015

   * Issue #401(1): Fix failure in test suite.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/401


File: setuptools.info,  Node: 18 0,  Next: 17 1 1,  Prev: 18 0 1,  Up: History<2>

9.264 18.0
==========

13 Jun 2015

   * Dropped support for builds with Pyrex.  Only Cython is supported.

   * Issue #288(1): Detect Cython later in the build process, after
     ‘setup_requires’ dependencies are resolved.  Projects backed by
     Cython can now be readily built with a ‘setup_requires’ dependency.
     For example:

          ext = setuptools.Extension('mylib', ['src/CythonStuff.pyx', 'src/CStuff.c'])
          setuptools.setup(
              ...
              ext_modules=[ext],
              setup_requires=['cython'],
          )

     For compatibility with older versions of setuptools, packagers
     should still include ‘src/CythonMod.c’ in the source distributions
     or require that Cython be present before building source
     distributions.  However, for systems with this build of setuptools,
     Cython will be downloaded on demand.

   * Issue #396(2): Fixed test failure on OS X.

   * BB Pull Request #136(3): Remove excessive quoting from shebang
     headers for Jython.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/288

   (2) https://github.com/pypa/setuptools/issues/396

   (3) https://bitbucket.org/pypa/setuptools/pull-request/136


File: setuptools.info,  Node: 17 1 1,  Next: 17 1,  Prev: 18 0,  Up: History<2>

9.265 17.1.1
============

08 Jun 2015

   * Backed out unintended changes to pkg_resources, restoring removal
     of deprecated imp module (ref(1)).

   ---------- Footnotes ----------

   (1) 
https://bitbucket.org/pypa/setuptools/commits/f572ec9563d647fa8d4ffc534f2af8070ea07a8b#comment-1881283


File: setuptools.info,  Node: 17 1,  Next: 17 0,  Prev: 17 1 1,  Up: History<2>

9.266 17.1
==========

07 Jun 2015

   * Issue #380(1): Add support for range operators on environment
     marker evaluation.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/380


File: setuptools.info,  Node: 17 0,  Next: 16 0,  Prev: 17 1,  Up: History<2>

9.267 17.0
==========

28 May 2015

   * Issue #378(1): Do not use internal importlib._bootstrap module.

   * Issue #390(2): Disallow console scripts with path separators in the
     name.  Removes unintended functionality and brings behavior into
     parity with pip.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/378

   (2) https://github.com/pypa/setuptools/issues/390


File: setuptools.info,  Node: 16 0,  Next: 15 2,  Prev: 17 0,  Up: History<2>

9.268 16.0
==========

18 May 2015

   * BB Pull Request #130(1): Better error messages for errors in parsed
     requirements.

   * BB Pull Request #133(2): Removed ‘setuptools.tests’ from the
     installed packages.

   * BB Pull Request #129(3): Address deprecation warning due to usage
     of imp module.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/130

   (2) https://bitbucket.org/pypa/setuptools/pull-request/133

   (3) https://bitbucket.org/pypa/setuptools/pull-request/129


File: setuptools.info,  Node: 15 2,  Next: 15 1,  Prev: 16 0,  Up: History<2>

9.269 15.2
==========

26 Apr 2015

   * Issue #373(1): Provisionally expose
     ‘pkg_resources._initialize_master_working_set’, allowing for
     imperative re-initialization of the master working set.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/373


File: setuptools.info,  Node: 15 1,  Next: 15 0,  Prev: 15 2,  Up: History<2>

9.270 15.1
==========

15 Apr 2015

   * Updated to Packaging 15.1(1) to address Packaging #28(2).

   * Fix ‘setuptools.sandbox._execfile()’ with Python 3.1.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/packaging/blob/15.1/CHANGELOG.rst

   (2) https://github.com/pypa/packaging/issues/28


File: setuptools.info,  Node: 15 0,  Next: 14 3 1,  Prev: 15 1,  Up: History<2>

9.271 15.0
==========

03 Apr 2015

   * BB Pull Request #126(1): DistributionNotFound message now lists the
     package or packages that required it.  E.g.:

          pkg_resources.DistributionNotFound: The 'colorama>=0.3.1' distribution was not found and is required by smlib.log.

     Note that zc.buildout once dependended on the string rendering of
     this message to determine the package that was not found.  This
     expectation has since been changed, but older versions of buildout
     may experience problems.  See Buildout #242(2) for details.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/126

   (2) https://github.com/buildout/buildout/issues/242


File: setuptools.info,  Node: 14 3 1,  Next: 14 3,  Prev: 15 0,  Up: History<2>

9.272 14.3.1
============

20 Mar 2015

   * Issue #307(1): Removed PEP-440(2) warning during parsing of
     versions in ‘pkg_resources.Distribution’.

   * Issue #364(3): Replace deprecated usage with recommended usage of
     ‘EntryPoint.load’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/307

   (2) https://www.python.org/dev/peps/pep-0440/

   (3) https://github.com/pypa/setuptools/issues/364


File: setuptools.info,  Node: 14 3,  Next: 14 2,  Prev: 14 3 1,  Up: History<2>

9.273 14.3
==========

15 Mar 2015

   * Issue #254(1): When creating temporary egg cache on Unix, use mode
     755 for creating the directory to avoid the subsequent warning if
     the directory is group writable.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/254


File: setuptools.info,  Node: 14 2,  Next: 14 1 1,  Prev: 14 3,  Up: History<2>

9.274 14.2
==========

15 Mar 2015

   * Issue #137(1): Update ‘Distribution.hashcmp’ so that Distributions
     with None for pyversion or platform can be compared against
     Distributions defining those attributes.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/137


File: setuptools.info,  Node: 14 1 1,  Next: 14 1,  Prev: 14 2,  Up: History<2>

9.275 14.1.1
============

14 Mar 2015

   * Issue #360(1): Removed undesirable behavior from test runs,
     preventing write tests and installation to system site packages.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/360


File: setuptools.info,  Node: 14 1,  Next: 14 0,  Prev: 14 1 1,  Up: History<2>

9.276 14.1
==========

14 Mar 2015

   * BB Pull Request #125(1): Add ‘__ne__’ to Requirement class.

   * Various refactoring of easy_install.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/125


File: setuptools.info,  Node: 14 0,  Next: 13 0 2,  Prev: 14 1,  Up: History<2>

9.277 14.0
==========

06 Mar 2015

   * Bootstrap script now accepts ‘--to-dir’ to customize save directory
     or allow for re-use of existing repository of setuptools versions.
     See BB Pull Request #112(1) for background.

   * Issue #285(2): ‘easy_install’ no longer will default to installing
     packages to the “user site packages” directory if it is itself
     installed there.  Instead, the user must pass ‘--user’ in all cases
     to install packages to the user site packages.  This behavior now
     matches that of “pip install”.  To configure an environment to
     always install to the user site packages, consider using the
     “install-dir” and “scripts-dir” parameters to easy_install through
     an appropriate distutils config file.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/112

   (2) https://github.com/pypa/setuptools/issues/285


File: setuptools.info,  Node: 13 0 2,  Next: 13 0 1,  Prev: 14 0,  Up: History<2>

9.278 13.0.2
============

06 Mar 2015

   * Issue #359(1): Include pytest.ini in the sdist so invocation of
     py.test on the sdist honors the pytest configuration.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/359


File: setuptools.info,  Node: 13 0 1,  Next: 13 0,  Prev: 13 0 2,  Up: History<2>

9.279 13.0.1
============

05 Mar 2015

Re-release of 13.0.  Intermittent connectivity issues caused the release
process to fail and PyPI uploads no longer accept files for 13.0.


File: setuptools.info,  Node: 13 0,  Next: 12 4,  Prev: 13 0 1,  Up: History<2>

9.280 13.0
==========

05 Mar 2015

   * Issue #356(1): Back out BB Pull Request #119(2) as it requires
     Setuptools 10 or later as the source during an upgrade.

   * Removed build_py class from setup.py.  According to 892f439d216e,
     this functionality was added to support upgrades from old
     Distribute versions, 0.6.5 and 0.6.6.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/356

   (2) https://bitbucket.org/pypa/setuptools/pull-request/119


File: setuptools.info,  Node: 12 4,  Next: 12 3,  Prev: 13 0,  Up: History<2>

9.281 12.4
==========

04 Mar 2015

   * BB Pull Request #119(1): Restore writing of ‘setup_requires’ to
     metadata (previously added in 8.4 and removed in 9.0).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/119


File: setuptools.info,  Node: 12 3,  Next: 12 2,  Prev: 12 4,  Up: History<2>

9.282 12.3
==========

26 Feb 2015

   * Documentation is now linked using the rst.linker package.

   * Fix ‘setuptools.command.easy_install.extract_wininst_cfg()’ with
     Python 2.6 and 2.7.

   * Issue #354(1).  Added documentation on building setuptools
     documentation.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/354


File: setuptools.info,  Node: 12 2,  Next: 12 1,  Prev: 12 3,  Up: History<2>

9.283 12.2
==========

16 Feb 2015

   * Issue #345(1): Unload all modules under pkg_resources during
     ‘ez_setup.use_setuptools()’.

   * Issue #336(2): Removed deprecation from ‘ez_setup.use_setuptools’,
     as it is clearly still used by buildout’s bootstrap.  ‘ez_setup’
     remains deprecated for use by individual packages.

   * Simplified implementation of ‘ez_setup.use_setuptools’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/345

   (2) https://github.com/pypa/setuptools/issues/336


File: setuptools.info,  Node: 12 1,  Next: 12 0 5,  Prev: 12 2,  Up: History<2>

9.284 12.1
==========

10 Feb 2015

   * BB Pull Request #118(1): Soften warning for non-normalized versions
     in Distribution.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/118


File: setuptools.info,  Node: 12 0 5,  Next: 12 0 4,  Prev: 12 1,  Up: History<2>

9.285 12.0.5
============

26 Jan 2015

   * Issue #339(1): Correct Attribute reference in
     ‘cant_write_to_target’.

   * Issue #336(2): Deprecated ‘ez_setup.use_setuptools’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/339

   (2) https://github.com/pypa/setuptools/issues/336


File: setuptools.info,  Node: 12 0 4,  Next: 12 0 3,  Prev: 12 0 5,  Up: History<2>

9.286 12.0.4
============

20 Jan 2015

   * Issue #335(1): Fix script header generation on Windows.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/335


File: setuptools.info,  Node: 12 0 3,  Next: 12 0 2,  Prev: 12 0 4,  Up: History<2>

9.287 12.0.3
============

18 Jan 2015

   * Fixed incorrect class attribute in ‘install_scripts’.  Tests would
     be nice.


File: setuptools.info,  Node: 12 0 2,  Next: 12 0 1,  Prev: 12 0 3,  Up: History<2>

9.288 12.0.2
============

18 Jan 2015

   * Issue #331(1): Fixed ‘install_scripts’ command on Windows systems
     corrupting the header.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/331


File: setuptools.info,  Node: 12 0 1,  Next: 12 0,  Prev: 12 0 2,  Up: History<2>

9.289 12.0.1
============

16 Jan 2015

   * Restore ‘setuptools.command.easy_install.sys_executable’ for pbr
     compatibility.  For the future, tools should construct a
     CommandSpec explicitly.


File: setuptools.info,  Node: 12 0,  Next: 11 3 1,  Prev: 12 0 1,  Up: History<2>

9.290 12.0
==========

16 Jan 2015

   * Issue #188(1): Setuptools now support multiple entities in the
     value for ‘build.executable’, such that an executable of
     “/usr/bin/env my-python” may be specified.  This means that systems
     with a specified executable whose name has spaces in the path must
     be updated to escape or quote that value.

   * Deprecated ‘easy_install.ScriptWriter.get_writer’, replaced by
     ‘.best()’ with slightly different semantics (no force_windows
     flag).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/188


File: setuptools.info,  Node: 11 3 1,  Next: 11 3,  Prev: 12 0,  Up: History<2>

9.291 11.3.1
============

06 Jan 2015

   * Issue #327(1): Formalize and restore support for any printable
     character in an entry point name.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/327


File: setuptools.info,  Node: 11 3,  Next: 11 2,  Prev: 11 3 1,  Up: History<2>

9.292 11.3
==========

05 Jan 2015

   * Expose ‘EntryPoint.resolve’ in place of EntryPoint._load,
     implementing the simple, non-requiring load.  Deprecated all uses
     of ‘EntryPoint._load’ except for calling with no parameters, which
     is just a shortcut for ‘ep.require(); ep.resolve();’.

     Apps currently invoking ‘ep.load(require=False)’ should instead do
     the following if wanting to avoid the deprecating warning:

          getattr(ep, "resolve", lambda: ep.load(require=False))()


File: setuptools.info,  Node: 11 2,  Next: 11 1,  Prev: 11 3,  Up: History<2>

9.293 11.2
==========

05 Jan 2015

   * Pip #2326(1): Report deprecation warning at stacklevel 2 for easier
     diagnosis.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/pip/issues/2326


File: setuptools.info,  Node: 11 1,  Next: 11 0,  Prev: 11 2,  Up: History<2>

9.294 11.1
==========

04 Jan 2015

   * Issue #281(1): Since Setuptools 6.1 (Issue #268(2)), a ValueError
     would be raised in certain cases where VersionConflict was raised
     with two arguments, which occurred in
     ‘pkg_resources.WorkingSet.find’.  This release adds support for
     indicating the dependent packages while maintaining support for a
     VersionConflict when no dependent package context is known.  New
     unit tests now capture the expected interface.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/281

   (2) https://github.com/pypa/setuptools/issues/268


File: setuptools.info,  Node: 11 0,  Next: 10 2 1,  Prev: 11 1,  Up: History<2>

9.295 11.0
==========

02 Jan 2015

   * Interop #3(1): Upgrade to Packaging 15.0(2); updates to PEP 440(3)
     so that >1.7 does not exclude 1.7.1 but does exclude 1.7.0 and
     1.7.0.post1.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/interoperability-peps/issues/3

   (2) https://github.com/pypa/packaging/blob/15.0/CHANGELOG.rst

   (3) https://www.python.org/dev/peps/pep-0440/


File: setuptools.info,  Node: 10 2 1,  Next: 10 2,  Prev: 11 0,  Up: History<2>

9.296 10.2.1
============

02 Jan 2015

   * Issue #323(1): Fix regression in entry point name parsing.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/323


File: setuptools.info,  Node: 10 2,  Next: 10 1,  Prev: 10 2 1,  Up: History<2>

9.297 10.2
==========

02 Jan 2015

   * Deprecated use of EntryPoint.load(require=False).  Passing a
     boolean to a function to select behavior is an anti-pattern.
     Instead use ‘Entrypoint._load()’.

   * Substantial refactoring of all unit tests.  Tests are now much
     leaner and re-use a lot of fixtures and contexts for better clarity
     of purpose.


File: setuptools.info,  Node: 10 1,  Next: 10 0 1,  Prev: 10 2,  Up: History<2>

9.298 10.1
==========

31 Dec 2014

   * Issue #320(1): Added a compatibility implementation of
     ‘sdist._default_revctrl’ so that systems relying on that interface
     do not fail (namely, Ubuntu 12.04 and similar Debian releases).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/320


File: setuptools.info,  Node: 10 0 1,  Next: 10 0,  Prev: 10 1,  Up: History<2>

9.299 10.0.1
============

30 Dec 2014

   * Issue #319(1): Fixed issue installing pure distutils packages.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/319


File: setuptools.info,  Node: 10 0,  Next: 9 1,  Prev: 10 0 1,  Up: History<2>

9.300 10.0
==========

30 Dec 2014

   * Issue #313(1): Removed built-in support for subversion.  Projects
     wishing to retain support for subversion will need to use a third
     party library.  The extant implementation is being ported to
     setuptools_svn(2).

   * Issue #315(3): Updated setuptools to hide its own loaded modules
     during installation of another package.  This change will enable
     setuptools to upgrade (or downgrade) itself even when its own
     metadata and implementation change.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/313

   (2) https://pypi.org/project/setuptools_svn/

   (3) https://github.com/pypa/setuptools/issues/315


File: setuptools.info,  Node: 9 1,  Next: 9 0 1,  Prev: 10 0,  Up: History<2>

9.301 9.1
=========

29 Dec 2014

   * Prefer vendored packaging library as recommended(1).

   ---------- Footnotes ----------

   (1) 
https://github.com/pypa/setuptools/commit/170657b68f4b92e7e1bf82f5e19a831f5744af67


File: setuptools.info,  Node: 9 0 1,  Next: 9 0,  Prev: 9 1,  Up: History<2>

9.302 9.0.1
===========

29 Dec 2014

   * Issue #312(1): Restored presence of pkg_resources API tests
     (doctest) to sdist.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/312


File: setuptools.info,  Node: 9 0,  Next: 8 4,  Prev: 9 0 1,  Up: History<2>

9.303 9.0
=========

28 Dec 2014

   * Issue #314(1): Disabled support for ‘setup_requires’ metadata to
     avoid issue where Setuptools was unable to upgrade over earlier
     versions.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/314


File: setuptools.info,  Node: 8 4,  Next: 8 3,  Prev: 9 0,  Up: History<2>

9.304 8.4
=========

26 Dec 2014

   * BB Pull Request #106(1): Now write ‘setup_requires’ metadata.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/106


File: setuptools.info,  Node: 8 3,  Next: 8 2 1,  Prev: 8 4,  Up: History<2>

9.305 8.3
=========

24 Dec 2014

   * Issue #311(1): Decoupled pkg_resources from setuptools once again.
     ‘pkg_resources’ is now a package instead of a module.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/311


File: setuptools.info,  Node: 8 2 1,  Next: 8 2,  Prev: 8 3,  Up: History<2>

9.306 8.2.1
===========

18 Dec 2014

   * Issue #306(1): Suppress warnings about Version format except in
     select scenarios (such as installation).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/306


File: setuptools.info,  Node: 8 2,  Next: 8 1,  Prev: 8 2 1,  Up: History<2>

9.307 8.2
=========

18 Dec 2014

   * BB Pull Request #85(1): Search egg-base when adding egg-info to
     manifest.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/85


File: setuptools.info,  Node: 8 1,  Next: 8 0 4,  Prev: 8 2,  Up: History<2>

9.308 8.1
=========

18 Dec 2014

   * Upgrade ‘packaging’ to 14.5, giving preference to “rc” as
     designator for release candidates over “c”.

   * PEP-440(1) warnings are now raised as their own class,
     ‘pkg_resources.PEP440Warning’, instead of RuntimeWarning.

   * Disabled warnings on empty versions.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0440/


File: setuptools.info,  Node: 8 0 4,  Next: 8 0 3,  Prev: 8 1,  Up: History<2>

9.309 8.0.4
===========

15 Dec 2014

   * Upgrade ‘packaging’ to 14.4, fixing an error where there is a
     different result for if 2.0.5 is contained within >2.0dev and
     >2.0.dev even though normalization rules should have made them
     equal.

   * Issue #296(1): Add warning when a version is parsed as legacy.
     This warning will make it easier for developers to recognize
     deprecated version numbers.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/296


File: setuptools.info,  Node: 8 0 3,  Next: 8 0 2,  Prev: 8 0 4,  Up: History<2>

9.310 8.0.3
===========

15 Dec 2014

   * Issue #296(1): Restored support for ‘__hash__’ on parse_version
     results.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/296


File: setuptools.info,  Node: 8 0 2,  Next: 8 0 1,  Prev: 8 0 3,  Up: History<2>

9.311 8.0.2
===========

14 Dec 2014

   * Issue #296(1): Restored support for ‘__getitem__’ and sort
     operations on parse_version result.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/296


File: setuptools.info,  Node: 8 0 1,  Next: 8 0,  Prev: 8 0 2,  Up: History<2>

9.312 8.0.1
===========

13 Dec 2014

   * Issue #296(1): Restore support for iteration over parse_version
     result, but deprecated that usage with a warning.  Fixes failure
     with buildout.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/296


File: setuptools.info,  Node: 8 0,  Next: 7 0,  Prev: 8 0 1,  Up: History<2>

9.313 8.0
=========

13 Dec 2014

   * Implement PEP 440(1) within pkg_resources and setuptools.  This
     change deprecates some version numbers such that they will no
     longer be installable without using the ‘===’ escape hatch.  See
     the changes to test_resources(2) for specific examples of version
     numbers and specifiers that are no longer supported.  Setuptools
     now “vendors” the packaging(3) library.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0440/

   (2) 
https://bitbucket.org/pypa/setuptools/commits/dcd552da643c4448056de84c73d56da6d70769d5#chg-setuptools/tests/test_resources.py

   (3) https://github.com/pypa/packaging


File: setuptools.info,  Node: 7 0,  Next: 6 1,  Prev: 8 0,  Up: History<2>

9.314 7.0
=========

19 Oct 2014

   * Issue #80(1), Issue #209(2): Eggs that are downloaded for
     ‘setup_requires’, ‘test_requires’, etc.  are now placed in a
     ‘./.eggs’ directory instead of directly in the current directory.
     This choice of location means the files can be readily managed
     (removed, ignored).  Additionally, later phases or invocations of
     setuptools will not detect the package as already installed and
     ignore it for permanent install (See #209(3)).

     This change is indicated as backward-incompatible as installations
     that depend on the installation in the current directory will need
     to account for the new location.  Systems that ignore ‘*.egg’ will
     probably need to be adapted to ignore ‘.eggs’.  The files will need
     to be manually moved or will be retrieved again.  Most use cases
     will require no attention.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/80

   (2) https://github.com/pypa/setuptools/issues/209

   (3) https://github.com/pypa/setuptools/issues/209


File: setuptools.info,  Node: 6 1,  Next: 6 0 2,  Prev: 7 0,  Up: History<2>

9.315 6.1
=========

11 Oct 2014

   * Issue #268(1): When resolving package versions, a VersionConflict
     now reports which package previously required the conflicting
     version.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/268


File: setuptools.info,  Node: 6 0 2,  Next: 6 0 1,  Prev: 6 1,  Up: History<2>

9.316 6.0.2
===========

29 Sep 2014

   * Issue #262(1): Fixed regression in pip install due to egg-info
     directories being omitted.  Re-opens Issue #118(2).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/262

   (2) https://github.com/pypa/setuptools/issues/118


File: setuptools.info,  Node: 6 0 1,  Next: 6 0,  Prev: 6 0 2,  Up: History<2>

9.317 6.0.1
===========

27 Sep 2014

   * Issue #259(1): Fixed regression with namespace package handling on
     ‘single version, externally managed’ installs.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/259


File: setuptools.info,  Node: 6 0,  Next: 5 8,  Prev: 6 0 1,  Up: History<2>

9.318 6.0
=========

27 Sep 2014

   * Issue #100(1): When building a distribution, Setuptools will no
     longer match default files using platform-dependent case
     sensitivity, but rather will only match the files if their case
     matches exactly.  As a result, on Windows and other
     case-insensitive file systems, files with names such as
     ‘readme.txt’ or ‘README.TXT’ will be omitted from the distribution
     and a warning will be issued indicating that ‘README.txt’ was not
     found.  Other filenames affected are:

             - README.rst

             - README

             - setup.cfg

             - setup.py (or the script name)

             - test/test*.py

     Any users producing distributions with filenames that match those
     above case-insensitively, but not case-sensitively, should rename
     those files in their repository for better portability.

   * BB Pull Request #72(2): When using
     ‘single_version_externally_managed’, the exclusion list now
     includes Python 3.2 ‘__pycache__’ entries.

   * BB Pull Request #76(3) and BB Pull Request #78(4): lines in
     top_level.txt are now ordered deterministically.

   * Issue #118(5): The egg-info directory is now no longer included in
     the list of outputs.

   * Issue #258(6): Setuptools now patches distutils msvc9compiler to
     recognize the specially-packaged compiler package for easy
     extension module support on Python 2.6, 2.7, and 3.2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/100

   (2) https://bitbucket.org/pypa/setuptools/pull-request/72

   (3) https://bitbucket.org/pypa/setuptools/pull-request/76

   (4) https://bitbucket.org/pypa/setuptools/pull-request/78

   (5) https://github.com/pypa/setuptools/issues/118

   (6) https://github.com/pypa/setuptools/issues/258


File: setuptools.info,  Node: 5 8,  Next: 5 7,  Prev: 6 0,  Up: History<2>

9.319 5.8
=========

18 Sep 2014

   * Issue #237(1): ‘pkg_resources’ now uses explicit detection of
     Python 2 vs.  Python 3, supporting environments where builtins have
     been patched to make Python 3 look more like Python 2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/237


File: setuptools.info,  Node: 5 7,  Next: 5 6,  Prev: 5 8,  Up: History<2>

9.320 5.7
=========

15 Aug 2014

   * Issue #240(1): Based on real-world performance measures against
     5.4, zip manifests are now cached in all circumstances.  The
     ‘PKG_RESOURCES_CACHE_ZIP_MANIFESTS’ environment variable is no
     longer relevant.  The observed “memory increase” referenced in the
     5.4 release notes and detailed in Issue #154(2) was likely not an
     increase over the status quo, but rather only an increase over not
     storing the zip info at all.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/240

   (2) https://github.com/pypa/setuptools/issues/154


File: setuptools.info,  Node: 5 6,  Next: 5 5 1,  Prev: 5 7,  Up: History<2>

9.321 5.6
=========

14 Aug 2014

   * Issue #242(1): Use absolute imports in svn_utils to avoid issues if
     the installing package adds an xml module to the path.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/242


File: setuptools.info,  Node: 5 5 1,  Next: 5 5,  Prev: 5 6,  Up: History<2>

9.322 5.5.1
===========

10 Aug 2014

   * Issue #239(1): Fix typo in 5.5 such that fix did not take.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/239


File: setuptools.info,  Node: 5 5,  Next: 5 4 2,  Prev: 5 5 1,  Up: History<2>

9.323 5.5
=========

10 Aug 2014

   * Issue #239(1): Setuptools now includes the setup_requires directive
     on Distribution objects and validates the syntax just like
     install_requires and tests_require directives.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/239


File: setuptools.info,  Node: 5 4 2,  Next: 5 4 1,  Prev: 5 5,  Up: History<2>

9.324 5.4.2
===========

01 Aug 2014

   * Issue #236(1): Corrected regression in execfile implementation for
     Python 2.6.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/236


File: setuptools.info,  Node: 5 4 1,  Next: 5 4,  Prev: 5 4 2,  Up: History<2>

9.325 5.4.1
===========

06 Jul 2014

   * Python #7776(1): (ssl_support) Correct usage of host for validation
     when tunneling for HTTPS.

   ---------- Footnotes ----------

   (1) http://bugs.python.org/issue7776


File: setuptools.info,  Node: 5 4,  Next: 5 3,  Prev: 5 4 1,  Up: History<2>

9.326 5.4
=========

05 Jul 2014

   * Issue #154(1): ‘pkg_resources’ will now cache the zip manifests
     rather than re-processing the same file from disk multiple times,
     but only if the environment variable
     ‘PKG_RESOURCES_CACHE_ZIP_MANIFESTS’ is set.  Clients that package
     many modules in the same zip file will see some improvement in
     startup time by enabling this feature.  This feature is not enabled
     by default because it causes a substantial increase in memory
     usage.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/154


File: setuptools.info,  Node: 5 3,  Next: 5 2,  Prev: 5 4,  Up: History<2>

9.327 5.3
=========

28 Jun 2014

   * Issue #185(1): Make svn tagging work on the new style SVN metadata.
     Thanks cazabon!

   * Prune revision control directories (e.g .svn) from base path as
     well as sub-directories.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/185


File: setuptools.info,  Node: 5 2,  Next: 5 1,  Prev: 5 3,  Up: History<2>

9.328 5.2
=========

22 Jun 2014

   * Added a Developer Guide(1) to the official documentation.

   * Some code refactoring and cleanup was done with no intended
     behavioral changes.

   * During install_egg_info, the generated lines for namespace package
     .pth files are now processed even during a dry run.

   ---------- Footnotes ----------

   (1) https://setuptools.readthedocs.io/en/latest/developer-guide.html


File: setuptools.info,  Node: 5 1,  Next: 5 0 2,  Prev: 5 2,  Up: History<2>

9.329 5.1
=========

15 Jun 2014

   * Issue #202(1): Implemented more robust cache invalidation for the
     ZipImporter, building on the work in Issue #168(2).  Special thanks
     to Jurko Gospodnetic and PJE.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/202

   (2) https://github.com/pypa/setuptools/issues/168


File: setuptools.info,  Node: 5 0 2,  Next: 5 0 1,  Prev: 5 1,  Up: History<2>

9.330 5.0.2
===========

15 Jun 2014

   * Issue #220(1): Restored script templates.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/220


File: setuptools.info,  Node: 5 0 1,  Next: 5 0,  Prev: 5 0 2,  Up: History<2>

9.331 5.0.1
===========

14 Jun 2014

   * Renamed script templates to end with .tmpl now that they no longer
     need to be processed by 2to3.  Fixes spurious syntax errors during
     build/install.


File: setuptools.info,  Node: 5 0,  Next: 3 7 1 and 3 8 1 and 4 0 1,  Prev: 5 0 1,  Up: History<2>

9.332 5.0
=========

14 Jun 2014

   * Issue #218(1): Re-release of 3.8.1 to signal that it supersedes
     4.x.

   * Incidentally, script templates were updated not to include the
     triple-quote escaping.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/218


File: setuptools.info,  Node: 3 7 1 and 3 8 1 and 4 0 1,  Next: 4 0,  Prev: 5 0,  Up: History<2>

9.333 3.7.1 and 3.8.1 and 4.0.1
===============================

   * Issue #213(1): Use legacy StringIO behavior for compatibility under
     pbr.

   * Issue #218(2): Setuptools 3.8.1 superseded 4.0.1, and 4.x was
     removed from the available versions to install.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/213

   (2) https://github.com/pypa/setuptools/issues/218


File: setuptools.info,  Node: 4 0,  Next: 3 8,  Prev: 3 7 1 and 3 8 1 and 4 0 1,  Up: History<2>

9.334 4.0
=========

01 Jun 2014

   * Issue #210(1): ‘setup.py develop’ now copies scripts in binary mode
     rather than text mode, matching the behavior of the ‘install’
     command.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/210


File: setuptools.info,  Node: 3 8,  Next: 3 7,  Prev: 4 0,  Up: History<2>

9.335 3.8
=========

01 Jun 2014

   * Extend Issue #197(1) workaround to include all Python 3 versions
     prior to 3.2.2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/197


File: setuptools.info,  Node: 3 7,  Next: 3 6,  Prev: 3 8,  Up: History<2>

9.336 3.7
=========

28 May 2014

   * Issue #193(1): Improved handling of Unicode filenames when building
     manifests.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/193


File: setuptools.info,  Node: 3 6,  Next: 3 5 2,  Prev: 3 7,  Up: History<2>

9.337 3.6
=========

07 May 2014

   * Issue #203(1): Honor proxy settings for Powershell downloader in
     the bootstrap routine.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/203


File: setuptools.info,  Node: 3 5 2,  Next: 3 5 1,  Prev: 3 6,  Up: History<2>

9.338 3.5.2
===========

07 May 2014

   * Issue #168(1): More robust handling of replaced zip files and stale
     caches.  Fixes ZipImportError complaining about a ‘bad local
     header’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/168


File: setuptools.info,  Node: 3 5 1,  Next: 3 5,  Prev: 3 5 2,  Up: History<2>

9.339 3.5.1
===========

04 May 2014

   * Issue #199(1): Restored ‘install._install’ for compatibility with
     earlier NumPy versions.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/199


File: setuptools.info,  Node: 3 5,  Next: 3 4 4,  Prev: 3 5 1,  Up: History<2>

9.340 3.5
=========

03 May 2014

   * Issue #195(1): Follow symbolic links in find_packages (restoring
     behavior broken in 3.4).

   * Issue #197(2): On Python 3.1, PKG-INFO is now saved in a UTF-8
     encoding instead of ‘sys.getpreferredencoding’ to match the
     behavior on Python 2.6-3.4.

   * Issue #192(3): Preferred bootstrap location is now
     ‘https://bootstrap.pypa.io/ez_setup.py’ (mirrored from former
     location).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/195

   (2) https://github.com/pypa/setuptools/issues/197

   (3) https://github.com/pypa/setuptools/issues/192


File: setuptools.info,  Node: 3 4 4,  Next: 3 4 3,  Prev: 3 5,  Up: History<2>

9.341 3.4.4
===========

11 Apr 2014

   * Issue #184(1): Correct failure where find_package over-matched
     packages when directory traversal isn’t short-circuited.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/184


File: setuptools.info,  Node: 3 4 3,  Next: 3 4 2,  Prev: 3 4 4,  Up: History<2>

9.342 3.4.3
===========

07 Apr 2014

   * Issue #183(1): Really fix test command with Python 3.1.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/183


File: setuptools.info,  Node: 3 4 2,  Next: 3 4 1,  Prev: 3 4 3,  Up: History<2>

9.343 3.4.2
===========

06 Apr 2014

   * Issue #183(1): Fix additional regression in test command on Python
     3.1.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/183


File: setuptools.info,  Node: 3 4 1,  Next: 3 4,  Prev: 3 4 2,  Up: History<2>

9.344 3.4.1
===========

30 Mar 2014

   * Issue #180(1): Fix regression in test command not caught by
     py.test-run tests.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/180


File: setuptools.info,  Node: 3 4,  Next: 3 3,  Prev: 3 4 1,  Up: History<2>

9.345 3.4
=========

30 Mar 2014

   * Issue #176(1): Add parameter to the test command to support a
     custom test runner: –test-runner or -r.

   * Issue #177(2): Now assume most common invocation to install command
     on platforms/environments without stack support (issuing a
     warning).  Setuptools now installs naturally on IronPython.
     Behavior on CPython should be unchanged.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/176

   (2) https://github.com/pypa/setuptools/issues/177


File: setuptools.info,  Node: 3 3,  Next: 3 2,  Prev: 3 4,  Up: History<2>

9.346 3.3
=========

16 Mar 2014

   * Add ‘include’ parameter to ‘setuptools.find_packages()’.


File: setuptools.info,  Node: 3 2,  Next: 3 1,  Prev: 3 3,  Up: History<2>

9.347 3.2
=========

14 Mar 2014

   * BB Pull Request #39(1): Add support for C++ targets from Cython
     ‘.pyx’ files.

   * Issue #162(2): Update dependency on certifi to 1.0.1.

   * Issue #164(3): Update dependency on wincertstore to 0.2.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/39

   (2) https://github.com/pypa/setuptools/issues/162

   (3) https://github.com/pypa/setuptools/issues/164


File: setuptools.info,  Node: 3 1,  Next: 3 0 2,  Prev: 3 2,  Up: History<2>

9.348 3.1
=========

08 Mar 2014

   * Issue #161(1): Restore Features functionality to allow backward
     compatibility (for Features) until the uses of that functionality
     is sufficiently removed.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/161


File: setuptools.info,  Node: 3 0 2,  Next: 3 0 1,  Prev: 3 1,  Up: History<2>

9.349 3.0.2
===========

06 Mar 2014

   * Correct typo in previous bugfix.


File: setuptools.info,  Node: 3 0 1,  Next: 3 0,  Prev: 3 0 2,  Up: History<2>

9.350 3.0.1
===========

06 Mar 2014

   * Issue #157(1): Restore support for Python 2.6 in bootstrap script
     where ‘zipfile.ZipFile’ does not yet have support for context
     managers.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/157


File: setuptools.info,  Node: 3 0,  Next: 2 2,  Prev: 3 0 1,  Up: History<2>

9.351 3.0
=========

04 Mar 2014

   * Issue #125(1): Prevent Subversion support from creating a
     ~/.subversion directory just for checking the presence of a
     Subversion repository.

   * Issue #12(2): Namespace packages are now imported lazily.  That is,
     the mere declaration of a namespace package in an egg on ‘sys.path’
     no longer causes it to be imported when ‘pkg_resources’ is
     imported.  Note that this change means that all of a namespace
     package’s ‘__init__.py’ files must include a ‘declare_namespace()’
     call in order to ensure that they will be handled properly at
     runtime.  In 2.x it was possible to get away without including the
     declaration, but only at the cost of forcing namespace packages to
     be imported early, which 3.0 no longer does.

   * Issue #148(3): When building (bdist_egg), setuptools no longer adds
     ‘__init__.py’ files to namespace packages.  Any packages that rely
     on this behavior will need to create ‘__init__.py’ files and
     include the ‘declare_namespace()’.

   * Issue #7(4): Setuptools itself is now distributed as a zip archive
     in addition to tar archive.  ez_setup.py now uses zip archive.
     This approach avoids the potential security vulnerabilities
     presented by use of tar archives in ez_setup.py.  It also leverages
     the security features added to ZipFile.extract in Python 2.7.4.

   * Issue #65(5): Removed deprecated Features functionality.

   * BB Pull Request #28(6): Remove backport of ‘_bytecode_filenames’
     which is available in Python 2.6 and later, but also has better
     compatibility with Python 3 environments.

   * Issue #156(7): Fix spelling of __PYVENV_LAUNCHER__ variable.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/125

   (2) https://github.com/pypa/setuptools/issues/12

   (3) https://github.com/pypa/setuptools/issues/148

   (4) https://github.com/pypa/setuptools/issues/7

   (5) https://github.com/pypa/setuptools/issues/65

   (6) https://bitbucket.org/pypa/setuptools/pull-request/28

   (7) https://github.com/pypa/setuptools/issues/156


File: setuptools.info,  Node: 2 2,  Next: 2 1 2,  Prev: 3 0,  Up: History<2>

9.352 2.2
=========

07 Feb 2014

   * Issue #141(1): Restored fix for allowing setup_requires
     dependencies to override installed dependencies during setup.

   * Issue #128(2): Fixed issue where only the first dependency link was
     honored in a distribution where multiple dependency links were
     supplied.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/141

   (2) https://github.com/pypa/setuptools/issues/128


File: setuptools.info,  Node: 2 1 2,  Next: 2 1 1,  Prev: 2 2,  Up: History<2>

9.353 2.1.2
===========

05 Feb 2014

   * Issue #144(1): Read long_description using codecs module to avoid
     errors installing on systems where LANG=C.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/144


File: setuptools.info,  Node: 2 1 1,  Next: 2 1,  Prev: 2 1 2,  Up: History<2>

9.354 2.1.1
===========

05 Feb 2014

   * Issue #139(1): Fix regression in re_finder for CVS repos (and maybe
     Git repos as well).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/139


File: setuptools.info,  Node: 2 1,  Next: 2 0 2,  Prev: 2 1 1,  Up: History<2>

9.355 2.1
=========

07 Jan 2014

   * Issue #129(1): Suppress inspection of ‘*.whl’ files when searching
     for files in a zip-imported file.

   * Issue #131(2): Fix RuntimeError when constructing an egg fetcher.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/129

   (2) https://github.com/pypa/setuptools/issues/131


File: setuptools.info,  Node: 2 0 2,  Next: 2 0 1,  Prev: 2 1,  Up: History<2>

9.356 2.0.2
===========

29 Dec 2013

   * Fix NameError during installation with Python implementations (e.g.
     Jython) not containing parser module.

   * Fix NameError in ‘sdist:re_finder’.


File: setuptools.info,  Node: 2 0 1,  Next: 2 0,  Prev: 2 0 2,  Up: History<2>

9.357 2.0.1
===========

15 Dec 2013

   * Issue #124(1): Fixed error in list detection in upload_docs.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/124


File: setuptools.info,  Node: 2 0,  Next: 1 4 2,  Prev: 2 0 1,  Up: History<2>

9.358 2.0
=========

07 Dec 2013

   * Issue #121(1): Exempt lib2to3 pickled grammars from
     DirectorySandbox.

   * Issue #41(2): Dropped support for Python 2.4 and Python 2.5.
     Clients requiring setuptools for those versions of Python should
     use setuptools 1.x.

   * Removed ‘setuptools.command.easy_install.HAS_USER_SITE’.  Clients
     expecting this boolean variable should use ‘site.ENABLE_USER_SITE’
     instead.

   * Removed ‘pkg_resources.ImpWrapper’.  Clients that expected this
     class should use ‘pkgutil.ImpImporter’ instead.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/121

   (2) https://github.com/pypa/setuptools/issues/41


File: setuptools.info,  Node: 1 4 2,  Next: 1 4 1,  Prev: 2 0,  Up: History<2>

9.359 1.4.2
===========

01 Dec 2013

   * Issue #116(1): Correct TypeError when reading a local package index
     on Python 3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/116


File: setuptools.info,  Node: 1 4 1,  Next: 1 4,  Prev: 1 4 2,  Up: History<2>

9.360 1.4.1
===========

23 Nov 2013

   * Issue #114(1): Use ‘sys.getfilesystemencoding’ for decoding config
     in ‘bdist_wininst’ distributions.

   * Issue #105(2) and Issue #113(3): Establish a more robust technique
     for determining the terminal encoding:

          1. Try ``getpreferredencoding``
          2. If that returns US_ASCII or None, try the encoding from
             ``getdefaultlocale``. If that encoding was a "fallback" because Python
             could not figure it out from the environment or OS, encoding remains
             unresolved.
          3. If the encoding is resolved, then make sure Python actually implements
             the encoding.
          4. On the event of an error or unknown codec, revert to fallbacks
             (UTF-8 on Darwin, ASCII on everything else).
          5. On the encoding is 'mac-roman' on Darwin, use UTF-8 as 'mac-roman' was
             a bug on older Python releases.

          On a side note, it would seem that the encoding only matters for when SVN
          does not yet support ``--xml`` and when getting repository and svn version
          numbers. The ``--xml`` technique should yield UTF-8 according to some
          messages on the SVN mailing lists. So if the version numbers are always
          7-bit ASCII clean, it may be best to only support the file parsing methods
          for legacy SVN releases and support for SVN without the subprocess command
          would simple go away as support for the older SVNs does.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/114

   (2) https://github.com/pypa/setuptools/issues/105

   (3) https://github.com/pypa/setuptools/issues/113


File: setuptools.info,  Node: 1 4,  Next: 1 3 2,  Prev: 1 4 1,  Up: History<2>

9.361 1.4
=========

17 Nov 2013

   * Issue #27(1): ‘easy_install’ will now use credentials from .pypirc
     if present for connecting to the package index.

   * BB Pull Request #21(2): Omit unwanted newlines in
     ‘package_index._encode_auth’ when the username/password pair length
     indicates wrapping.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/27

   (2) https://bitbucket.org/pypa/setuptools/pull-request/21


File: setuptools.info,  Node: 1 3 2,  Next: 1 3 1,  Prev: 1 4,  Up: History<2>

9.362 1.3.2
===========

09 Nov 2013

   * Issue #99(1): Fix filename encoding issues in SVN support.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/99


File: setuptools.info,  Node: 1 3 1,  Next: 1 3,  Prev: 1 3 2,  Up: History<2>

9.363 1.3.1
===========

07 Nov 2013

   * Remove exuberant warning in SVN support when SVN is not used.


File: setuptools.info,  Node: 1 3,  Next: 1 2,  Prev: 1 3 1,  Up: History<2>

9.364 1.3
=========

03 Nov 2013

   * Address security vulnerability in SSL match_hostname check as
     reported in Python #17997(1).

   * Prefer backports.ssl_match_hostname(2) for backport implementation
     if present.

   * Correct NameError in ‘ssl_support’ module (‘socket.error’).

   ---------- Footnotes ----------

   (1) http://bugs.python.org/issue17997

   (2) https://pypi.org/project/backports.ssl_match_hostname/


File: setuptools.info,  Node: 1 2,  Next: 1 1 7,  Prev: 1 3,  Up: History<2>

9.365 1.2
=========

02 Nov 2013

   * Issue #26(1): Add support for SVN 1.7.  Special thanks to Philip
     Thiem for the contribution.

   * Issue #93(2): Wheels are now distributed with every release.  Note
     that as reported in Issue #108(3), as of Pip 1.4, scripts aren’t
     installed properly from wheels.  Therefore, if using Pip to install
     setuptools from a wheel, the ‘easy_install’ command will not be
     available.

   * Setuptools “natural” launcher support, introduced in 1.0, is now
     officially supported.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/26

   (2) https://github.com/pypa/setuptools/issues/93

   (3) https://github.com/pypa/setuptools/issues/108


File: setuptools.info,  Node: 1 1 7,  Next: 1 1 6,  Prev: 1 2,  Up: History<2>

9.366 1.1.7
===========

11 Apr 2013

   * Fixed behavior of NameError handling in ‘script template (dev).py’
     (script launcher for ‘develop’ installs).

   * ‘ez_setup.py’ now ensures partial downloads are cleaned up
     following a failed download.

   * Distribute #363(1) and Issue #55(2): Skip an sdist test that fails
     on locales other than UTF-8.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/363

   (2) https://github.com/pypa/setuptools/issues/55


File: setuptools.info,  Node: 1 1 6,  Next: 1 1 5,  Prev: 1 1 7,  Up: History<2>

9.367 1.1.6
===========

18 Sep 2013

   * Distribute #349(1): ‘sandbox.execfile’ now opens the target file in
     binary mode, thus honoring a BOM in the file when compiled.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/349


File: setuptools.info,  Node: 1 1 5,  Next: 1 1 4,  Prev: 1 1 6,  Up: History<2>

9.368 1.1.5
===========

12 Sep 2013

   * Issue #69(1): Second attempt at fix (logic was reversed).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/69


File: setuptools.info,  Node: 1 1 4,  Next: 1 1 3,  Prev: 1 1 5,  Up: History<2>

9.369 1.1.4
===========

07 Sep 2013

   * Issue #77(1): Fix error in upload command (Python 2.4).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/77


File: setuptools.info,  Node: 1 1 3,  Next: 1 1 2,  Prev: 1 1 4,  Up: History<2>

9.370 1.1.3
===========

06 Sep 2013

   * Fix NameError in previous patch.


File: setuptools.info,  Node: 1 1 2,  Next: 1 1 1,  Prev: 1 1 3,  Up: History<2>

9.371 1.1.2
===========

06 Sep 2013

   * Issue #69(1): Correct issue where 404 errors are returned for URLs
     with fragments in them (such as #egg=).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/69


File: setuptools.info,  Node: 1 1 1,  Next: 1 1,  Prev: 1 1 2,  Up: History<2>

9.372 1.1.1
===========

03 Sep 2013

   * Issue #75(1): Add ‘--insecure’ option to ez_setup.py to accommodate
     environments where a trusted SSL connection cannot be validated.

   * Issue #76(2): Fix AttributeError in upload command with Python 2.4.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/75

   (2) https://github.com/pypa/setuptools/issues/76


File: setuptools.info,  Node: 1 1,  Next: 1 0,  Prev: 1 1 1,  Up: History<2>

9.373 1.1
=========

26 Aug 2013

   * Issue #71(1) (Distribute #333(2)): EasyInstall now puts less
     emphasis on the condition when a host is blocked via
     ‘--allow-hosts’.

   * Issue #72(3): Restored Python 2.4 compatibility in ‘ez_setup.py’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/71

   (2) https://bitbucket.org/tarek/distribute/issue/333

   (3) https://github.com/pypa/setuptools/issues/72


File: setuptools.info,  Node: 1 0,  Next: 0 9 8,  Prev: 1 1,  Up: History<2>

9.374 1.0
=========

17 Aug 2013

   * Issue #60(1): On Windows, Setuptools supports deferring to another
     launcher, such as Vinay Sajip’s pylauncher(2) (included with Python
     3.3) to launch console and GUI scripts and not install its own
     launcher executables.  This experimental functionality is currently
     only enabled if the ‘SETUPTOOLS_LAUNCHER’ environment variable is
     set to “natural”.  In the future, this behavior may become default,
     but only after it has matured and seen substantial adoption.  The
     ‘SETUPTOOLS_LAUNCHER’ also accepts “executable” to force the
     default behavior of creating launcher executables.

   * Issue #63(3): Bootstrap script (ez_setup.py) now prefers
     Powershell, curl, or wget for retrieving the Setuptools tarball for
     improved security of the install.  The script will still fall back
     to a simple ‘urlopen’ on platforms that do not have these tools.

   * Issue #65(4): Deprecated the ‘Features’ functionality.

   * Issue #52(5): In ‘VerifyingHTTPSConn’, handle a tunnelled (proxied)
     connection.

* Menu:

* Backward-Incompatible Changes::

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/60

   (2) https://bitbucket.org/pypa/pylauncher

   (3) https://github.com/pypa/setuptools/issues/63

   (4) https://github.com/pypa/setuptools/issues/65

   (5) https://github.com/pypa/setuptools/issues/52


File: setuptools.info,  Node: Backward-Incompatible Changes,  Up: 1 0

9.374.1 Backward-Incompatible Changes
-------------------------------------

This release includes a couple of backward-incompatible changes, but
most if not all users will find 1.0 a drop-in replacement for 0.9.

   * Issue #50(1): Normalized API of environment marker support.
     Specifically, removed line number and filename from SyntaxErrors
     when returned from ‘pkg_resources.invalid_marker’.  Any clients
     depending on the specific string representation of exceptions
     returned by that function may need to be updated to account for
     this change.

   * Issue #50(2): SyntaxErrors generated by
     ‘pkg_resources.invalid_marker’ are normalized for
     cross-implementation consistency.

   * Removed ‘--ignore-conflicts-at-my-risk’ and ‘--delete-conflicting’
     options to easy_install.  These options have been deprecated since
     0.6a11.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/50

   (2) https://github.com/pypa/setuptools/issues/50


File: setuptools.info,  Node: 0 9 8,  Next: 0 9 7,  Prev: 1 0,  Up: History<2>

9.375 0.9.8
===========

25 Jul 2013

   * Issue #53(1): Fix NameErrors in ‘_vcs_split_rev_from_url’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/53


File: setuptools.info,  Node: 0 9 7,  Next: 0 9 6,  Prev: 0 9 8,  Up: History<2>

9.376 0.9.7
===========

22 Jul 2013

   * Issue #49(1): Correct AttributeError on PyPy where a hashlib.HASH
     object does not have a ‘.name’ attribute.

   * Issue #34(2): Documentation now refers to bootstrap script in code
     repository referenced by bookmark.

   * Add underscore-separated keys to environment markers (markerlib).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/49

   (2) https://github.com/pypa/setuptools/issues/34


File: setuptools.info,  Node: 0 9 6,  Next: 0 9 5,  Prev: 0 9 7,  Up: History<2>

9.377 0.9.6
===========

17 Jul 2013

   * Issue #44(1): Test failure on Python 2.4 when MD5 hash doesn’t have
     a ‘.name’ attribute.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/44


File: setuptools.info,  Node: 0 9 5,  Next: 0 9 4,  Prev: 0 9 6,  Up: History<2>

9.378 0.9.5
===========

15 Jul 2013

   * Python #17980(1): Fix security vulnerability in SSL certificate
     validation.

   ---------- Footnotes ----------

   (1) http://bugs.python.org/issue17980


File: setuptools.info,  Node: 0 9 4,  Next: 0 9 3,  Prev: 0 9 5,  Up: History<2>

9.379 0.9.4
===========

15 Jul 2013

   * Issue #43(1): Fix issue (introduced in 0.9.1) with version
     resolution when upgrading over other releases of Setuptools.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/43


File: setuptools.info,  Node: 0 9 3,  Next: 0 9 2,  Prev: 0 9 4,  Up: History<2>

9.380 0.9.3
===========

15 Jul 2013

   * Issue #42(1): Fix new ‘AttributeError’ introduced in last fix.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/42


File: setuptools.info,  Node: 0 9 2,  Next: 0 9 1,  Prev: 0 9 3,  Up: History<2>

9.381 0.9.2
===========

15 Jul 2013

   * Issue #42(1): Fix regression where blank checksums would trigger an
     ‘AttributeError’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/42


File: setuptools.info,  Node: 0 9 1,  Next: 0 9,  Prev: 0 9 2,  Up: History<2>

9.382 0.9.1
===========

13 Jul 2013

   * Distribute #386(1): Allow other positional and keyword arguments to
     os.open.

   * Corrected dependency on certifi mis-referenced in 0.9.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/386


File: setuptools.info,  Node: 0 9,  Next: 0 8,  Prev: 0 9 1,  Up: History<2>

9.383 0.9
=========

13 Jul 2013

   * ‘package_index’ now validates hashes other than MD5 in download
     links.


File: setuptools.info,  Node: 0 8,  Next: 0 7 8,  Prev: 0 9,  Up: History<2>

9.384 0.8
=========

05 Jul 2013

   * Code base now runs on Python 2.4 - Python 3.3 without Python 2to3
     conversion.


File: setuptools.info,  Node: 0 7 8,  Next: 0 7 7,  Prev: 0 8,  Up: History<2>

9.385 0.7.8
===========

04 Jul 2013

   * Distribute #375(1): Yet another fix for yet another regression.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/375


File: setuptools.info,  Node: 0 7 7,  Next: 0 7 6,  Prev: 0 7 8,  Up: History<2>

9.386 0.7.7
===========

02 Jul 2013

   * Distribute #375(1): Repair AttributeError created in last release
     (redo).

   * Issue #30(2): Added test for get_cache_path.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/375

   (2) https://github.com/pypa/setuptools/issues/30


File: setuptools.info,  Node: 0 7 6,  Next: 0 7 5,  Prev: 0 7 7,  Up: History<2>

9.387 0.7.6
===========

02 Jul 2013

   * Distribute #375(1): Repair AttributeError created in last release.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/375


File: setuptools.info,  Node: 0 7 5,  Next: 0 7 4,  Prev: 0 7 6,  Up: History<2>

9.388 0.7.5
===========

29 Jun 2013

   * Issue #21(1): Restore Python 2.4 compatibility in
     ‘test_easy_install’.

   * Distribute #375(2): Merged additional warning from Distribute
     0.6.46.

   * Now honor the environment variable
     ‘SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT’ in addition to
     the now deprecated
     ‘DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT’.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/21

   (2) https://bitbucket.org/tarek/distribute/issue/375


File: setuptools.info,  Node: 0 7 4,  Next: 0 7 3,  Prev: 0 7 5,  Up: History<2>

9.389 0.7.4
===========

19 Jun 2013

   * Issue #20(1): Fix comparison of parsed SVN version on Python 3.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/20


File: setuptools.info,  Node: 0 7 3,  Next: 0 7 2,  Prev: 0 7 4,  Up: History<2>

9.390 0.7.3
===========

18 Jun 2013

   * Issue #1(1): Disable installation of Windows-specific files on
     non-Windows systems.

   * Use new sysconfig module with Python 2.7 or >=3.2.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/1


File: setuptools.info,  Node: 0 7 2,  Next: 0 7 1,  Prev: 0 7 3,  Up: History<2>

9.391 0.7.2
===========

09 Jun 2013

   * Issue #14(1): Use markerlib when the ‘parser’ module is not
     available.

   * Issue #10(2): ‘ez_setup.py’ now uses HTTPS to download setuptools
     from PyPI.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/14

   (2) https://github.com/pypa/setuptools/issues/10


File: setuptools.info,  Node: 0 7 1,  Next: 0 7,  Prev: 0 7 2,  Up: History<2>

9.392 0.7.1
===========

03 Jun 2013

   * Fix NameError (Issue #3(1)) again - broken in bad merge.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/3


File: setuptools.info,  Node: 0 7,  Next: 0 7b4,  Prev: 0 7 1,  Up: History<2>

9.393 0.7
=========

02 Jun 2013

   * Merged Setuptools and Distribute.  See docs/merge.txt for details.

Added several features that were slated for setuptools 0.6c12:

   * Index URL now defaults to HTTPS.

   * Added experimental environment marker support.  Now clients may
     designate a PEP-426(1) environment marker for “extra” dependencies.
     Setuptools uses this feature in ‘setup.py’ for optional SSL and
     certificate validation support on older platforms.  Based on
     Distutils-SIG discussions, the syntax is somewhat tentative.  There
     should probably be a PEP with a firmer spec before the feature
     should be considered suitable for use.

   * Added support for SSL certificate validation when installing
     packages from an HTTPS service.

   ---------- Footnotes ----------

   (1) https://www.python.org/dev/peps/pep-0426/


File: setuptools.info,  Node: 0 7b4,  Next: 0 6 49,  Prev: 0 7,  Up: History<2>

9.394 0.7b4
===========

   * Issue #3(1): Fixed NameError in SSL support.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/3


File: setuptools.info,  Node: 0 6 49,  Next: 0 6 48,  Prev: 0 7b4,  Up: History<2>

9.395 0.6.49
============

04 Jul 2013

   * Move warning check in ‘get_cache_path’ to follow the directory
     creation to avoid errors when the cache path does not yet exist.
     Fixes the error reported in Distribute #375(1).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/375


File: setuptools.info,  Node: 0 6 48,  Next: 0 6 47,  Prev: 0 6 49,  Up: History<2>

9.396 0.6.48
============

02 Jul 2013

   * Correct AttributeError in ‘ResourceManager.get_cache_path’
     introduced in 0.6.46 (redo).


File: setuptools.info,  Node: 0 6 47,  Next: 0 6 46,  Prev: 0 6 48,  Up: History<2>

9.397 0.6.47
============

02 Jul 2013

   * Correct AttributeError in ‘ResourceManager.get_cache_path’
     introduced in 0.6.46.


File: setuptools.info,  Node: 0 6 46,  Next: 0 6 45,  Prev: 0 6 47,  Up: History<2>

9.398 0.6.46
============

29 Jun 2013

   * Distribute #375(1): Issue a warning if the PYTHON_EGG_CACHE or
     otherwise customized egg cache location specifies a directory
     that’s group- or world-writable.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/375


File: setuptools.info,  Node: 0 6 45,  Next: 0 6 44,  Prev: 0 6 46,  Up: History<2>

9.399 0.6.45
============

29 May 2013

   * Distribute #379(1): ‘distribute_setup.py’ now traps VersionConflict
     as well, restoring ability to upgrade from an older setuptools
     version.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/379


File: setuptools.info,  Node: 0 6 44,  Next: 0 6 43,  Prev: 0 6 45,  Up: History<2>

9.400 0.6.44
============

28 May 2013

   * ‘distribute_setup.py’ has been updated to allow Setuptools 0.7 to
     satisfy use_setuptools.


File: setuptools.info,  Node: 0 6 43,  Next: 0 6 42,  Prev: 0 6 44,  Up: History<2>

9.401 0.6.43
============

24 May 2013

   * Distribute #378(1): Restore support for Python 2.4 Syntax
     (regression in 0.6.42).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/378


File: setuptools.info,  Node: 0 6 42,  Next: 0 6 41,  Prev: 0 6 43,  Up: History<2>

9.402 0.6.42
============

24 May 2013

   * External links finder no longer yields duplicate links.

   * Distribute #337(1): Moved site.py to setuptools/site-patch.py
     (graft of very old patch from setuptools trunk which inspired PR
     #31(2)).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/337

   (2) https://github.com/pypa/setuptools/issues/31


File: setuptools.info,  Node: 0 6 41,  Next: 0 6 40,  Prev: 0 6 42,  Up: History<2>

9.403 0.6.41
============

24 May 2013

   * Distribute #27(1): Use public api for loading resources from zip
     files rather than the private method ‘_zip_directory_cache’.

   * Added a new function ‘easy_install.get_win_launcher’ which may be
     used by third-party libraries such as buildout to get a suitable
     script launcher.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/27


File: setuptools.info,  Node: 0 6 40,  Next: 0 6 39,  Prev: 0 6 41,  Up: History<2>

9.404 0.6.40
============

14 May 2013

   * Distribute #376(1): brought back cli.exe and gui.exe that were
     deleted in the previous release.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/376


File: setuptools.info,  Node: 0 6 39,  Next: 0 6 38,  Prev: 0 6 40,  Up: History<2>

9.405 0.6.39
============

12 May 2013

   * Add support for console launchers on ARM platforms.

   * Fix possible issue in GUI launchers where the subsystem was not
     supplied to the linker.

   * Launcher build script now refactored for robustness.

   * Distribute #375(1): Resources extracted from a zip egg to the file
     system now also check the contents of the file against the zip
     contents during each invocation of get_resource_filename.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/375


File: setuptools.info,  Node: 0 6 38,  Next: 0 6 37,  Prev: 0 6 39,  Up: History<2>

9.406 0.6.38
============

05 May 2013

   * Distribute #371(1): The launcher manifest file is now installed
     properly.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/371


File: setuptools.info,  Node: 0 6 37,  Next: 0 6 36,  Prev: 0 6 38,  Up: History<2>

9.407 0.6.37
============

04 May 2013

   * Distribute #143(1): Launcher scripts, including easy_install
     itself, are now accompanied by a manifest on 32-bit Windows
     environments to avoid the Installer Detection Technology and thus
     undesirable UAC elevation described in this Microsoft article(2).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/143

   (2) 
http://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx


File: setuptools.info,  Node: 0 6 36,  Next: 0 6 35,  Prev: 0 6 37,  Up: History<2>

9.408 0.6.36
============

05 Apr 2013

   * BB Pull Request #35(1): In Buildout #64(2), it was reported that
     under Python 3, installation of distutils scripts could attempt to
     copy the ‘__pycache__’ directory as a file, causing an error,
     apparently only under Windows.  Easy_install now skips all
     directories when processing metadata scripts.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/35

   (2) https://github.com/buildout/buildout/issues/64


File: setuptools.info,  Node: 0 6 35,  Next: 0 6 34,  Prev: 0 6 36,  Up: History<2>

9.409 0.6.35
============

16 Feb 2013

Note this release is backward-incompatible with distribute 0.6.23-0.6.34
in how it parses version numbers.

   * Distribute #278(1): Restored compatibility with distribute 0.6.22
     and setuptools 0.6.  Updated the documentation to match more
     closely with the version parsing as intended in setuptools 0.6.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/278


File: setuptools.info,  Node: 0 6 34,  Next: 0 6 33,  Prev: 0 6 35,  Up: History<2>

9.410 0.6.34
============

30 Dec 2012

   * Distribute #341(1): 0.6.33 fails to build under Python 2.4.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/341


File: setuptools.info,  Node: 0 6 33,  Next: 0 6 32,  Prev: 0 6 34,  Up: History<2>

9.411 0.6.33
============

29 Dec 2012

   * Fix 2 errors with Jython 2.5.

   * Fix 1 failure with Jython 2.5 and 2.7.

   * Disable workaround for Jython scripts on Linux systems.

   * Distribute #336(1): ‘setup.py’ no longer masks failure exit code
     when tests fail.

   * Fix issue in pkg_resources where try/except around a
     platform-dependent import would trigger hook load failures on
     Mercurial.  See pull request 32 for details.

   * Distribute #341(2): Fix a ResourceWarning.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/336

   (2) https://bitbucket.org/tarek/distribute/issue/341


File: setuptools.info,  Node: 0 6 32,  Next: 0 6 31,  Prev: 0 6 33,  Up: History<2>

9.412 0.6.32
============

26 Nov 2012

   * Fix test suite with Python 2.6.

   * Fix some DeprecationWarnings and ResourceWarnings.

   * Distribute #335(1): Backed out ‘setup_requires’ superceding
     installed requirements until regression can be addressed.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/335


File: setuptools.info,  Node: 0 6 31,  Next: 0 6 30,  Prev: 0 6 32,  Up: History<2>

9.413 0.6.31
============

24 Nov 2012

   * Distribute #303(1): Make sure the manifest only ever contains UTF-8
     in Python 3.

   * Distribute #329(2): Properly close files created by tests for
     compatibility with Jython.

   * Work around Jython #1980(3) and Jython #1981(4).

   * Distribute #334(5): Provide workaround for packages that reference
     ‘sys.__stdout__’ such as numpy does.  This change should address
     virtualenv ‘#359(6)
     <‘https://github.com/pypa/virtualenv/issues/359’>‘_ as long as the
     system encoding is UTF-8 or the IO encoding is specified in the
     environment, i.e.:

          PYTHONIOENCODING=utf8 pip install numpy

   * Fix for encoding issue when installing from Windows executable on
     Python 3.

   * Distribute #323(7): Allow ‘setup_requires’ requirements to
     supercede installed requirements.  Added some new keyword arguments
     to existing pkg_resources methods.  Also had to updated how
     __path__ is handled for namespace packages to ensure that when a
     new egg distribution containing a namespace package is placed on
     sys.path, the entries in __path__ are found in the same order they
     would have been in had that egg been on the path when pkg_resources
     was first imported.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/303

   (2) https://bitbucket.org/tarek/distribute/issue/329

   (3) http://bugs.jython.org/issue1980

   (4) http://bugs.jython.org/issue1981

   (5) https://bitbucket.org/tarek/distribute/issue/334

   (6) https://github.com/pypa/setuptools/issues/359

   (7) https://bitbucket.org/tarek/distribute/issue/323


File: setuptools.info,  Node: 0 6 30,  Next: 0 6 29,  Prev: 0 6 31,  Up: History<2>

9.414 0.6.30
============

22 Oct 2012

   * Distribute #328(1): Clean up temporary directories in
     distribute_setup.py.

   * Fix fatal bug in distribute_setup.py.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/328


File: setuptools.info,  Node: 0 6 29,  Next: 0 6 28,  Prev: 0 6 30,  Up: History<2>

9.415 0.6.29
============

21 Oct 2012

   * BB Pull Request #14(1): Honor file permissions in zip files.

   * Distribute #327(2): Merged pull request #24(3) to fix a dependency
     problem with pip.

   * Merged pull request #23(4) to fix
     ‘https://github.com/pypa/virtualenv/issues/301’.

   * If Sphinx is installed, the ‘upload_docs’ command now runs
     ‘build_sphinx’ to produce uploadable documentation.

   * Distribute #326(5): ‘upload_docs’ provided mangled auth credentials
     under Python 3.

   * Distribute #320(6): Fix check for “createable” in
     distribute_setup.py.

   * Distribute #305(7): Remove a warning that was triggered during
     normal operations.

   * Distribute #311(8): Print metadata in UTF-8 independent of
     platform.

   * Distribute #303(9): Read manifest file with UTF-8 encoding under
     Python 3.

   * Distribute #301(10): Allow to run tests of namespace packages when
     using 2to3.

   * Distribute #304(11): Prevent import loop in site.py under Python
     3.3.

   * Distribute #283(12): Reenable scanning of ‘*.pyc’ / ‘*.pyo’ files
     on Python 3.3.

   * Distribute #299(13): The develop command didn’t work on Python 3,
     when using 2to3, as the egg link would go to the Python 2 source.
     Linking to the 2to3’d code in build/lib makes it work, although you
     will have to rebuild the module before testing it.

   * Distribute #306(14): Even if 2to3 is used, we build in-place under
     Python 2.

   * Distribute #307(15): Prints the full path when .svn/entries is
     broken.

   * Distribute #313(16): Support for sdist subcommands (Python 2.7)

   * Distribute #314(17): test_local_index() would fail an OS X.

   * Distribute #310(18): Non-ascii characters in a namespace
     __init__.py causes errors.

   * Distribute #218(19): Improved documentation on behavior of
     ‘package_data’ and ‘include_package_data’.  Files indicated by
     ‘package_data’ are now included in the manifest.

   * ‘distribute_setup.py’ now allows a ‘--download-base’ argument for
     retrieving distribute from a specified location.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/pypa/setuptools/pull-request/14

   (2) https://bitbucket.org/tarek/distribute/issue/327

   (3) https://github.com/pypa/setuptools/issues/24

   (4) https://github.com/pypa/setuptools/issues/23

   (5) https://bitbucket.org/tarek/distribute/issue/326

   (6) https://bitbucket.org/tarek/distribute/issue/320

   (7) https://bitbucket.org/tarek/distribute/issue/305

   (8) https://bitbucket.org/tarek/distribute/issue/311

   (9) https://bitbucket.org/tarek/distribute/issue/303

   (10) https://bitbucket.org/tarek/distribute/issue/301

   (11) https://bitbucket.org/tarek/distribute/issue/304

   (12) https://bitbucket.org/tarek/distribute/issue/283

   (13) https://bitbucket.org/tarek/distribute/issue/299

   (14) https://bitbucket.org/tarek/distribute/issue/306

   (15) https://bitbucket.org/tarek/distribute/issue/307

   (16) https://bitbucket.org/tarek/distribute/issue/313

   (17) https://bitbucket.org/tarek/distribute/issue/314

   (18) https://bitbucket.org/tarek/distribute/issue/310

   (19) https://bitbucket.org/tarek/distribute/issue/218


File: setuptools.info,  Node: 0 6 28,  Next: 0 6 27,  Prev: 0 6 29,  Up: History<2>

9.416 0.6.28
============

22 Jul 2012

   * Distribute #294(1): setup.py can now be invoked from any directory.

   * Scripts are now installed honoring the umask.

   * Added support for .dist-info directories.

   * Distribute #283(2): Fix and disable scanning of ‘*.pyc’ / ‘*.pyo’
     files on Python 3.3.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/294

   (2) https://bitbucket.org/tarek/distribute/issue/283


File: setuptools.info,  Node: 0 6 27,  Next: 0 6 26,  Prev: 0 6 28,  Up: History<2>

9.417 0.6.27
============

18 May 2012

   * Support current snapshots of CPython 3.3.

   * Distribute now recognizes README.rst as a standard, default readme
     file.

   * Exclude ‘encodings’ modules when removing modules from sys.modules.
     Workaround for #285(1).

   * Distribute #231(2): Don’t fiddle with system python when used with
     buildout (bootstrap.py)

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/285

   (2) https://bitbucket.org/tarek/distribute/issue/231


File: setuptools.info,  Node: 0 6 26,  Next: 0 6 25,  Prev: 0 6 27,  Up: History<2>

9.418 0.6.26
============

08 Apr 2012

   * Distribute #183(1): Symlinked files are now extracted from source
     distributions.

   * Distribute #227(2): Easy_install fetch parameters are now passed
     during the installation of a source distribution; now fulfillment
     of setup_requires dependencies will honor the parameters passed to
     easy_install.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/183

   (2) https://bitbucket.org/tarek/distribute/issue/227


File: setuptools.info,  Node: 0 6 25,  Next: 0 6 24,  Prev: 0 6 26,  Up: History<2>

9.419 0.6.25
============

08 Feb 2012

   * Distribute #258(1): Workaround a cache issue

   * Distribute #260(2): distribute_setup.py now accepts the –user
     parameter for Python 2.6 and later.

   * Distribute #262(3): package_index.open_with_auth no longer throws
     LookupError on Python 3.

   * Distribute #269(4): AttributeError when an exception occurs reading
     Manifest.in on late releases of Python.

   * Distribute #272(5): Prevent TypeError when namespace package names
     are unicode and single-install-externally-managed is used.  Also
     fixes PIP issue 449.

   * Distribute #273(6): Legacy script launchers now install with
     Python2/3 support.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/258

   (2) https://bitbucket.org/tarek/distribute/issue/260

   (3) https://bitbucket.org/tarek/distribute/issue/262

   (4) https://bitbucket.org/tarek/distribute/issue/269

   (5) https://bitbucket.org/tarek/distribute/issue/272

   (6) https://bitbucket.org/tarek/distribute/issue/273


File: setuptools.info,  Node: 0 6 24,  Next: 0 6 23,  Prev: 0 6 25,  Up: History<2>

9.420 0.6.24
============

14 Oct 2011

   * Distribute #249(1): Added options to exclude 2to3 fixers

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/249


File: setuptools.info,  Node: 0 6 23,  Next: 0 6 21,  Prev: 0 6 24,  Up: History<2>

9.421 0.6.23
============

22 Sep 2011

   * Distribute #244(1): Fixed a test

   * Distribute #243(2): Fixed a test

   * Distribute #239(3): Fixed a test

   * Distribute #240(4): Fixed a test

   * Distribute #241(5): Fixed a test

   * Distribute #237(6): Fixed a test

   * Distribute #238(7): easy_install now uses 64bit executable wrappers
     on 64bit Python

   * Distribute #208(8): Fixed parsed_versions, it now honors
     post-releases as noted in the documentation

   * Distribute #207(9): Windows cli and gui wrappers pass CTRL-C to
     child python process

   * Distribute #227(10): easy_install now passes its arguments to
     setup.py bdist_egg

   * Distribute #225(11): Fixed a NameError on Python 2.5, 2.4

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/244

   (2) https://bitbucket.org/tarek/distribute/issue/243

   (3) https://bitbucket.org/tarek/distribute/issue/239

   (4) https://bitbucket.org/tarek/distribute/issue/240

   (5) https://bitbucket.org/tarek/distribute/issue/241

   (6) https://bitbucket.org/tarek/distribute/issue/237

   (7) https://bitbucket.org/tarek/distribute/issue/238

   (8) https://bitbucket.org/tarek/distribute/issue/208

   (9) https://bitbucket.org/tarek/distribute/issue/207

   (10) https://bitbucket.org/tarek/distribute/issue/227

   (11) https://bitbucket.org/tarek/distribute/issue/225


File: setuptools.info,  Node: 0 6 21,  Next: 0 6 20,  Prev: 0 6 23,  Up: History<2>

9.422 0.6.21
============

20 Aug 2011

   * Distribute #225(1): FIxed a regression on py2.4

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/225


File: setuptools.info,  Node: 0 6 20,  Next: 0 6 19,  Prev: 0 6 21,  Up: History<2>

9.423 0.6.20
============

18 Aug 2011

   * Distribute #135(1): Include url in warning when processing URLs in
     package_index.

   * Distribute #212(2): Fix issue where easy_instal fails on Python 3
     on windows installer.

   * Distribute #213(3): Fix typo in documentation.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/135

   (2) https://bitbucket.org/tarek/distribute/issue/212

   (3) https://bitbucket.org/tarek/distribute/issue/213


File: setuptools.info,  Node: 0 6 19,  Next: 0 6 18,  Prev: 0 6 20,  Up: History<2>

9.424 0.6.19
============

02 Jun 2011

   * Distribute #206(1): AttributeError: ‘HTTPMessage’ object has no
     attribute ‘getheaders’

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/206


File: setuptools.info,  Node: 0 6 18,  Next: 0 6 17,  Prev: 0 6 19,  Up: History<2>

9.425 0.6.18
============

01 Jun 2011

   * Distribute #210(1): Fixed a regression introduced by Distribute
     #204(2) fix.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/210

   (2) https://bitbucket.org/tarek/distribute/issue/204


File: setuptools.info,  Node: 0 6 17,  Next: 0 6 16,  Prev: 0 6 18,  Up: History<2>

9.426 0.6.17
============

30 May 2011

   * Support ‘DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT’
     environment variable to allow to disable installation of
     easy_install-${version} script.

   * Support Python >=3.1.4 and >=3.2.1.

   * Distribute #204(1): Don’t try to import the parent of a namespace
     package in declare_namespace

   * Distribute #196(2): Tolerate responses with multiple Content-Length
     headers

   * Distribute #205(3): Sandboxing doesn’t preserve working_set.  Leads
     to setup_requires problems.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/204

   (2) https://bitbucket.org/tarek/distribute/issue/196

   (3) https://bitbucket.org/tarek/distribute/issue/205


File: setuptools.info,  Node: 0 6 16,  Next: 0 6 15,  Prev: 0 6 17,  Up: History<2>

9.427 0.6.16
============

28 Apr 2011

   * Builds sdist gztar even on Windows (avoiding Distribute #193(1)).

   * Distribute #192(2): Fixed metadata omitted on Windows when
     package_dir specified with forward-slash.

   * Distribute #195(3): Cython build support.

   * Distribute #200(4): Issues with recognizing 64-bit packages on
     Windows.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/193

   (2) https://bitbucket.org/tarek/distribute/issue/192

   (3) https://bitbucket.org/tarek/distribute/issue/195

   (4) https://bitbucket.org/tarek/distribute/issue/200


File: setuptools.info,  Node: 0 6 15,  Next: 0 6 14,  Prev: 0 6 16,  Up: History<2>

9.428 0.6.15
============

12 Mar 2011

   * Fixed typo in bdist_egg

   * Several issues under Python 3 has been solved.

   * Distribute #146(1): Fixed missing DLL files after easy_install of
     windows exe package.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/146


File: setuptools.info,  Node: 0 6 14,  Next: 0 6 13,  Prev: 0 6 15,  Up: History<2>

9.429 0.6.14
============

15 Jul 2010

   * Distribute #170(1): Fixed unittest failure.  Thanks to Toshio.

   * Distribute #171(2): Fixed race condition in unittests cause
     deadlocks in test suite.

   * Distribute #143(3): Fixed a lookup issue with easy_install.  Thanks
     to David and Zooko.

   * Distribute #174(4): Fixed the edit mode when its used with
     setuptools itself

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/170

   (2) https://bitbucket.org/tarek/distribute/issue/171

   (3) https://bitbucket.org/tarek/distribute/issue/143

   (4) https://bitbucket.org/tarek/distribute/issue/174


File: setuptools.info,  Node: 0 6 13,  Next: 0 6 12,  Prev: 0 6 14,  Up: History<2>

9.430 0.6.13
============

31 May 2010

   * Distribute #160(1): 2.7 gives ValueError(“Invalid IPv6 URL”)

   * Distribute #150(2): Fixed using ~/.local even in a
     –no-site-packages virtualenv

   * Distribute #163(3): scan index links before external links, and
     don’t use the md5 when comparing two distributions

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/160

   (2) https://bitbucket.org/tarek/distribute/issue/150

   (3) https://bitbucket.org/tarek/distribute/issue/163


File: setuptools.info,  Node: 0 6 12,  Next: 0 6 11,  Prev: 0 6 13,  Up: History<2>

9.431 0.6.12
============

06 May 2010

   * Distribute #149(1): Fixed various failures on 2.3/2.4

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/149


File: setuptools.info,  Node: 0 6 11,  Next: 0 6 10,  Prev: 0 6 12,  Up: History<2>

9.432 0.6.11
============

06 May 2010

   * Found another case of SandboxViolation - fixed

   * Distribute #15(1) and Distribute #48(2): Introduced a socket
     timeout of 15 seconds on url openings

   * Added indexsidebar.html into MANIFEST.in

   * Distribute #108(3): Fixed TypeError with Python3.1

   * Distribute #121(4): Fixed –help install command trying to actually
     install.

   * Distribute #112(5): Added an os.makedirs so that Tarek’s solution
     will work.

   * Distribute #133(6): Added –no-find-links to easy_install

   * Added easy_install –user

   * Distribute #100(7): Fixed develop –user not taking ‘.’ in
     PYTHONPATH into account

   * Distribute #134(8): removed spurious UserWarnings.  Patch by
     VanLindberg

   * Distribute #138(9): cant_write_to_target error when setup_requires
     is used.

   * Distribute #147(10): respect the sys.dont_write_bytecode flag

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/15

   (2) https://bitbucket.org/tarek/distribute/issue/48

   (3) https://bitbucket.org/tarek/distribute/issue/108

   (4) https://bitbucket.org/tarek/distribute/issue/121

   (5) https://bitbucket.org/tarek/distribute/issue/112

   (6) https://bitbucket.org/tarek/distribute/issue/133

   (7) https://bitbucket.org/tarek/distribute/issue/100

   (8) https://bitbucket.org/tarek/distribute/issue/134

   (9) https://bitbucket.org/tarek/distribute/issue/138

   (10) https://bitbucket.org/tarek/distribute/issue/147


File: setuptools.info,  Node: 0 6 10,  Next: 0 6 9,  Prev: 0 6 11,  Up: History<2>

9.433 0.6.10
============

12 Dec 2009

   * Reverted change made for the DistributionNotFound exception because
     zc.buildout uses the exception message to get the name of the
     distribution.


File: setuptools.info,  Node: 0 6 9,  Next: 0 6 8,  Prev: 0 6 10,  Up: History<2>

9.434 0.6.9
===========

12 Dec 2009

   * Distribute #90(1): unknown setuptools version can be added in the
     working set

   * Distribute #87(2): setupt.py doesn’t try to convert
     distribute_setup.py anymore Initial Patch by arfrever.

   * Distribute #89(3): added a side bar with a download link to the
     doc.

   * Distribute #86(4): fixed missing sentence in pkg_resources doc.

   * Added a nicer error message when a DistributionNotFound is raised.

   * Distribute #80(5): test_develop now works with Python 3.1

   * Distribute #93(6): upload_docs now works if there is an empty
     sub-directory.

   * Distribute #70(7): exec bit on non-exec files

   * Distribute #99(8): now the standalone easy_install command doesn’t
     uses a “setup.cfg” if any exists in the working directory.  It will
     use it only if triggered by ‘install_requires’ from a setup.py call
     (install, develop, etc).

   * Distribute #101(9): Allowing ‘os.devnull’ in Sandbox

   * Distribute #92(10): Fixed the “no eggs” found error with MacPort
     (platform.mac_ver() fails)

   * Distribute #103(11): test_get_script_header_jython_workaround not
     run anymore under py3 with C or POSIX local.  Contributed by
     Arfrever.

   * Distribute #104(12): remvoved the assertion when the installation
     fails, with a nicer message for the end user.

   * Distribute #100(13): making sure there’s no SandboxViolation when
     the setup script patches setuptools.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/90

   (2) https://bitbucket.org/tarek/distribute/issue/87

   (3) https://bitbucket.org/tarek/distribute/issue/89

   (4) https://bitbucket.org/tarek/distribute/issue/86

   (5) https://bitbucket.org/tarek/distribute/issue/80

   (6) https://bitbucket.org/tarek/distribute/issue/93

   (7) https://bitbucket.org/tarek/distribute/issue/70

   (8) https://bitbucket.org/tarek/distribute/issue/99

   (9) https://bitbucket.org/tarek/distribute/issue/101

   (10) https://bitbucket.org/tarek/distribute/issue/92

   (11) https://bitbucket.org/tarek/distribute/issue/103

   (12) https://bitbucket.org/tarek/distribute/issue/104

   (13) https://bitbucket.org/tarek/distribute/issue/100


File: setuptools.info,  Node: 0 6 8,  Next: 0 6 7,  Prev: 0 6 9,  Up: History<2>

9.435 0.6.8
===========

01 Nov 2009

   * Added “check_packages” in dist.  (added in Setuptools 0.6c11)

   * Fixed the DONT_PATCH_SETUPTOOLS state.


File: setuptools.info,  Node: 0 6 7,  Next: 0 6 6,  Prev: 0 6 8,  Up: History<2>

9.436 0.6.7
===========

01 Nov 2009

   * Distribute #58(1): Added –user support to the develop command

   * Distribute #11(2): Generated scripts now wrap their call to the
     script entry point in the standard “if name == ‘main’”

   * Added the ‘DONT_PATCH_SETUPTOOLS’ environment variable, so
     virtualenv can drive an installation that doesn’t patch a global
     setuptools.

   * Reviewed unladen-swallow specific change from
     ‘http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719’
     and determined that it no longer applies.  Distribute should work
     fine with Unladen Swallow 2009Q3.

   * Distribute #21(3): Allow PackageIndex.open_url to gracefully handle
     all cases of a httplib.HTTPException instead of just InvalidURL and
     BadStatusLine.

   * Removed virtual-python.py from this distribution and updated
     documentation to point to the actively maintained virtualenv
     instead.

   * Distribute #64(4): use_setuptools no longer rebuilds the distribute
     egg every time it is run

   * use_setuptools now properly respects the requested version

   * use_setuptools will no longer try to import a distribute egg for
     the wrong Python version

   * Distribute #74(5): no_fake should be True by default.

   * Distribute #72(6): avoid a bootstrapping issue with easy_install -U

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/58

   (2) https://bitbucket.org/tarek/distribute/issue/11

   (3) https://bitbucket.org/tarek/distribute/issue/21

   (4) https://bitbucket.org/tarek/distribute/issue/64

   (5) https://bitbucket.org/tarek/distribute/issue/74

   (6) https://bitbucket.org/tarek/distribute/issue/72


File: setuptools.info,  Node: 0 6 6,  Next: 0 6 5,  Prev: 0 6 7,  Up: History<2>

9.437 0.6.6
===========

15 Oct 2009

   * Unified the bootstrap file so it works on both py2.x and py3k
     without 2to3 (patch by Holger Krekel)


File: setuptools.info,  Node: 0 6 5,  Next: 0 6 4,  Prev: 0 6 6,  Up: History<2>

9.438 0.6.5
===========

15 Oct 2009

   * Distribute #65(1): cli.exe and gui.exe are now generated at build
     time, depending on the platform in use.

   * Distribute #67(2): Fixed doc typo (PEP 381(3)/PEP 382(4)).

   * Distribute no longer shadows setuptools if we require a 0.7-series
     setuptools.  And an error is raised when installing a 0.7
     setuptools with distribute.

   * When run from within buildout, no attempt is made to modify an
     existing setuptools egg, whether in a shared egg directory or a
     system setuptools.

   * Fixed a hole in sandboxing allowing builtin file to write outside
     of the sandbox.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/65

   (2) https://bitbucket.org/tarek/distribute/issue/67

   (3) https://www.python.org/dev/peps/pep-0381/

   (4) https://www.python.org/dev/peps/pep-0382/


File: setuptools.info,  Node: 0 6 4,  Next: 0 6 3,  Prev: 0 6 5,  Up: History<2>

9.439 0.6.4
===========

10 Oct 2009

   * Added the generation of ‘distribute_setup_3k.py’ during the
     release.  This closes Distribute #52(1).

   * Added an upload_docs command to easily upload project documentation
     to PyPI’s ‘https://pythonhosted.org’.  This close issue Distribute
     #56(2).

   * Fixed a bootstrap bug on the use_setuptools() API.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/52

   (2) https://bitbucket.org/tarek/distribute/issue/56


File: setuptools.info,  Node: 0 6 3,  Next: 0 6 2,  Prev: 0 6 4,  Up: History<2>

9.440 0.6.3
===========

27 Sep 2009

* Menu:

* setuptools::
* bootstrapping::


File: setuptools.info,  Node: setuptools,  Next: bootstrapping,  Up: 0 6 3

9.440.1 setuptools
------------------

   * Fixed a bunch of calls to file() that caused crashes on Python 3.


File: setuptools.info,  Node: bootstrapping,  Prev: setuptools,  Up: 0 6 3

9.440.2 bootstrapping
---------------------

   * Fixed a bug in sorting that caused bootstrap to fail on Python 3.


File: setuptools.info,  Node: 0 6 2,  Next: 0 6 1,  Prev: 0 6 3,  Up: History<2>

9.441 0.6.2
===========

26 Sep 2009

* Menu:

* setuptools: setuptools<2>.
* bootstrapping: bootstrapping<2>.


File: setuptools.info,  Node: setuptools<2>,  Next: bootstrapping<2>,  Up: 0 6 2

9.441.1 setuptools
------------------

   * Added Python 3 support; see docs/python3.txt.  This closes Old
     Setuptools #39(1).

   * Added option to run 2to3 automatically when installing on Python 3.
     This closes issue Distribute #31(2).

   * Fixed invalid usage of requirement.parse, that broke develop -d.
     This closes Old Setuptools #44(3).

   * Fixed script launcher for 64-bit Windows.  This closes Old
     Setuptools #2(4).

   * KeyError when compiling extensions.  This closes Old Setuptools
     #41(5).

   ---------- Footnotes ----------

   (1) http://bugs.python.org/setuptools/issue39

   (2) https://bitbucket.org/tarek/distribute/issue/31

   (3) http://bugs.python.org/setuptools/issue44

   (4) http://bugs.python.org/setuptools/issue2

   (5) http://bugs.python.org/setuptools/issue41


File: setuptools.info,  Node: bootstrapping<2>,  Prev: setuptools<2>,  Up: 0 6 2

9.441.2 bootstrapping
---------------------

   * Fixed bootstrap not working on Windows.  This closes issue
     Distribute #49(1).

   * Fixed 2.6 dependencies.  This closes issue Distribute #50(2).

   * Make sure setuptools is patched when running through easy_install
     This closes Old Setuptools #40(3).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/49

   (2) https://bitbucket.org/tarek/distribute/issue/50

   (3) http://bugs.python.org/setuptools/issue40


File: setuptools.info,  Node: 0 6 1,  Next: 0 6,  Prev: 0 6 2,  Up: History<2>

9.442 0.6.1
===========

08 Sep 2009

* Menu:

* setuptools: setuptools<3>.
* bootstrapping: bootstrapping<3>.


File: setuptools.info,  Node: setuptools<3>,  Next: bootstrapping<3>,  Up: 0 6 1

9.442.1 setuptools
------------------

   * package_index.urlopen now catches BadStatusLine and malformed url
     errors.  This closes Distribute #16(1) and Distribute #18(2).

   * zip_ok is now False by default.  This closes Old Setuptools #33(3).

   * Fixed invalid URL error catching.  Old Setuptools #20(4).

   * Fixed invalid bootstraping with easy_install installation
     (Distribute #40(5)).  Thanks to Florian Schulze for the help.

   * Removed buildout/bootstrap.py.  A new repository will create a
     specific bootstrap.py script.

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/16

   (2) https://bitbucket.org/tarek/distribute/issue/18

   (3) http://bugs.python.org/setuptools/issue33

   (4) http://bugs.python.org/setuptools/issue20

   (5) https://bitbucket.org/tarek/distribute/issue/40


File: setuptools.info,  Node: bootstrapping<3>,  Prev: setuptools<3>,  Up: 0 6 1

9.442.2 bootstrapping
---------------------

   * The boostrap process leave setuptools alone if detected in the
     system and –root or –prefix is provided, but is not in the same
     location.  This closes Distribute #10(1).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/10


File: setuptools.info,  Node: 0 6,  Next: 0 6c9,  Prev: 0 6 1,  Up: History<2>

9.443 0.6
=========

09 Aug 2009

* Menu:

* setuptools: setuptools<4>.
* pkg_resources::
* easy_install::


File: setuptools.info,  Node: setuptools<4>,  Next: pkg_resources,  Up: 0 6

9.443.1 setuptools
------------------

   * Packages required at build time where not fully present at install
     time.  This closes Distribute #12(1).

   * Protected against failures in tarfile extraction.  This closes
     Distribute #10(2).

   * Made Jython api_tests.txt doctest compatible.  This closes
     Distribute #7(3).

   * sandbox.py replaced builtin type file with builtin function open.
     This closes Distribute #6(4).

   * Immediately close all file handles.  This closes Distribute #3(5).

   * Added compatibility with Subversion 1.6.  This references
     Distribute #1(6).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/12

   (2) https://bitbucket.org/tarek/distribute/issue/10

   (3) https://bitbucket.org/tarek/distribute/issue/7

   (4) https://bitbucket.org/tarek/distribute/issue/6

   (5) https://bitbucket.org/tarek/distribute/issue/3

   (6) https://bitbucket.org/tarek/distribute/issue/1


File: setuptools.info,  Node: pkg_resources,  Next: easy_install,  Prev: setuptools<4>,  Up: 0 6

9.443.2 pkg_resources
---------------------

   * Avoid a call to /usr/bin/sw_vers on OSX and use the official
     platform API instead.  Based on a patch from ronaldoussoren.  This
     closes issue #5(1).

   * Fixed a SandboxViolation for mkdir that could occur in certain
     cases.  This closes Distribute #13(2).

   * Allow to find_on_path on systems with tight permissions to fail
     gracefully.  This closes Distribute #9(3).

   * Corrected inconsistency between documentation and code of
     add_entry.  This closes Distribute #8(4).

   * Immediately close all file handles.  This closes Distribute #3(5).

   ---------- Footnotes ----------

   (1) https://github.com/pypa/setuptools/issues/5

   (2) https://bitbucket.org/tarek/distribute/issue/13

   (3) https://bitbucket.org/tarek/distribute/issue/9

   (4) https://bitbucket.org/tarek/distribute/issue/8

   (5) https://bitbucket.org/tarek/distribute/issue/3


File: setuptools.info,  Node: easy_install,  Prev: pkg_resources,  Up: 0 6

9.443.3 easy_install
--------------------

   * Immediately close all file handles.  This closes Distribute #3(1).

   ---------- Footnotes ----------

   (1) https://bitbucket.org/tarek/distribute/issue/3


File: setuptools.info,  Node: 0 6c9,  Next: 0 6c7,  Prev: 0 6,  Up: History<2>

9.444 0.6c9
===========

        * Fixed a missing files problem when using Windows source
          distributions on non-Windows platforms, due to distutils not
          handling manifest file line endings correctly.

        * Updated Pyrex support to work with Pyrex 0.9.6 and higher.

        * Minor changes for Jython compatibility, including skipping
          tests that can’t work on Jython.

        * Fixed not installing eggs in ‘install_requires’ if they were
          also used for ‘setup_requires’ or ‘tests_require’.

        * Fixed not fetching eggs in ‘install_requires’ when running
          tests.

        * Allow ‘ez_setup.use_setuptools()’ to upgrade existing
          setuptools installations when called from a standalone
          ‘setup.py’.

        * Added a warning if a namespace package is declared, but its
          parent package is not also declared as a namespace.

        * Support Subversion 1.5

        * Removed use of deprecated ‘md5’ module if ‘hashlib’ is
          available

        * Fixed ‘bdist_wininst upload’ trying to upload the ‘.exe’ twice

        * Fixed ‘bdist_egg’ putting a ‘native_libs.txt’ in the source
          package’s ‘.egg-info’, when it should only be in the built
          egg’s ‘EGG-INFO’.

        * Ensure that _full_name is set on all shared libs before
          extensions are checked for shared lib usage.  (Fixes a bug in
          the experimental shared library build support.)

        * Fix to allow unpacked eggs containing native libraries to fail
          more gracefully under Google App Engine (with an ‘ImportError’
          loading the C-based module, instead of getting a ‘NameError’).

        * Fixed ‘win32.exe’ support for .pth files, so unnecessary
          directory nesting is flattened out in the resulting egg.
          (There was a case-sensitivity problem that affected some
          distributions, notably ‘pywin32’.)

        * Prevent ‘--help-commands’ and other junk from showing under
          Python 2.5 when running ‘easy_install --help’.

        * Fixed GUI scripts sometimes not executing on Windows

        * Fixed not picking up dependency links from recursive
          dependencies.

        * Only make ‘.py’, ‘.dll’ and ‘.so’ files executable when
          unpacking eggs

        * Changes for Jython compatibility

        * Improved error message when a requirement is also a directory
          name, but the specified directory is not a source package.

        * Fixed ‘--allow-hosts’ option blocking ‘file:’ URLs

        * Fixed HTTP SVN detection failing when the page title included
          a project name (e.g.  on SourceForge-hosted SVN)

        * Fix Jython script installation to handle ‘#!’ lines better
          when ‘sys.executable’ is a script.

        * Removed use of deprecated ‘md5’ module if ‘hashlib’ is
          available

        * Keep site directories (e.g.  ‘site-packages’) from being
          included in ‘.pth’ files.


File: setuptools.info,  Node: 0 6c7,  Next: 0 6c6,  Prev: 0 6c9,  Up: History<2>

9.445 0.6c7
===========

        * Fixed ‘distutils.filelist.findall()’ crashing on broken
          symlinks, and ‘egg_info’ command failing on new, uncommitted
          SVN directories.

        * Fix import problems with nested namespace packages installed
          via ‘--root’ or ‘--single-version-externally-managed’, due to
          the parent package not having the child package as an
          attribute.

        * ‘ftp:’ download URLs now work correctly.

        * The default ‘--index-url’ is now
          ‘https://pypi.python.org/simple’, to use the Python Package
          Index’s new simpler (and faster!)  REST API.


File: setuptools.info,  Node: 0 6c6,  Next: 0 6c5,  Prev: 0 6c7,  Up: History<2>

9.446 0.6c6
===========

        * Added ‘--egg-path’ option to ‘develop’ command, allowing you
          to force ‘.egg-link’ files to use relative paths (allowing
          them to be shared across platforms on a networked drive).

        * Fix not building binary RPMs correctly.

        * Fix “eggsecutables” (such as setuptools’ own egg) only being
          runnable with bash-compatible shells.

        * Fix ‘#!’ parsing problems in Windows ‘.exe’ script wrappers,
          when there was whitespace inside a quoted argument or at the
          end of the ‘#!’ line (a regression introduced in 0.6c4).

        * Fix ‘test’ command possibly failing if an older version of the
          project being tested was installed on ‘sys.path’ ahead of the
          test source directory.

        * Fix ‘find_packages()’ treating ‘ez_setup’ and directories with
          ‘.’ in their names as packages.

        * EasyInstall no longer aborts the installation process if a URL
          it wants to retrieve can’t be downloaded, unless the URL is an
          actual package download.  Instead, it issues a warning and
          tries to keep going.

        * Fixed distutils-style scripts originally built on Windows
          having their line endings doubled when installed on any
          platform.

        * Added ‘--local-snapshots-ok’ flag, to allow building eggs from
          projects installed using ‘setup.py develop’.

        * Fixed not HTML-decoding URLs scraped from web pages


File: setuptools.info,  Node: 0 6c5,  Next: 0 6c4,  Prev: 0 6c6,  Up: History<2>

9.447 0.6c5
===========

        * Fix uploaded ‘bdist_rpm’ packages being described as
          ‘bdist_egg’ packages under Python versions less than 2.5.

        * Fix uploaded ‘bdist_wininst’ packages being described as
          suitable for “any” version by Python 2.5, even if a
          ‘--target-version’ was specified.

        * Fixed ‘.dll’ files on Cygwin not having executable permissions
          when an egg is installed unzipped.


File: setuptools.info,  Node: 0 6c4,  Next: 0 6c3,  Prev: 0 6c5,  Up: History<2>

9.448 0.6c4
===========

        * Overhauled Windows script wrapping to support ‘bdist_wininst’
          better.  Scripts installed with ‘bdist_wininst’ will always
          use ‘#!python.exe’ or ‘#!pythonw.exe’ as the executable name
          (even when built on non-Windows platforms!), and the wrappers
          will look for the executable in the script’s parent directory
          (which should find the right version of Python).

        * Fix ‘upload’ command not uploading files built by ‘bdist_rpm’
          or ‘bdist_wininst’ under Python 2.3 and 2.4.

        * Add support for “eggsecutable” headers: a ‘#!/bin/sh’ script
          that is prepended to an ‘.egg’ file to allow it to be run as a
          script on Unix-ish platforms.  (This is mainly so that
          setuptools itself can have a single-file installer on Unix,
          without doing multiple downloads, dealing with firewalls,
          etc.)

        * Fix problem with empty revision numbers in Subversion 1.4
          ‘entries’ files

        * Use cross-platform relative paths in ‘easy-install.pth’ when
          doing ‘develop’ and the source directory is a subdirectory of
          the installation target directory.

        * Fix a problem installing eggs with a system packaging tool if
          the project contained an implicit namespace package; for
          example if the ‘setup()’ listed a namespace package ‘foo.bar’
          without explicitly listing ‘foo’ as a namespace package.

        * Added support for HTTP “Basic” authentication using
          ‘http://user:pass@host’ URLs.  If a password-protected page
          contains links to the same host (and protocol), those links
          will inherit the credentials used to access the original page.

        * Removed all special support for Sourceforge mirrors, as
          Sourceforge’s mirror system now works well for non-browser
          downloads.

        * Fixed not recognizing ‘win32.exe’ installers that included a
          custom bitmap.

        * Fixed not allowing ‘os.open()’ of paths outside the sandbox,
          even if they are opened read-only (e.g.  reading
          ‘/dev/urandom’ for random numbers, as is done by
          ‘os.urandom()’ on some platforms).

        * Fixed a problem with ‘.pth’ testing on Windows when
          ‘sys.executable’ has a space in it (e.g., the user installed
          Python to a ‘Program Files’ directory).


File: setuptools.info,  Node: 0 6c3,  Next: 0 6c2,  Prev: 0 6c4,  Up: History<2>

9.449 0.6c3
===========

        * Fixed breakages caused by Subversion 1.4’s new “working copy”
          format

        * You can once again use “python -m easy_install” with Python
          2.4 and above.

        * Python 2.5 compatibility fixes added.


File: setuptools.info,  Node: 0 6c2,  Next: 0 6c1,  Prev: 0 6c3,  Up: History<2>

9.450 0.6c2
===========

        * The ‘ez_setup’ module displays the conflicting version of
          setuptools (and its installation location) when a script
          requests a version that’s not available.

        * Running ‘setup.py develop’ on a setuptools-using project will
          now install setuptools if needed, instead of only downloading
          the egg.

        * Windows script wrappers now support quoted arguments and
          arguments containing spaces.  (Patch contributed by Jim
          Fulton.)

        * The ‘ez_setup.py’ script now actually works when you put a
          setuptools ‘.egg’ alongside it for bootstrapping an offline
          machine.

        * A writable installation directory on ‘sys.path’ is no longer
          required to download and extract a source distribution using
          ‘--editable’.

        * Generated scripts now use ‘-x’ on the ‘#!’ line when
          ‘sys.executable’ contains non-ASCII characters, to prevent
          deprecation warnings about an unspecified encoding when the
          script is run.


File: setuptools.info,  Node: 0 6c1,  Next: 0 6b4,  Prev: 0 6c2,  Up: History<2>

9.451 0.6c1
===========

        * Fixed ‘AttributeError’ when trying to download a
          ‘setup_requires’ dependency when a distribution lacks a
          ‘dependency_links’ setting.

        * Made ‘zip-safe’ and ‘not-zip-safe’ flag files contain a single
          byte, so as to play better with packaging tools that complain
          about zero-length files.

        * Made ‘setup.py develop’ respect the ‘--no-deps’ option, which
          it previously was ignoring.

        * Support ‘extra_path’ option to ‘setup()’ when ‘install’ is run
          in backward-compatibility mode.

        * Source distributions now always include a ‘setup.cfg’ file
          that explicitly sets ‘egg_info’ options such that they produce
          an identical version number to the source distribution’s
          version number.  (Previously, the default version number could
          be different due to the use of ‘--tag-date’, or if the version
          was overridden on the command line that built the source
          distribution.)

        * EasyInstall now includes setuptools version information in the
          ‘User-Agent’ string sent to websites it visits.


File: setuptools.info,  Node: 0 6b4,  Next: 0 6b3,  Prev: 0 6c1,  Up: History<2>

9.452 0.6b4
===========

        * Fix ‘register’ not obeying name/version set by ‘egg_info’
          command, if ‘egg_info’ wasn’t explicitly run first on the same
          command line.

        * Added ‘--no-date’ and ‘--no-svn-revision’ options to
          ‘egg_info’ command, to allow suppressing tags configured in
          ‘setup.cfg’.

        * Fixed redundant warnings about missing ‘README’ file(s); it
          should now appear only if you are actually a source
          distribution.

        * Fix creating Python wrappers for non-Python scripts

        * Fix ‘ftp://’ directory listing URLs from causing a crash when
          used in the “Home page” or “Download URL” slots on PyPI.

        * Fix ‘sys.path_importer_cache’ not being updated when an
          existing zipfile or directory is deleted/overwritten.

        * Fix not recognizing HTML 404 pages from package indexes.

        * Allow ‘file://’ URLs to be used as a package index.  URLs that
          refer to directories will use an internally-generated
          directory listing if there is no ‘index.html’ file in the
          directory.

        * Allow external links in a package index to be specified using
          ‘rel="homepage"’ or ‘rel="download"’, without needing the old
          PyPI-specific visible markup.

        * Suppressed warning message about possibly-misspelled project
          name, if an egg or link for that project name has already been
          seen.


File: setuptools.info,  Node: 0 6b3,  Next: 0 6b2,  Prev: 0 6b4,  Up: History<2>

9.453 0.6b3
===========

        * Fix ‘bdist_egg’ not including files in subdirectories of
          ‘.egg-info’.

        * Allow ‘.py’ files found by the ‘include_package_data’ option
          to be automatically included.  Remove duplicate data file
          matches if both ‘include_package_data’ and ‘package_data’ are
          used to refer to the same files.

        * Fix local ‘--find-links’ eggs not being copied except with
          ‘--always-copy’.

        * Fix sometimes not detecting local packages installed outside
          of “site” directories.

        * Fix mysterious errors during initial ‘setuptools’ install,
          caused by ‘ez_setup’ trying to run ‘easy_install’ twice, due
          to a code fallthru after deleting the egg from which it’s
          running.


File: setuptools.info,  Node: 0 6b2,  Next: 0 6b1,  Prev: 0 6b3,  Up: History<2>

9.454 0.6b2
===========

        * Don’t install or update a ‘site.py’ patch when installing to a
          ‘PYTHONPATH’ directory with ‘--multi-version’, unless an
          ‘easy-install.pth’ file is already in use there.

        * Construct ‘.pth’ file paths in such a way that installing an
          egg whose name begins with ‘import’ doesn’t cause a syntax
          error.

        * Fixed a bogus warning message that wasn’t updated since the
          0.5 versions.


File: setuptools.info,  Node: 0 6b1,  Next: 0 6a11,  Prev: 0 6b2,  Up: History<2>

9.455 0.6b1
===========

        * Strip ‘module’ from the end of compiled extension modules when
          computing the name of a ‘.py’ loader/wrapper.  (Python’s
          import machinery ignores this suffix when searching for an
          extension module.)

        * Better ambiguity management: accept ‘#egg’ name/version even
          if processing what appears to be a correctly-named distutils
          file, and ignore ‘.egg’ files with no ‘-’, since valid Python
          ‘.egg’ files always have a version number (but Scheme eggs
          often don’t).

        * Support ‘file://’ links to directories in ‘--find-links’, so
          that easy_install can build packages from local source
          checkouts.

        * Added automatic retry for Sourceforge mirrors.  The new
          download process is to first just try dl.sourceforge.net, then
          randomly select mirror IPs and remove ones that fail, until
          something works.  The removed IPs stay removed for the
          remainder of the run.

        * Ignore bdist_dumb distributions when looking at download URLs.


File: setuptools.info,  Node: 0 6a11,  Next: 0 6a10,  Prev: 0 6b1,  Up: History<2>

9.456 0.6a11
============

        * Added ‘test_loader’ keyword to support custom test loaders

        * Added ‘setuptools.file_finders’ entry point group to allow
          implementing revision control plugins.

        * Added ‘--identity’ option to ‘upload’ command.

        * Added ‘dependency_links’ to allow specifying URLs for
          ‘--find-links’.

        * Enhanced test loader to scan packages as well as modules, and
          call ‘additional_tests()’ if present to get non-unittest
          tests.

        * Support namespace packages in conjunction with system
          packagers, by omitting the installation of any ‘__init__.py’
          files for namespace packages, and adding a special ‘.pth’ file
          to create a working package in ‘sys.modules’.

        * Made ‘--single-version-externally-managed’ automatic when
          ‘--root’ is used, so that most system packagers won’t require
          special support for setuptools.

        * Fixed ‘setup_requires’, ‘tests_require’, etc.  not using
          ‘setup.cfg’ or other configuration files for their option
          defaults when installing, and also made the install use
          ‘--multi-version’ mode so that the project directory doesn’t
          need to support .pth files.

        * ‘MANIFEST.in’ is now forcibly closed when any errors occur
          while reading it.  Previously, the file could be left open and
          the actual error would be masked by problems trying to remove
          the open file on Windows systems.

        * Process ‘dependency_links.txt’ if found in a distribution, by
          adding the URLs to the list for scanning.

        * Use relative paths in ‘.pth’ files when eggs are being
          installed to the same directory as the ‘.pth’ file.  This
          maximizes portability of the target directory when building
          applications that contain eggs.

        * Added ‘easy_install-N.N’ script(s) for convenience when using
          multiple Python versions.

        * Added automatic handling of installation conflicts.  Eggs are
          now shifted to the front of sys.path, in an order consistent
          with where they came from, making EasyInstall seamlessly
          co-operate with system package managers.

          The ‘--delete-conflicting’ and ‘--ignore-conflicts-at-my-risk’
          options are now no longer necessary, and will generate
          warnings at the end of a run if you use them.

        * Don’t recursively traverse subdirectories given to
          ‘--find-links’.


File: setuptools.info,  Node: 0 6a10,  Next: 0 6a9,  Prev: 0 6a11,  Up: History<2>

9.457 0.6a10
============

        * Fixed the ‘develop’ command ignoring ‘--find-links’.

        * Added exhaustive testing of the install directory, including a
          spawn test for ‘.pth’ file support, and directory
          writability/existence checks.  This should virtually eliminate
          the need to set or configure ‘--site-dirs’.

        * Added ‘--prefix’ option for more do-what-I-mean-ishness in the
          absence of RTFM-ing.  :)

        * Enhanced ‘PYTHONPATH’ support so that you don’t have to put
          any eggs on it manually to make it work.  ‘--multi-version’ is
          no longer a silent default; you must explicitly use it if
          installing to a non-PYTHONPATH, non-“site” directory.

        * Expand ‘$variables’ used in the ‘--site-dirs’,
          ‘--build-directory’, ‘--install-dir’, and ‘--script-dir’
          options, whether on the command line or in configuration
          files.

        * Improved SourceForge mirror processing to work faster and be
          less affected by transient HTML changes made by SourceForge.

        * PyPI searches now use the exact spelling of requirements
          specified on the command line or in a project’s
          ‘install_requires’.  Previously, a normalized form of the name
          was used, which could lead to unnecessary full-index searches
          when a project’s name had an underscore (‘_’) in it.

        * EasyInstall can now download bare ‘.py’ files and wrap them in
          an egg, as long as you include an ‘#egg=name-version’ suffix
          on the URL, or if the ‘.py’ file is listed as the “Download
          URL” on the project’s PyPI page.  This allows third parties to
          “package” trivial Python modules just by linking to them (e.g.
          from within their own PyPI page or download links page).

        * The ‘--always-copy’ option now skips “system” and
          “development” eggs since they can’t be reliably copied.  Note
          that this may cause EasyInstall to choose an older version of
          a package than what you expected, or it may cause downloading
          and installation of a fresh version of what’s already
          installed.

        * The ‘--find-links’ option previously scanned all supplied URLs
          and directories as early as possible, but now only directories
          and direct archive links are scanned immediately.  URLs are
          not retrieved unless a package search was already going to go
          online due to a package not being available locally, or due to
          the use of the ‘--update’ or ‘-U’ option.

        * Fixed the annoying ‘--help-commands’ wart.


File: setuptools.info,  Node: 0 6a9,  Next: 0 6a8,  Prev: 0 6a10,  Up: History<2>

9.458 0.6a9
===========

        * The ‘sdist’ command no longer uses the traditional ‘MANIFEST’
          file to create source distributions.  ‘MANIFEST.in’ is still
          read and processed, as are the standard defaults and pruning.
          But the manifest is built inside the project’s ‘.egg-info’
          directory as ‘SOURCES.txt’, and it is rebuilt every time the
          ‘egg_info’ command is run.

        * Added the ‘include_package_data’ keyword to ‘setup()’,
          allowing you to automatically include any package data listed
          in revision control or ‘MANIFEST.in’

        * Added the ‘exclude_package_data’ keyword to ‘setup()’,
          allowing you to trim back files included via the
          ‘package_data’ and ‘include_package_data’ options.

        * Fixed ‘--tag-svn-revision’ not working when run from a source
          distribution.

        * Added warning for namespace packages with missing
          ‘declare_namespace()’

        * Added ‘tests_require’ keyword to ‘setup()’, so that e.g.
          packages requiring ‘nose’ to run unit tests can make this
          dependency optional unless the ‘test’ command is run.

        * Made all commands that use ‘easy_install’ respect its
          configuration options, as this was causing some problems with
          ‘setup.py install’.

        * Added an ‘unpack_directory()’ driver to
          ‘setuptools.archive_util’, so that you can process a directory
          tree through a processing filter as if it were a zipfile or
          tarfile.

        * Added an internal ‘install_egg_info’ command to use as part of
          old-style ‘install’ operations, that installs an ‘.egg-info’
          directory with the package.

        * Added a ‘--single-version-externally-managed’ option to the
          ‘install’ command so that you can more easily wrap a “flat”
          egg in a system package.

        * Enhanced ‘bdist_rpm’ so that it installs single-version eggs
          that don’t rely on a ‘.pth’ file.  The ‘--no-egg’ option has
          been removed, since all RPMs are now built in a more
          backwards-compatible format.

        * Support full roundtrip translation of eggs to and from
          ‘bdist_wininst’ format.  Running ‘bdist_wininst’ on a
          setuptools-based package wraps the egg in an .exe that will
          safely install it as an egg (i.e., with metadata and
          entry-point wrapper scripts), and ‘easy_install’ can turn the
          .exe back into an ‘.egg’ file or directory and install it as
          such.

        * Fixed ‘.pth’ file processing picking up nested eggs (i.e.
          ones inside “baskets”) when they weren’t explicitly listed in
          the ‘.pth’ file.

        * If more than one URL appears to describe the exact same
          distribution, prefer the shortest one.  This helps to avoid
          “table of contents” CGI URLs like the ones on effbot.org.

        * Quote arguments to python.exe (including python’s path) to
          avoid problems when Python (or a script) is installed in a
          directory whose name contains spaces on Windows.

        * Support full roundtrip translation of eggs to and from
          ‘bdist_wininst’ format.  Running ‘bdist_wininst’ on a
          setuptools-based package wraps the egg in an .exe that will
          safely install it as an egg (i.e., with metadata and
          entry-point wrapper scripts), and ‘easy_install’ can turn the
          .exe back into an ‘.egg’ file or directory and install it as
          such.


File: setuptools.info,  Node: 0 6a8,  Next: 0 6a7,  Prev: 0 6a9,  Up: History<2>

9.459 0.6a8
===========

        * Fixed some problems building extensions when Pyrex was
          installed, especially with Python 2.4 and/or packages using
          SWIG.

        * Made ‘develop’ command accept all the same options as
          ‘easy_install’, and use the ‘easy_install’ command’s
          configuration settings as defaults.

        * Made ‘egg_info --tag-svn-revision’ fall back to extracting the
          revision number from ‘PKG-INFO’ in case it is being run on a
          source distribution of a snapshot taken from a
          Subversion-based project.

        * Automatically detect ‘.dll’, ‘.so’ and ‘.dylib’ files that are
          being installed as data, adding them to ‘native_libs.txt’
          automatically.

        * Fixed some problems with fresh checkouts of projects that
          don’t include ‘.egg-info/PKG-INFO’ under revision control and
          put the project’s source code directly in the project
          directory.  If such a package had any requirements that get
          processed before the ‘egg_info’ command can be run, the setup
          scripts would fail with a “Missing ‘Version:’ header and/or
          PKG-INFO file” error, because the egg runtime interpreted the
          unbuilt metadata in a directory on ‘sys.path’ (i.e.  the
          current directory) as being a corrupted egg.  Setuptools now
          monkeypatches the distribution metadata cache to pretend that
          the egg has valid version information, until it has a chance
          to make it actually be so (via the ‘egg_info’ command).

        * Update for changed SourceForge mirror format

        * Fixed not installing dependencies for some packages fetched
          via Subversion

        * Fixed dependency installation with ‘--always-copy’ not using
          the same dependency resolution procedure as other operations.

        * Fixed not fully removing temporary directories on Windows, if
          a Subversion checkout left read-only files behind

        * Fixed some problems building extensions when Pyrex was
          installed, especially with Python 2.4 and/or packages using
          SWIG.


File: setuptools.info,  Node: 0 6a7,  Next: 0 6a6,  Prev: 0 6a8,  Up: History<2>

9.460 0.6a7
===========

        * Fixed not being able to install Windows script wrappers using
          Python 2.3


File: setuptools.info,  Node: 0 6a6,  Next: 0 6a5,  Prev: 0 6a7,  Up: History<2>

9.461 0.6a6
===========

        * Added support for “traditional” PYTHONPATH-based non-root
          installation, and also the convenient ‘virtual-python.py’
          script, based on a contribution by Ian Bicking.  The
          setuptools egg now contains a hacked ‘site’ module that makes
          the PYTHONPATH-based approach work with .pth files, so that
          you can get the full EasyInstall feature set on such
          installations.

        * Added ‘--no-deps’ and ‘--allow-hosts’ options.

        * Improved Windows ‘.exe’ script wrappers so that the script can
          have the same name as a module without confusing Python.

        * Changed dependency processing so that it’s breadth-first,
          allowing a depender’s preferences to override those of a
          dependee, to prevent conflicts when a lower version is
          acceptable to the dependee, but not the depender.  Also,
          ensure that currently installed/selected packages aren’t given
          precedence over ones desired by a package being installed,
          which could cause conflict errors.


File: setuptools.info,  Node: 0 6a5,  Next: 0 6a3,  Prev: 0 6a6,  Up: History<2>

9.462 0.6a5
===========

        * Fixed missing gui/cli .exe files in distribution.  Fixed bugs
          in tests.


File: setuptools.info,  Node: 0 6a3,  Next: 0 6a2,  Prev: 0 6a5,  Up: History<2>

9.463 0.6a3
===========

        * Added ‘gui_scripts’ entry point group to allow installing GUI
          scripts on Windows and other platforms.  (The special handling
          is only for Windows; other platforms are treated the same as
          for ‘console_scripts’.)

        * Improved error message when trying to use old ways of running
          ‘easy_install’.  Removed the ability to run via ‘python -m’ or
          by running ‘easy_install.py’; ‘easy_install’ is the command to
          run on all supported platforms.

        * Improved wrapper script generation and runtime initialization
          so that a VersionConflict doesn’t occur if you later install a
          competing version of a needed package as the default version
          of that package.

        * Fixed a problem parsing version numbers in ‘#egg=’ links.


File: setuptools.info,  Node: 0 6a2,  Next: 0 6a1,  Prev: 0 6a3,  Up: History<2>

9.464 0.6a2
===========

        * Added ‘console_scripts’ entry point group to allow installing
          scripts without the need to create separate script files.  On
          Windows, console scripts get an ‘.exe’ wrapper so you can just
          type their name.  On other platforms, the scripts are written
          without a file extension.

        * EasyInstall can now install “console_scripts” defined by
          packages that use ‘setuptools’ and define appropriate entry
          points.  On Windows, console scripts get an ‘.exe’ wrapper so
          you can just type their name.  On other platforms, the scripts
          are installed without a file extension.

        * Using ‘python -m easy_install’ or running ‘easy_install.py’ is
          now DEPRECATED, since an ‘easy_install’ wrapper is now
          available on all platforms.


File: setuptools.info,  Node: 0 6a1,  Next: 0 5a12,  Prev: 0 6a2,  Up: History<2>

9.465 0.6a1
===========

        * Added support for building “old-style” RPMs that don’t install
          an egg for the target package, using a ‘--no-egg’ option.

        * The ‘build_ext’ command now works better when using the
          ‘--inplace’ option and multiple Python versions.  It now makes
          sure that all extensions match the current Python version,
          even if newer copies were built for a different Python
          version.

        * The ‘upload’ command no longer attaches an extra ‘.zip’ when
          uploading eggs, as PyPI now supports egg uploads without
          trickery.

        * The ‘ez_setup’ script/module now displays a warning before
          downloading the setuptools egg, and attempts to check the
          downloaded egg against an internal MD5 checksum table.

        * Fixed the ‘--tag-svn-revision’ option of ‘egg_info’ not
          finding the latest revision number; it was using the revision
          number of the directory containing ‘setup.py’, not the highest
          revision number in the project.

        * Added ‘eager_resources’ setup argument

        * The ‘sdist’ command now recognizes Subversion “deleted file”
          entries and does not include them in source distributions.

        * ‘setuptools’ now embeds itself more thoroughly into the
          distutils, so that other distutils extensions (e.g.  py2exe,
          py2app) will subclass setuptools’ versions of things, rather
          than the native distutils ones.

        * Added ‘entry_points’ and ‘setup_requires’ arguments to
          ‘setup()’; ‘setup_requires’ allows you to automatically find
          and download packages that are needed in order to `build' your
          project (as opposed to running it).

        * ‘setuptools’ now finds its commands, ‘setup()’ argument
          validators, and metadata writers using entry points, so that
          they can be extended by third-party packages.  See Creating
          distutils Extensions(1) for more details.

        * The vestigial ‘depends’ command has been removed.  It was
          never finished or documented, and never would have worked
          without EasyInstall - which it pre-dated and was never
          compatible with.

        * EasyInstall now does MD5 validation of downloads from PyPI, or
          from any link that has an “#md5=…” trailer with a 32-digit
          lowercase hex md5 digest.

        * EasyInstall now handles symlinks in target directories by
          removing the link, rather than attempting to overwrite the
          link’s destination.  This makes it easier to set up an
          alternate Python “home” directory (as described in the
          Non-Root Installation section of the docs).

        * Added support for handling MacOS platform information in
          ‘.egg’ filenames, based on a contribution by Kevin Dangoor.
          You may wish to delete and reinstall any eggs whose filename
          includes “darwin” and “Power_Macintosh”, because the format
          for this platform information has changed so that minor OS X
          upgrades (such as 10.4.1 to 10.4.2) do not cause eggs built
          with a previous OS version to become obsolete.

        * easy_install’s dependency processing algorithms have changed.
          When using ‘--always-copy’, it now ensures that dependencies
          are copied too.  When not using ‘--always-copy’, it tries to
          use a single resolution loop, rather than recursing.

        * Fixed installing extra ‘.pyc’ or ‘.pyo’ files for scripts with
          ‘.py’ extensions.

        * Added ‘--site-dirs’ option to allow adding custom “site”
          directories.  Made ‘easy-install.pth’ work in
          platform-specific alternate site directories (e.g.
          ‘~/Library/Python/2.x/site-packages’ on Mac OS X).

        * If you manually delete the current version of a package, the
          next run of EasyInstall against the target directory will now
          remove the stray entry from the ‘easy-install.pth’ file.

        * EasyInstall now recognizes URLs with a ‘#egg=project_name’
          fragment ID as pointing to the named project’s source
          checkout.  Such URLs have a lower match precedence than any
          other kind of distribution, so they’ll only be used if they
          have a higher version number than any other available
          distribution, or if you use the ‘--editable’ option.  The
          ‘#egg’ fragment can contain a version if it’s formatted as
          ‘#egg=proj-ver’, where ‘proj’ is the project name, and ‘ver’
          is the version number.  You `must' use the format for these
          values that the ‘bdist_egg’ command uses; i.e., all
          non-alphanumeric runs must be condensed to single underscore
          characters.

        * Added the ‘--editable’ option; see Editing and Viewing Source
          Packages in the docs.  Also, slightly changed the behavior of
          the ‘--build-directory’ option.

        * Fixed the setup script sandbox facility not recognizing
          certain paths as valid on case-insensitive platforms.

   ---------- Footnotes ----------

   (1) 
https://setuptools.readthedocs.io/en/latest/setuptools.html#creating-distutils-extensions


File: setuptools.info,  Node: 0 5a12,  Next: 0 5a11,  Prev: 0 6a1,  Up: History<2>

9.466 0.5a12
============

        * The zip-safety scanner now checks for modules that might be
          used with ‘python -m’, and marks them as unsafe for zipping,
          since Python 2.4 can’t handle ‘-m’ on zipped modules.

        * Fix ‘python -m easy_install’ not working due to setuptools
          being installed as a zipfile.  Update safety scanner to check
          for modules that might be used as ‘python -m’ scripts.

        * Misc.  fixes for win32.exe support, including changes to
          support Python 2.4’s changed ‘bdist_wininst’ format.


File: setuptools.info,  Node: 0 5a11,  Next: 0 5a10,  Prev: 0 5a12,  Up: History<2>

9.467 0.5a11
============

        * Fix breakage of the “develop” command that was caused by the
          addition of ‘--always-unzip’ to the ‘easy_install’ command.


File: setuptools.info,  Node: 0 5a10,  Next: 0 5a9,  Prev: 0 5a11,  Up: History<2>

9.468 0.5a10
============

        * Put the ‘easy_install’ module back in as a module, as it’s
          needed for ‘python -m’ to run it!

        * Allow ‘--find-links/-f’ to accept local directories or
          filenames as well as URLs.


File: setuptools.info,  Node: 0 5a9,  Next: 0 5a8,  Prev: 0 5a10,  Up: History<2>

9.469 0.5a9
===========

        * Include ‘svn:externals’ directories in source distributions as
          well as normal subversion-controlled files and directories.

        * Added ‘exclude=patternlist’ option to
          ‘setuptools.find_packages()’

        * Changed –tag-svn-revision to include an “r” in front of the
          revision number for better readability.

        * Added ability to build eggs without including source files
          (except for any scripts, of course), using the
          ‘--exclude-source-files’ option to ‘bdist_egg’.

        * ‘setup.py install’ now automatically detects when an
          “unmanaged” package or module is going to be on ‘sys.path’
          ahead of a package being installed, thereby preventing the
          newer version from being imported.  If this occurs, a warning
          message is output to ‘sys.stderr’, but installation proceeds
          anyway.  The warning message informs the user what files or
          directories need deleting, and advises them they can also use
          EasyInstall (with the ‘--delete-conflicting’ option) to do it
          automatically.

        * The ‘egg_info’ command now adds a ‘top_level.txt’ file to the
          metadata directory that lists all top-level modules and
          packages in the distribution.  This is used by the
          ‘easy_install’ command to find possibly-conflicting
          “unmanaged” packages when installing the distribution.

        * Added ‘zip_safe’ and ‘namespace_packages’ arguments to
          ‘setup()’.  Added package analysis to determine zip-safety if
          the ‘zip_safe’ flag is not given, and advise the author
          regarding what code might need changing.

        * Fixed the swapped ‘-d’ and ‘-b’ options of ‘bdist_egg’.

        * EasyInstall now automatically detects when an “unmanaged”
          package or module is going to be on ‘sys.path’ ahead of a
          package you’re installing, thereby preventing the newer
          version from being imported.  By default, it will abort
          installation to alert you of the problem, but there are also
          new options (‘--delete-conflicting’ and
          ‘--ignore-conflicts-at-my-risk’) available to change the
          default behavior.  (Note: this new feature doesn’t take effect
          for egg files that were built with older ‘setuptools’
          versions, because they lack the new metadata file required to
          implement it.)

        * The ‘easy_install’ distutils command now uses ‘DistutilsError’
          as its base error type for errors that should just issue a
          message to stderr and exit the program without a traceback.

        * EasyInstall can now be given a path to a directory containing
          a setup script, and it will attempt to build and install the
          package there.

        * EasyInstall now performs a safety analysis on module contents
          to determine whether a package is likely to run in zipped
          form, and displays information about what modules may be doing
          introspection that would break when running as a zipfile.

        * Added the ‘--always-unzip/-Z’ option, to force unzipping of
          packages that would ordinarily be considered safe to unzip,
          and changed the meaning of ‘--zip-ok/-z’ to “always leave
          everything zipped”.


File: setuptools.info,  Node: 0 5a8,  Next: 0 5a7,  Prev: 0 5a9,  Up: History<2>

9.470 0.5a8
===========

        * The “egg_info” command now always sets the distribution
          metadata to “safe” forms of the distribution name and version,
          so that distribution files will be generated with parseable
          names (i.e., ones that don’t include ‘-‘ in the name or
          version).  Also, this means that if you use the various
          ‘--tag’ options of “egg_info”, any distributions generated
          will use the tags in the version, not just egg distributions.

        * Added support for defining command aliases in distutils
          configuration files, under the “[aliases]” section.  To
          prevent recursion and to allow aliases to call the command of
          the same name, a given alias can be expanded only once per
          command-line invocation.  You can define new aliases with the
          “alias” command, either for the local, global, or per-user
          configuration.

        * Added “rotate” command to delete old distribution files, given
          a set of patterns to match and the number of files to keep.
          (Keeps the most recently-modified distribution files matching
          each pattern.)

        * Added “saveopts” command that saves all command-line options
          for the current invocation to the local, global, or per-user
          configuration file.  Useful for setting defaults without
          having to hand-edit a configuration file.

        * Added a “setopt” command that sets a single option in a
          specified distutils configuration file.

        * There is now a separate documentation page for setuptools;
          revision history that’s not specific to EasyInstall has been
          moved to that page.


File: setuptools.info,  Node: 0 5a7,  Next: 0 5a6,  Prev: 0 5a8,  Up: History<2>

9.471 0.5a7
===========

        * Added “upload” support for egg and source distributions,
          including a bug fix for “upload” and a temporary workaround
          for lack of .egg support in PyPI.


File: setuptools.info,  Node: 0 5a6,  Next: 0 5a5,  Prev: 0 5a7,  Up: History<2>

9.472 0.5a6
===========

        * Beefed up the “sdist” command so that if you don’t have a
          MANIFEST.in, it will include all files under revision control
          (CVS or Subversion) in the current directory, and it will
          regenerate the list every time you create a source
          distribution, not just when you tell it to.  This should make
          the default “do what you mean” more often than the distutils’
          default behavior did, while still retaining the old behavior
          in the presence of MANIFEST.in.

        * Fixed the “develop” command always updating .pth files, even
          if you specified ‘-n’ or ‘--dry-run’.

        * Slightly changed the format of the generated version when you
          use ‘--tag-build’ on the “egg_info” command, so that you can
          make tagged revisions compare `lower' than the version
          specified in setup.py (e.g.  by using ‘--tag-build=dev’).


File: setuptools.info,  Node: 0 5a5,  Next: 0 5a4,  Prev: 0 5a6,  Up: History<2>

9.473 0.5a5
===========

        * Added ‘develop’ command to ‘setuptools’-based packages.  This
          command installs an ‘.egg-link’ pointing to the package’s
          source directory, and script wrappers that ‘execfile()’ the
          source versions of the package’s scripts.  This lets you put
          your development checkout(s) on sys.path without having to
          actually install them.  (To uninstall the link, use use
          ‘setup.py develop --uninstall’.)

        * Added ‘egg_info’ command to ‘setuptools’-based packages.  This
          command just creates or updates the “projectname.egg-info”
          directory, without building an egg.  (It’s used by the
          ‘bdist_egg’, ‘test’, and ‘develop’ commands.)

        * Enhanced the ‘test’ command so that it doesn’t install the
          package, but instead builds any C extensions in-place, updates
          the ‘.egg-info’ metadata, adds the source directory to
          ‘sys.path’, and runs the tests directly on the source.  This
          avoids an “unmanaged” installation of the package to
          ‘site-packages’ or elsewhere.

        * Made ‘easy_install’ a standard ‘setuptools’ command, moving it
          from the ‘easy_install’ module to
          ‘setuptools.command.easy_install’.  Note that if you were
          importing or extending it, you must now change your imports
          accordingly.  ‘easy_install.py’ is still installed as a
          script, but not as a module.


File: setuptools.info,  Node: 0 5a4,  Next: 0 5a3,  Prev: 0 5a5,  Up: History<2>

9.474 0.5a4
===========

        * Setup scripts using setuptools can now list their dependencies
          directly in the setup.py file, without having to manually
          create a ‘depends.txt’ file.  The ‘install_requires’ and
          ‘extras_require’ arguments to ‘setup()’ are used to create a
          dependencies file automatically.  If you are manually creating
          ‘depends.txt’ right now, please switch to using these setup
          arguments as soon as practical, because ‘depends.txt’ support
          will be removed in the 0.6 release cycle.  For documentation
          on the new arguments, see the ‘setuptools.dist.Distribution’
          class.

        * Setup scripts using setuptools now always install using
          ‘easy_install’ internally, for ease of uninstallation and
          upgrading.

        * Added ‘--always-copy/-a’ option to always copy needed packages
          to the installation directory, even if they’re already present
          elsewhere on sys.path.  (In previous versions, this was the
          default behavior, but now you must request it.)

        * Added ‘--upgrade/-U’ option to force checking PyPI for latest
          available version(s) of all packages requested by name and
          version, even if a matching version is available locally.

        * Added automatic installation of dependencies declared by a
          distribution being installed.  These dependencies must be
          listed in the distribution’s ‘EGG-INFO’ directory, so the
          distribution has to have declared its dependencies by using
          setuptools.  If a package has requirements it didn’t declare,
          you’ll still have to deal with them yourself.  (E.g., by
          asking EasyInstall to find and install them.)

        * Added the ‘--record’ option to ‘easy_install’ for the benefit
          of tools that run ‘setup.py install --record=filename’ on
          behalf of another packaging system.)


File: setuptools.info,  Node: 0 5a3,  Next: 0 5a2,  Prev: 0 5a4,  Up: History<2>

9.475 0.5a3
===========

        * Fixed not setting script permissions to allow execution.

        * Improved sandboxing so that setup scripts that want a
          temporary directory (e.g.  pychecker) can still run in the
          sandbox.


File: setuptools.info,  Node: 0 5a2,  Next: 0 5a1,  Prev: 0 5a3,  Up: History<2>

9.476 0.5a2
===========

        * Fix stupid stupid refactoring-at-the-last-minute typos.  :(


File: setuptools.info,  Node: 0 5a1,  Next: 0 4a4,  Prev: 0 5a2,  Up: History<2>

9.477 0.5a1
===========

        * Added support for “self-installation” bootstrapping.  Packages
          can now include ‘ez_setup.py’ in their source distribution,
          and add the following to their ‘setup.py’, in order to
          automatically bootstrap installation of setuptools as part of
          their setup process:

               from ez_setup import use_setuptools
               use_setuptools()

               from setuptools import setup
               # etc...

        * Added support for converting ‘.win32.exe’ installers to eggs
          on the fly.  EasyInstall will now recognize such files by name
          and install them.

        * Fixed a problem with picking the “best” version to install
          (versions were being sorted as strings, rather than as parsed
          values)


File: setuptools.info,  Node: 0 4a4,  Next: 0 4a3,  Prev: 0 5a1,  Up: History<2>

9.478 0.4a4
===========

        * Added support for the distutils “verbose/quiet” and “dry-run”
          options, as well as the “optimize” flag.

        * Support downloading packages that were uploaded to PyPI (by
          scanning all links on package pages, not just the
          homepage/download links).


File: setuptools.info,  Node: 0 4a3,  Next: 0 4a2,  Prev: 0 4a4,  Up: History<2>

9.479 0.4a3
===========

        * Add progress messages to the search/download process so that
          you can tell what URLs it’s reading to find download links.
          (Hopefully, this will help people report out-of-date and
          broken links to package authors, and to tell when they’ve
          asked for a package that doesn’t exist.)


File: setuptools.info,  Node: 0 4a2,  Next: 0 4a1,  Prev: 0 4a3,  Up: History<2>

9.480 0.4a2
===========

        * Added ‘ez_setup.py’ installer/bootstrap script to make initial
          setuptools installation easier, and to allow distributions
          using setuptools to avoid having to include setuptools in
          their source distribution.

        * All downloads are now managed by the ‘PackageIndex’ class
          (which is now subclassable and replaceable), so that embedders
          can more easily override download logic, give download
          progress reports, etc.  The class has also been moved to the
          new ‘setuptools.package_index’ module.

        * The ‘Installer’ class no longer handles downloading, manages a
          temporary directory, or tracks the ‘zip_ok’ option.
          Downloading is now handled by ‘PackageIndex’, and ‘Installer’
          has become an ‘easy_install’ command class based on
          ‘setuptools.Command’.

        * There is a new ‘setuptools.sandbox.run_setup()’ API to invoke
          a setup script in a directory sandbox, and a new
          ‘setuptools.archive_util’ module with an ‘unpack_archive()’
          API. These were split out of EasyInstall to allow reuse by
          other tools and applications.

        * ‘setuptools.Command’ now supports reinitializing commands
          using keyword arguments to set/reset options.  Also, ‘Command’
          subclasses can now set their ‘command_consumes_arguments’
          attribute to ‘True’ in order to receive an ‘args’ option
          containing the rest of the command line.

        * Added support for installing scripts

        * Added support for setting options via distutils configuration
          files, and using distutils’ default options as a basis for
          EasyInstall’s defaults.

        * Renamed ‘--scan-url/-s’ to ‘--find-links/-f’ to free up ‘-s’
          for the script installation directory option.

        * Use ‘urllib2’ instead of ‘urllib’, to allow use of ‘https:’
          URLs if Python includes SSL support.


File: setuptools.info,  Node: 0 4a1,  Next: 0 3a4,  Prev: 0 4a2,  Up: History<2>

9.481 0.4a1
===========

        * Added ‘--scan-url’ and ‘--index-url’ options, to scan download
          pages and search PyPI for needed packages.


File: setuptools.info,  Node: 0 3a4,  Next: 0 3a3,  Prev: 0 4a1,  Up: History<2>

9.482 0.3a4
===========

        * Restrict ‘--build-directory=DIR/-b DIR’ option to only be used
          with single URL installs, to avoid running the wrong setup.py.


File: setuptools.info,  Node: 0 3a3,  Next: 0 3a2,  Prev: 0 3a4,  Up: History<2>

9.483 0.3a3
===========

        * Added ‘--build-directory=DIR/-b DIR’ option.

        * Added “installation report” that explains how to use
          ‘require()’ when doing a multiversion install or alternate
          installation directory.

        * Added SourceForge mirror auto-select (Contributed by Ian
          Bicking)

        * Added “sandboxing” that stops a setup script from running if
          it attempts to write to the filesystem outside of the build
          area

        * Added more workarounds for packages with quirky ‘install_data’
          hacks


File: setuptools.info,  Node: 0 3a2,  Next: 0 3a1,  Prev: 0 3a3,  Up: History<2>

9.484 0.3a2
===========

        * Added new options to ‘bdist_egg’ to allow tagging the egg’s
          version number with a subversion revision number, the current
          date, or an explicit tag value.  Run ‘setup.py bdist_egg
          --help’ to get more information.

        * Added subversion download support for ‘svn:’ and ‘svn+’ URLs,
          as well as automatic recognition of HTTP subversion URLs
          (Contributed by Ian Bicking)

        * Misc.  bug fixes


File: setuptools.info,  Node: 0 3a1,  Prev: 0 3a2,  Up: History<2>

9.485 0.3a1
===========

        * Initial release.


File: setuptools.info,  Node: Credits,  Next: Index,  Prev: History<2>,  Up: Top

10 Credits
**********

   * The original design for the ‘.egg’ format and the ‘pkg_resources’
     API was co-created by Phillip Eby and Bob Ippolito.  Bob also
     implemented the first version of ‘pkg_resources’, and supplied the
     macOS operating system version compatibility algorithm.

   * Ian Bicking implemented many early “creature comfort” features of
     easy_install, including support for downloading via Sourceforge and
     Subversion repositories.  Ian’s comments on the Web-SIG about WSGI
     application deployment also inspired the concept of “entry points”
     in eggs, and he has given talks at PyCon and elsewhere to inform
     and educate the community about eggs and setuptools.

   * Jim Fulton contributed time and effort to build automated tests of
     various aspects of ‘easy_install’, and supplied the doctests for
     the command-line ‘.exe’ wrappers on Windows.

   * Phillip J. Eby is the seminal author of setuptools, and first
     proposed the idea of an importable binary distribution format for
     Python application plug-ins.

   * Significant parts of the implementation of setuptools were funded
     by the Open Source Applications Foundation, to provide a plug-in
     infrastructure for the Chandler PIM application.  In addition, many
     OSAF staffers (such as Mike “Code Bear” Taylor) contributed their
     time and stress as guinea pigs for the use of eggs and setuptools,
     even before eggs were “cool”.  (Thanks, guys!)

   * Tarek Ziadé is the principal author of the Distribute fork, which
     re-invigorated the community on the project, encouraged renewed
     innovation, and addressed many defects.

   * Jason R. Coombs performed the merge with Distribute, maintaining
     the project for several years in coordination with the Python
     Packaging Authority (PyPA).


File: setuptools.info,  Node: Index,  Prev: Credits,  Up: Top

Index
*****