CINXE.COM

2019 PSF Annual Report | Python Software Foundation

<!doctype html> <!--[if lt IE 7]> <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 lt-ie8 lt-ie9"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--><html class="no-js" lang="en" dir="ltr"> <!--<![endif]--> <head> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-TF35YF9CVH"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TF35YF9CVH'); </script> <!-- Plausible.io analytics --> <script defer data-domain="python.org" src="https://plausible.io/js/script.js"></script> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <link rel="prefetch" href="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"> <link rel="prefetch" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"> <meta name="application-name" content="Python.org"> <meta name="msapplication-tooltip" content="The official home of the Python Programming Language"> <meta name="apple-mobile-web-app-title" content="Python.org"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="HandheldFriendly" content="True"> <meta name="format-detection" content="telephone=no"> <meta http-equiv="cleartype" content="on"> <meta http-equiv="imagetoolbar" content="false"> <script async src="https://media.ethicalads.io/media/client/v1.4.0/ethicalads.min.js" integrity="sha256-U3hKDidudIaxBDEzwGJApJgPEf2mWk6cfMWghrAa6i0= sha384-UcmsCqcNRSLW/dV3Lo1oCi2/VaurXbib6p4HyUEOeIa/4OpsrnucrugAefzVZJfI sha512-q4t1L4xEjGV2R4hzqCa41P8jrgFUS8xTb8rdNv4FGvw7FpydVj/kkxBJHOiaoxHa8olCcx1Slk9K+3sNbsM4ug==" crossorigin="anonymous" ></script> <script src="/static/js/libs/modernizr.js"></script> <link href="/static/stylesheets/style.08a078d0aa02.css" rel="stylesheet" type="text/css" media="all" title="default" /> <link href="/static/stylesheets/mq.98d6092b2ada.css" rel="stylesheet" type="text/css" media="not print, braille, embossed, speech, tty" /> <link href="/static/stylesheets/no-mq.bf0c425cdb73.css" rel="stylesheet" type="text/css" media="screen" /> <!--[if (lte IE 8)&(!IEMobile)]> <link href="/static/stylesheets/no-mq.bf0c425cdb73.css" rel="stylesheet" type="text/css" media="screen" /> <![endif]--> <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/static/apple-touch-icon-144x144-precomposed.png"> <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/static/apple-touch-icon-114x114-precomposed.png"> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/static/apple-touch-icon-72x72-precomposed.png"> <link rel="apple-touch-icon-precomposed" href="/static/apple-touch-icon-precomposed.png"> <link rel="apple-touch-icon" href="/static/apple-touch-icon-precomposed.png"> <meta name="msapplication-TileImage" content="/static/metro-icon-144x144.png"><!-- white shape --> <meta name="msapplication-TileColor" content="#3673a5"><!-- python blue --> <meta name="msapplication-navbutton-color" content="#3673a5"> <title>2019 PSF Annual Report | Python Software Foundation</title> <meta name="description" content="The official home of the Python Programming Language"> <meta name="keywords" content="Python programming language object oriented web free open source software license documentation download community"> <meta property="og:type" content="website"> <meta property="og:site_name" content="Python.org"> <meta property="og:title" content="2019 PSF Annual Report"> <meta property="og:description" content="The official home of the Python Programming Language"> <meta property="og:image" content="https://www.python.org/static/opengraph-icon-200x200.png"> <meta property="og:image:secure_url" content="https://www.python.org/static/opengraph-icon-200x200.png"> <meta property="og:url" content="https://www.python.org/psf/annual-report/2019/"> <link rel="author" href="/humans.txt"> <link rel="alternate" type="application/rss+xml" title="Python Enhancement Proposals" href="https://peps.python.org/peps.rss"> <link rel="alternate" type="application/rss+xml" title="Python Job Opportunities" href="https://www.python.org/jobs/feed/rss/"> <link rel="alternate" type="application/rss+xml" title="Python Software Foundation News" href="https://feeds.feedburner.com/PythonSoftwareFoundationNews"> <link rel="alternate" type="application/rss+xml" title="Python Insider" href="https://feeds.feedburner.com/PythonInsider"> <link rel="alternate" type="application/rss+xml" title="Python Releases" href="https://www.python.org/downloads/feed.rss"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "WebSite", "url": "https://www.python.org/", "potentialAction": { "@type": "SearchAction", "target": "https://www.python.org/search/?q={search_term_string}", "query-input": "required name=search_term_string" } } </script> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-39055973-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <body class="psf pages default-page"> <div id="touchnav-wrapper"> <div id="nojs" class="do-not-print"> <p><strong>Notice:</strong> While JavaScript is not essential for this website, your interaction with the content will be limited. Please turn JavaScript on for the full experience. </p> </div> <!--[if lte IE 8]> <div id="oldie-warning" class="do-not-print"> <p> <strong>Notice:</strong> Your browser is <em>ancient</em>. Please <a href="http://browsehappy.com/">upgrade to a different browser</a> to experience a better web. </p> </div> <![endif]--> <!-- Sister Site Links --> <div id="top" class="top-bar do-not-print"> <nav class="meta-navigation container" role="navigation"> <div class="skip-link screen-reader-text"> <a href="#content" title="Skip to content">Skip to content</a> </div> <a id="close-python-network" class="jump-link" href="#python-network" aria-hidden="true"> <span aria-hidden="true" class="icon-arrow-down"><span>&#9660;</span></span> Close </a> <ul class="menu" role="tree"> <li class="python-meta "> <a href="/" title="The Python Programming Language" >Python</a> </li> <li class="psf-meta "> <a href="https://www.python.org/psf/" title="The Python Software Foundation" >PSF</a> </li> <li class="docs-meta "> <a href="https://docs.python.org" title="Python Documentation" >Docs</a> </li> <li class="pypi-meta "> <a href="https://pypi.org/" title="Python Package Index" >PyPI</a> </li> <li class="jobs-meta "> <a href="/jobs/" title="Python Job Board" >Jobs</a> </li> <li class="shop-meta "> <a href="/community/" >Community</a> </li> </ul> <a id="python-network" class="jump-link" href="#top" aria-hidden="true"> <span aria-hidden="true" class="icon-arrow-up"><span>&#9650;</span></span> The Python Network </a> </nav> </div> <!-- Header elements --> <header class="main-header" role="banner"> <div class="container"> <h1 class="site-headline"> <a href="/psf-landing/"><img class="psf-logo" src="/static/img/psf-logo.png" alt="Python Software Foundation"></a> </h1> <div class="options-bar-container do-not-print"> <a href="https://psfmember.org/civicrm/contribute/transact?reset=1&id=2" class="donate-button">Donate</a> <div class="options-bar"> <a id="site-map-link" class="jump-to-menu" href="#site-map"><span class="menu-icon">&equiv;</span> Menu</a><form class="search-the-site" action="/search/" method="get"> <fieldset title="Search Python.org"> <span aria-hidden="true" class="icon-search"></span> <label class="screen-reader-text" for="id-search-field">Search This Site</label> <input id="id-search-field" name="q" type="search" role="textbox" class="search-field" placeholder="Search" value="" tabindex="1"> <button type="submit" name="submit" id="submit" class="search-button" title="Submit this Search" tabindex="3"> GO </button> <!--[if IE]><input type="text" style="display: none;" disabled="disabled" size="1" tabindex="4"><![endif]--> </fieldset> </form><span class="breaker"></span><div class="adjust-font-size" aria-hidden="true"> <ul class="navigation menu" aria-label="Adjust Text Size on Page"> <li class="tier-1 last" aria-haspopup="true"> <a href="#" class="action-trigger"><strong><small>A</small> A</strong></a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a class="text-shrink" title="Make Text Smaller" href="javascript:;">Smaller</a></li> <li class="tier-2 element-2" role="treeitem"><a class="text-grow" title="Make Text Larger" href="javascript:;">Larger</a></li> <li class="tier-2 element-3" role="treeitem"><a class="text-reset" title="Reset any font size changes I have made" href="javascript:;">Reset</a></li> </ul> </li> </ul> </div><div class="winkwink-nudgenudge"> <ul class="navigation menu" aria-label="Social Media Navigation"> <li class="tier-1 last" aria-haspopup="true"> <a href="#" class="action-trigger">Socialize</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="https://www.linkedin.com/company/python-software-foundation/"><i aria-hidden="true" class="fa fa-linkedin-square"></i>LinkedIn</a></li> <li class="tier-2 element-2" role="treeitem"><a href="https://fosstodon.org/@ThePSF"><span aria-hidden="true" class="icon-mastodon"></span>Mastodon</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/community/irc/"><span aria-hidden="true" class="icon-freenode"></span>Chat on IRC</a></li> <li class="tier-2 element-4" role="treeitem"><a href="https://twitter.com/ThePSF"><span aria-hidden="true" class="icon-twitter"></span>Twitter</a></li> </ul> </li> </ul> </div> <span data-html-include="/authenticated"></span> </div><!-- end options-bar --> </div> <nav id="mainnav" class="psf-navigation main-navigation do-not-print" role="navigation"> <ul class="navigation menu" role="menubar" aria-label="Main Navigation"> <li id="about" class="tier-1 element-1 " aria-haspopup="true"> <a href="/psf/about/" title="" class="">About</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="/psf/mission/" title="">Mission Statement</a></li> <li class="tier-2 element-2" role="treeitem"><a href="https://www.python.org/psf/board/" title="">Board of Directors &amp; Officers</a></li> <li class="tier-2 element-3" role="treeitem"><a href="https://www.python.org/psf/records/staff/" title="">PSF Staff</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/psf/annual-report/2021/" title="">Annual Impact Report</a></li> <li class="tier-2 element-5" role="treeitem"><a href="/psf/fiscal-sponsorees/" title="">Fiscal Sponsorees</a></li> <li class="tier-2 element-6" role="treeitem"><a href="/psf/records/" title="">Public Records</a></li> <li class="tier-2 element-7" role="treeitem"><a href="https://www.python.org/psf/about/legal-and-policies/" title="">Legal &amp; Policies</a></li> <li class="tier-2 element-8" role="treeitem"><a href="https://www.python.org/psf/faq/" title="">PSF FAQ</a></li> </ul> </li> <li id="sponsorship" class="tier-1 element-2 " aria-haspopup="true"> <a href="/psf/sponsorship/" title="" class="">Sponsorship</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="/psf/sponsors/" title="">PSF Sponsors</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/sponsors/application/" title="">Apply to Sponsor</a></li> </ul> </li> <li id="membership" class="tier-1 element-3 " aria-haspopup="true"> <a href="https://www.python.org/psf/membership/" title="" class="">Membership</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="https://www.python.org/psf/membership/" title="">Sign up as a Member of the PSF!</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/psf/membership-faq" title="">Membership FAQ</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/nominations/elections/" title="">PSF Elections</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/psf/fellows-roster" title="">Nominate a Fellow &amp; Fellows Roster</a></li> </ul> </li> <li id="donate" class="tier-1 element-4 " aria-haspopup="true"> <a href="/psf/donations/" title="" class="">Donate</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="https://www.python.org/psf/donations/2024-q4-drive/" title="">End of year fundraiser: Power Python in 2024</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/psf/donations/" title="">Donate to the PSF</a></li> <li class="tier-2 element-3" role="treeitem"><a href="https://www.python.org/psf/membership/supporting/" title="">Become a Supporting Member of the PSF</a></li> <li class="tier-2 element-4" role="treeitem"><a href="https://www.python.org/psf/donations/matching-gifts/" title="">PSF Matching Donations</a></li> </ul> </li> <li id="volunteer" class="tier-1 element-5 " aria-haspopup="true"> <a href="/psf/volunteer/" title="" class="">Volunteer</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="/psf/volunteer/" title="">Volunteer for the PSF</a></li> <li class="tier-2 element-2" role="treeitem"><a href="https://www.python.org/psf/workgroups/" title="">PSF Work Groups</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/psf/volunteer/pycon/" title="">Volunteer for PyCon US</a></li> </ul> </li> <li id="grants" class="tier-1 element-6 " aria-haspopup="true"> <a href="/psf/grants/" title="" class="">Grants</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="/psf/grants/" title="">Grants program</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/psf/grants/faq/" title="">Grants Program FAQ</a></li> </ul> </li> <li id="pycon-us" class="tier-1 element-7 " aria-haspopup="true"> <a href="http://us.pycon.org" title="" class="">PyCon US</a> </li> <li id="news-community" class="tier-1 element-8 last" aria-haspopup="true"> <a href="https://www.python.org/psf/news-and-community" title="" class="">News &amp; Community</a> <ul class="subnav menu" role="menu" aria-hidden="true"> <li class="tier-2 element-1" role="treeitem"><a href="/psf/newsletter/" title="">Subscribe to the Newsletter</a></li> <li class="tier-2 element-2" role="treeitem"><a href="http://pyfound.blogspot.com/" title="">PSF Blog</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/psf/conduct/" title="">Python Community Code of Conduct</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/community/awards/" title="">Community Awards</a></li> <li class="tier-2 element-5" role="treeitem"><a href="https://discuss.python.org/" title="">Discourse</a></li> </ul> </li> </ul> </nav> <div class="header-banner "> <!-- for optional "do-not-print" class --> </div> </div><!-- end .container --> </header> <div id="content" class="content-wrapper"> <!-- Main Content Column --> <div class="container"> <section class="main-content " role="main"> <ul class="breadcrumbs menu"> </ul> <article class="text"> <style> #wrapper { overflow: hidden; position: relative; } .resize-active * { transition: none; } h1, .h1 { line-height: 34px; margin-bottom: 27px; } h2, .h2 { color: #3776ab; line-height: 26px; display: block; } p, blockquote, time, em { line-height: 28px; } time { font-style: italic; } p { margin-bottom: 24px; text-align: justify; } a { transition: color 0.3s ease-in-out; text-decoration: none; } .section-heading { padding-bottom: 23px; } .section-heading h1, .section-heading h2, .section-heading h3, .section-heading h4, .section-heading h5, .section-heading h6 { margin-bottom: 5px; } .report-container { max-width: 692px; padding: 0 15px; margin: 0 auto; } @media (min-width: 768px) { .row { display: flex; flex-wrap: wrap; margin: 0 -16px; } } @media (min-width: 768px) { .col { padding: 0 16px; width: 100%; display: flex; } } @media (min-width: 768px) { .col.col-6 { width: 50%; } } .section-text { } .accessibility { position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; } .accessibility:focus { position: static; left: 0; width: auto; height: auto; } .thousands { position: absolute; left: 0; } .section-card { padding-bottom: 20px; border-bottom: 1px solid #e2e8ec; } @media (min-width: 768px) { .section-card { padding: 9px 0 64px; } } @media (max-width: 767px) { .section-card { padding-top: 50px; } } @media (min-width: 768px) { .section-card .col.col-6:nth-child(even) { padding-left: 43px; } } .card { display: flex; align-items: center; } @media (max-width: 767px) { .card { flex-direction: column; margin-bottom: 30px; } } .card-info { position: relative; width: 50%; } @media (max-width: 767px) { .card-info { padding-top: 20px; } } @media (min-width: 768px) { .card-info { padding-left: 24px; } } .card-info:after { content: ''; position: absolute; left: 0; bottom: 0; width: 24px; height: 2px; background: #ffd242; } @media (min-width: 768px) { .card-info:after { left: 24px; } } .card-info .card-title a { color: #666; } .card-info .card-title a:hover { color: #39f; } .card-info p { margin-bottom: 13px; line-height: 20px; } .section-table { padding: 20px 0; border-bottom: 1px solid #e2e8ec; } @media (min-width: 768px) { .section-table { padding: 67px 0 61px; } } .section-table hgroup { display: flex; flex-wrap: wrap; justify-content: flex-end; position: relative; } .section-table hgroup h2 { margin-right: 10%; } @media (min-width: 480px) { .section-table hgroup h2 { margin-right: 12%; } } @media (min-width: 768px) { .section-table hgroup h2 { margin: 0 68px 5px 0; } } @media (max-width: 767px) { .section-table hgroup h2 { font-size: 17px; } } .table-holder { padding: 10px; border: 1px solid #e2e8ec; } @media (min-width: 768px) { .table-holder { padding: 26px; } } .table-group { padding: 10px 0; position: relative; } @media (min-width: 768px) { .table-group { padding: 26px 0; } } .table-group:after { content: ''; position: absolute; left: -10px; right: -10px; bottom: 0; height: 1px; background: #e2e8ec;} @media (min-width: 768px) { .table-group:after { left: -26px; right: -26px; } } .table-group:first-child { padding-top: 0; } .table-group:last-child { padding-bottom: 0; } .table-group:last-child:after { display: none; } table { width: 100%; background: #f3f5f6; } @media (max-width: 767px) { table { font-size: 12px; } } table thead tr { } table thead th { color: transparent; background-color: #297bb9; font-weight: 700; text-transform: uppercase; font-style: normal; padding: 7px 10px; text-align: left; } table thead th:first-child { color: #fff; } table td { padding: 7px 10px; font-style: italic; } @media (min-width: 768px) { table td { text-align: right; } } @media (min-width: 768px) { table td:first-child { min-width: 325px; text-align: left; } } @media (min-width: 768px) { table td:last-child { padding-right: 40px; } } table tbody tr:nth-child(even) { background: #eef1f3; } table tbody td { padding: 6px 8px; } @media (min-width: 768px) { table tbody td { padding: 7px 15px; } } table tfoot tr { background: #e2e8ec; } table tfoot tr.total-income { background: #ffd242; } table tfoot tr.total-income td:first-child { color: #444; padding-left: 10px; font-style: normal; text-transform: uppercase; } @media (min-width: 768px) { table tfoot tr.total-income td:first-child { padding-left: 15px; } } table tfoot td { font-weight: 700; font-style: italic; } table tfoot td:first-child { padding-left: 12px; } @media (min-width: 768px) { table tfoot td:first-child { padding-left: 29px; } } .section-chart { padding: 20px 0; border-bottom: 1px solid #e2e8ec; } @media (min-width: 768px) { .section-chart { padding: 58px 0; } } .section-chart:last-child { bottom: 0; } .section-chart .map-holder { padding-top: 20px; } @media (min-width: 768px) { .section-chart .map-holder { padding-top: 30px; } } .section-map .h2 { margin-bottom: 0; line-height: 1.2; } @media (max-width: 479px) { .section-map .h2 { font-size: 16px; } } @media (min-width: 480px) and (max-width: 768px) { .section-map .h2 { font-size: 18px; } } @media (min-width: 768px) and (max-width: 1024px) { .section-map .h2 { font-size: 20px; } } .map-holder { position: relative; } .list-grants { list-style-type: none; font-weight: 700; } @media (max-width: 767px) { .list-grants { font-size: 10px; } } .list-grants .north-america { position: absolute; left: 29%; top: 7%; } .list-grants .north-america .h2 { color: #00929f; } .list-grants .europe { position: absolute; top: 3.8%; left: 58.5%; } .list-grants .europe .h2 { color: #755099; } .list-grants .asia { position: absolute; top: 12%; right: 18%; } .list-grants .asia .h2 { color: #7db351; } .list-grants .south-america { position: absolute; left: 36.5%; bottom: 3%; } .list-grants .south-america .h2 { color: #e56b29; } .list-grants .africa { position: absolute; left: 57%; bottom: 19%; } .list-grants .africa .h2 { color: #a62149; } .list-grants .australlia { position: absolute; right: 30%; text-align: right; bottom: 5%; } .list-grants .australlia .h2 { color: #297bb9; } .list-grants .zealandia { position: absolute; right: 19%; text-align: right; bottom: -1%; } .list-grants .zealandia .h2 { color: #00929f; } @media (min-width: 767px) { #pie-chart-wrap { padding-top: 2em; margin-bottom: -4em; } } #pie-chart-wrap svg { overflow: visible !important; } #pie-chart-wrap polyline { stroke: #e2e8ec; stroke-width: 2px; fill: none; } #pie-chart-wrap text { color: #666; font-size: 15px; line-height: 1; font-weight: 700; stroke: none; fill: #666; } @media (max-width: 1023px) { #pie-chart-wrap text { font-size: 13px; } } #pie-chart-wrap .pointer { stroke: #e2e8ec; fill: none; stroke-width: 2px; } #pie-chart-wrap .labels { } #pie-chart-wrap .labels .text-val { font-size: 15px; font-weight: 400; } @media (max-width: 1023px) { #pie-chart-wrap .labels .text-val { font-size: 13px; } } #pie-chart-wrap .labels .text-val tspan { fill: #297bb9; } @media (max-width: 767px) { #pie-chart-wrap .labels { display: none; } } #pie-chart-wrap .lines { } @media (max-width: 767px) { #pie-chart-wrap .lines { display: none; } } #pie-chart-wrap .lines polyline { display: block; } .total-data-val { display: block; color: #666; font-size: 15px; line-height: 1.2; font-weight: 700; } @media (max-width: 767px) { .total-data-val { border-top: 1px solid #e2e8ec; padding-top: 18px; } } .total-data-val .total-val { display: block; font-weight: 400; } #histogram-chart-wrap .y-axis text, #linear-chart-wrap .y-axis text { color: #666; font-size: 15px; line-height: 1; font-weight: 700; stroke: none; fill: #666; } @media (max-width: 767px) { #histogram-chart-wrap .y-axis text, #linear-chart-wrap .y-axis text { font-size: 14px; } } #histogram-chart-wrap .y-axis line, #linear-chart-wrap .y-axis line { fill: none; stroke: #e2e8ec; } #histogram-chart-wrap .grid-line, #linear-chart-wrap .grid-line { fill: none; stroke: #e2e8ec; stroke-width: 1px; } #histogram-chart-wrap .x-axis text, #linear-chart-wrap .x-axis text { fill: #3776ab; stroke: none; font-size: 26px; font-weight: 700; line-height: 1; transform: translateY(15px) !important; } @media (max-width: 767px) { #histogram-chart-wrap .x-axis text, #linear-chart-wrap .x-axis text { font-size: 15px; } } #histogram-chart-wrap path, #linear-chart-wrap path { fill: none; stroke: none; } #histogram-chart-wrap .bar, #linear-chart-wrap .bar { stroke: none; fill: #ffd242; } #histogram-chart-wrap .bar text, #linear-chart-wrap .bar text { color: #666; font-size: 15px; line-height: 1; font-weight: 700; stroke: none; fill: #666; } @media (max-width: 767px) { #histogram-chart-wrap .bar text, #linear-chart-wrap .bar text { font-size: 13px; } } #histogram-chart-wrap .dot, #linear-chart-wrap .dot { fill: #ffd242; stroke: #ffd242; } #histogram-chart-wrap .line-label, #linear-chart-wrap .line-label { color: #666; font-size: 15px; line-height: 1; font-weight: 700; stroke: none; fill: #666; } @media (max-width: 767px) { #histogram-chart-wrap .line-label, #linear-chart-wrap .line-label { font-size: 13px; } } #histogram-chart-wrap .bar-label, #linear-chart-wrap .bar-label { color: #666; font-size: 15px; line-height: 1; font-weight: 700; stroke: none; fill: #666; } @media (max-width: 767px) { #histogram-chart-wrap .bar-label, #linear-chart-wrap .bar-label { font-size: 12px; } } @media (min-width: 768px) { .pie-chart-data { display: none !important; } } .pie-chart-data .row-data-item { display: flex; align-items: center; margin-bottom: 10px; } .pie-chart-data .data-color { display: block; width: 10px; height: 10px; } .pie-chart-data .data-label, .pie-chart-data .data-val, .pie-chart-data .data-per { padding-left: 10px; color: #666; font-size: 15px; line-height: 1; font-weight: 700; } .pie-chart-data .data-val { font-weight: 400; } .pie-chart-data .data-per { color: #297bb9; } .chart-holder { padding: 0 0 20px; margin-bottom: 20px; border-bottom: 1px solid #e2e8ec; } @media (min-width: 768px) { .chart-holder { padding: 0 0 58px; margin: 0 0 58px; } } </style> <noscript><div>Javascript must be enabled for the correct page display</div></noscript> <div id="wrapper" style="max-width: 800px; margin:0 auto;"> <main id="main" role="main"> <div class="report-container"> <section class="section-text"> <h1>PSF Annual Report</h1> <p> The Python Software Foundation (hereafter ‘PSF’) had a year of growth in 2019. Our team continued to grow, our donations increased, and our service programs expanded. We are happy to share these updates with the community through our second annual impact report. </p> <p>The PSF’s Grants Program processes over 300 requests yearly. In 2019 the Grants Program provided $324,500 USD in support to initiatives around the world. This support requires substantial accounting work and since the PSF is a non-profit organization, it is vital that our accounting roles are staffed adequately as we continue to grow the support we provide for the Python community. This not only helps us handle incoming and outgoing grants, but also provides better support for our Fiscal Sponsorees. At the beginning of 2019 we hired two folks to help with the PSF’s accounting needs in the capacities of Financial Analyst and Accounting Manager. We are thrilled that our staff continues to grow. </p> <p>2019 was also a major year for incoming grants. The PSF Packaging Working Group was awarded $407,000 USD to support work on pip in 2020, thanks to Mozilla and to the Chan Zuckerberg Initiative. Funding from the Open Technology Fund brought translations, improved accessibility, two-factor authentication, and API tokens to PyPI In addition, Facebook Research has donated $100,000 to implement advanced security features for PyPI. </p> <p>Trademark support is also increasing worldwide. The PSF continues to file necessary trademarks for PyCon and PyPI. As the PSF sets up to support the new PyLadies governance plan, we also began filing the PyLadies trademark in many countries at the end of 2019. This work helps strengthen and protect terms that are staples within our community. </p> <p>Another staple in our community is PyCon US, which is produced by the PSF. In 2019, PyCon US generated 63% of the PSF’s revenue. That revenue helps the PSF further its mission in so many ways. Thanks to increased sponsor support, we awarded $137,200 in financial aid to 143 PyCon 2019 attendees, which was a 17% increase from 2018! We look forward to increasing PyCon US accessibility in the coming years. </p> <p>In addition to increasing the amount of financial support we provide through PyCon US, the PSF was able to fund two Python in Education projects thanks to our increased revenue in 2019. A $50,000 grant was awarded to the BeeWare Project to improve Python on Android. The PSF also awarded a grant of $12,000 to Meg Ray, to work on creating a Python in Education website where we can curate educational information from all over the world. Throughout 2020, we will publish more details on the grants the PSF approved from this initiative. </p> <p>For 2020, our intentions are set on community collaborations and support. We want to continue to strengthen the support we currently provide the Python community and add new services as well. The PSF is having longer discussions about strategic planning and how we can improve community support. We look forward to sharing these updates with everyone as they develop. </p> </section> <section class="section-card"> <div class="row"> <div class="col col-6"> <div class="card"> <a href="#"> <img src="https://s3.dualstack.us-east-2.amazonaws.com/pythondotorg-assets/media/psf/annual-report/2020/ejodlowska.jpg" alt="image description"> </a> <div class="card-info"> <strong class="card-title"><a href="#">Ewa Jodlowska</a></strong> <p>Executive Director</p> </div> </div> </div> <div class="col col-6"> <div class="card"> <a href="#"> <img src="https://s3.dualstack.us-east-2.amazonaws.com/pythondotorg-assets/media/psf/annual-report/2020/naomiceder.jpg" alt="image description"> </a> <div class="card-info"> <strong class="card-title"><a href="#">Naomi Ceder</a></strong> <p>Board Chairperson</p> </div> </div> </div> </div> </section> <section class="section-table"> <div class="section-heading"> <h1>Consolidated Financial Statement</h1> </div> <hgroup> <span class="thousands">($ IN THOUSANDS)</span> <h2>2019</h2> <h2>2018</h2> </hgroup> <div class="table-holder"> <div class="table-group"> <table> <thead> <tr> <th scope="col">REVENUE</th> <th scope="col">2019</th> <th scope="col">2018</th> </tr> </thead> <tbody> <tr> <td>Program Service Revenue</td> <td>$3,316</td> <td>$2,599</td> </tr> <tr> <td>Contributions, Membership Dues, and Grants</td> <td>$1,165</td> <td>$524</td> </tr> <tr> <td>Other Revenue</td> <td>$22</td> <td>$4</td> </tr> </tbody> <tfoot> <tr> <td>Total Revenue</td> <td>$4,503</td> <td>$3,127</td> </tr> </tfoot> </table> <table> <thead> <tr> <th scope="col">EXPENSE</th> <th scope="col">2019</th> <th scope="col">2018</th> </tr> </thead> <tbody> <tr> <td>Program Service Expenses</td> <td>$2,570</td> <td>$2,168</td> </tr> <tr> <td>Staffing</td> <td>$694</td> <td>$454</td> </tr> <tr> <td>Insurance</td> <td>$68</td> <td>$50</td> </tr> <tr> <td>Legal</td> <td>$226</td> <td>$97</td> </tr> <tr> <td>Other Expenses</td> <td>$123</td> <td>$83</td> </tr> </tbody> <tfoot> <tr> <td>Total Expense</td> <td>$3,681</td> <td>$2,852</td> </tr> <tr class="total-income"> <td>NET INCOME</td> <td>$822</td> <td>$275</td> </tr> </tfoot> </table> </div> <div class="table-group"> <table> <thead> <tr> <th scope="col">ASSETS</th> <th scope="col">2019</th> <th scope="col">2018</th> </tr> </thead> <tbody> <tr> <td>Cash and Cash Equivalents</td> <td>$4,130</td> <td>$3,033</td> </tr> <tr> <td>Accounts Receivable - Net</td> <td>$477</td> <td>$416</td> </tr> <tr> <td>Other Current Assets</td> <td>$112</td> <td>$70</td> </tr> </tbody> <tfoot> <tr class="total-income"> <td>Total Assets</td> <td>$4,719</td> <td>$3,519</td> </tr> </tfoot> </table> <br> <table> <thead> <tr> <th scope="col">LIABILITIES</th> <th scope="col">2019</th> <th scope="col">2018</th> </tr> </thead> <tbody> <tr> <td>Deferred Revenue</td> <td>$1,230</td> <td>$948</td> </tr> <tr> <td>Accounts Payable and Other Liabilities</td> <td>$124</td> <td>$30</td> </tr> </tbody> <tfoot> <tr> <td>Total Liabilities</td> <td>$1,354</td> <td>$978</td> </tr> </tfoot> </table> <table> <thead> <tr> <th scope="col">NET ASSETS</th> <th scope="col">2019</th> <th scope="col">2018</th> </tr> </thead> <tbody> <tr> <td>Unrestricted Net Assets</td> <td>$2,659</td> <td>$2,397</td> </tr> <tr> <td>Temporarily Restricted Net Assets</td> <td>$706</td> <td>$144</td> </tr> </tbody> <tfoot> <tr> <td>Total Net Assets</td> <td>$3,365</td> <td>$2,541</td> </tr> <tr class="total-income"> <td>TOTAL LIABILITIES AND NET ASSETS</td> <td>$4,719</td> <td>$3,519</td> </tr> </tfoot> </table> </div> </div> </section> <section class="section-chart"> <h1>Program Service Expenses</h1> <div id="pie-chart-wrap"></div> <div class="pie-chart-data"></div> </section> <section class="section-chart section-map"> <div class="section-heading"> <h1>Grants by Continent</h1> <p>The PSF continued supporting Python conferences, workshops, and other events around the world.</p> </div> <div class="map-holder"> <img src="https://s3.dualstack.us-east-2.amazonaws.com/pythondotorg-assets/media/psf/annual-report/2020/map.svg" alt="image-map"> <ul class="list-grants"> <li class="north-america"><strong class="h2">27% </strong>North America</li> <li class="europe"><strong class="h2">35% </strong>Europe</li> <li class="asia"><strong class="h2">11% </strong>Asia</li> <li class="south-america"><strong class="h2">9% </strong>South America</li> <li class="africa"><strong class="h2">15% </strong>Africa</li> <li class="australlia"><strong class="h2">2% </strong>Australia</li> <li class="zealandia"><strong class="h2">1% </strong>Zealandia</li> </ul> </div> </section> <section class="section-chart"> <div class="section-heading"> <h1>Grants by Year</h1> <p>Grants spending increased 43% between 2016 and 2019 including supporting more regional PyCons and doubling awards to PyLadies and Django Girls workshops.</p> </div> <div id="histogram-chart-wrap"></div> <div ><p style="text-align: center">($ in thousands)</p></div> </section> <section class="section-chart"> <h1>Growth of Assets by Year</h1> <div class="chart-holder"> <div id="linear-chart-wrap"></div> <div ><p style="text-align: center">($ in thousands)</p></div> </div> <div> <p style="text-align: center">View as <a href="https://www.dropbox.com/s/vfmheyleaiiox5n/2019_Python_Annual_REPORT_v3_digital.pdf?dl=1" target="blank">PDF</a>.</p> </div> </section> </main> </div> <a class="accessibility" href="#wrapper">Back to top</a> <script src="//d3js.org/d3.v3.min.js"></script> <script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script> jQuery(window).on('load', function() { initPieChart(); initHistChart(); initLinearChart(); }) function initHistChart(){ var initData = [ { x: 2015, y: 226000, label: '$226' }, { x: 2016, y: 296000, label: '$296' }, { x: 2017, y: 281000, label: '$281' }, { x: 2018, y: 335000, label: '$335' }, { x: 2019, y: 326000, label: '$326' } ] var chartOptions = { className: 'histogram-chart', width: 660, height: 365, margin: 50, xAxisMin: 2014, xAxisMax: 2020, xAxisStep: 5, yAxisMin: 0, yAxisMax: 400000, yAxisStep: 5 }; var barWidth = 90; if (jQuery(window).width() < 768) { chartOptions.width = 345; barWidth = 40; } var svg = d3.select("#histogram-chart-wrap") .append("svg") .attr("class", chartOptions.className) .attr("width", chartOptions.width) .attr("height", chartOptions.height); var xAxisLength = chartOptions.width - 1 * chartOptions.margin; var yAxisLength = chartOptions.height - 2 * chartOptions.margin; var scaleX = d3.scale.linear() .domain([chartOptions.xAxisMin, chartOptions.xAxisMax]) .range([0, xAxisLength]); var scaleY = d3.scale.linear() .domain([chartOptions.yAxisMax, chartOptions.yAxisMin]) .range([0, yAxisLength]); var xAxis = d3.svg.axis() .scale(scaleX) .orient("bottom") .ticks(chartOptions.xAxisStep) var yAxis = d3.svg.axis() .scale(scaleY) .orient("left") .ticks(chartOptions.yAxisStep) svg.append("g") .attr("class", "x-axis") .attr("transform", "translate(" + chartOptions.margin + "," + (chartOptions.height - chartOptions.margin) + ")") .call(xAxis); svg.append("g") .attr("class", "y-axis") .attr("transform", "translate(" + chartOptions.margin + "," + chartOptions.margin + ")") .call(yAxis) .selectAll("tick") .attr("transform", "translate(" + (-chartOptions.margin) + "," + chartOptions.margin + ")") .selectAll("text") .attr("y", 6) .attr("x", 6) .style("text-anchor", "start") svg.selectAll("g.y-axis g.tick line") .attr("x2", 0) .attr("y2", 0); svg.selectAll("g.y-axis g.tick") .append("line") .attr("class", "grid-line") .attr("x2", xAxisLength) .attr("y2", 0); var g = svg.append("g") .attr("class", "body") .attr("transform", "translate(" + chartOptions.margin + ", 0 )"); g.selectAll("rect.bar") .data(initData) .enter() .append("rect") .attr("class", "bar"); g.selectAll("rect.bar") .data(initData) .attr("transform", "translate(" + (-barWidth/2) + ", 0 )") .attr("x", function(d) { return scaleX(d.x); }) .attr("y", function(d) { return scaleY(d.y) + chartOptions.margin; }) .attr("height", function(d) { return yAxisLength - scaleY(d.y); }) .attr("width", function(d){ return barWidth; }) svg.append("g").selectAll("text") .data(initData) .enter() .append("text") .attr("class", "bar-label") .attr("x", function(d) { return scaleX(d.x) + 20 }) .attr("y", function(d) { return scaleY(d.y) + 35 }) .text(function(d, i) { return initData[i].label }); function changeAxisLabels() { var xItems = jQuery('#histogram-chart-wrap .y-axis .tick'); var yItems = jQuery('#histogram-chart-wrap .x-axis .tick'); xItems.each(function(){ var currentLabel = jQuery(this).find('text'); var labelText = currentLabel.text(); var newText = labelText; if (labelText.indexOf(",") !== -1) { newText = "$" + labelText.replace(",000", "k"); } else { newText = "$" + labelText; } currentLabel.text(newText); }) yItems.each(function(i){ var currentLabel = jQuery(this).find('text'); var labelText = currentLabel.text(); var newText = labelText.replace(",", ""); currentLabel.text(newText); if ((i === 0) || (i === yItems.length-1)) { currentLabel.text(""); } }) } changeAxisLabels(); } function initLinearChart(){ var initData = [ { x: 2015, y: 2082, label: '$2,082' }, { x: 2016, y: 2501, label: '$2,501' }, { x: 2017, y: 3290, label: '$3,290' }, { x: 2018, y: 3519, label: '$3,519' }, { x: 2019, y: 4719, label: '$4,719' } ] var chartOptions = { className: 'linear-chart', width: 660, height: 365, margin: 50, xAxisMin: 2014, xAxisMax: 2020, xAxisStep: 6, yAxisMin: 0, yAxisMax: 5000, yAxisStep: 5 }; var barWidth = 90; if (jQuery(window).width() < 768) { chartOptions.width = 345; barWidth = 40; } var svg = d3.select("#linear-chart-wrap") .append("svg") .attr("class", chartOptions.className) .attr("width", chartOptions.width) .attr("height", chartOptions.height); var xAxisLength = chartOptions.width - 1 * chartOptions.margin; var yAxisLength = chartOptions.height - 2 * chartOptions.margin; var scaleX = d3.scale.linear() .domain([chartOptions.xAxisMin, chartOptions.xAxisMax]) .range([0, xAxisLength]); var scaleY = d3.scale.linear() .domain([chartOptions.yAxisMax, chartOptions.yAxisMin]) .range([0, yAxisLength]); var xAxis = d3.svg.axis() .scale(scaleX) .orient("bottom") .ticks(chartOptions.xAxisStep) var yAxis = d3.svg.axis() .scale(scaleY) .orient("left") .ticks(chartOptions.yAxisStep) svg.append("g") .attr("class", "x-axis") .attr("transform", "translate(" + chartOptions.margin + "," + (chartOptions.height - chartOptions.margin) + ")") .call(xAxis); svg.append("g") .attr("class", "y-axis") .attr("transform", "translate(" + chartOptions.margin + "," + chartOptions.margin + ")") .call(yAxis) .selectAll("tick") .attr("transform", "translate(" + (-chartOptions.margin) + "," + chartOptions.margin + ")") .selectAll("text") .attr("y", 6) .attr("x", 6) .style("text-anchor", "start") svg.selectAll("g.y-axis g.tick line") .attr("x2", 0) .attr("y2", 0); svg.selectAll("g.y-axis g.tick") .append("line") .attr("class", "grid-line") .attr("x2", xAxisLength) .attr("y2", 0); var g = svg.append("g") .attr("class", "body") .attr("transform", "translate(" + chartOptions.margin + ", 0 )"); var line = d3.svg.line() .x(function(d) { return d.x; }) .y(function(d) { return d.y; }) var dataset = []; for(i=0; i<initData.length; i++) { dataset.push({x: scaleX(initData[i].x)+chartOptions.margin, y: scaleY(initData[i].y) + chartOptions.margin}); } svg.append("g").append("path") .attr("d", line(dataset)) .attr("class", "line-chart") .style("stroke", "#ffd242") .style("stroke-width", 1); svg.selectAll(".dot") .data(dataset) .enter() .append("circle") .attr("class", "dot") .attr("cx", function(d, i) { return dataset[i].x }) .attr("cy", function(d, i) { return dataset[i].y }) .attr("r", 4) svg.append("g").selectAll("text") .data(dataset) .enter() .append("text") .attr("class", "line-label") .attr("x", function(d) { return (d.x) - 30 }) .attr("y", function(d) { return (d.y) + 25 }) .text(function(d, i) { return initData[i].label }); function changeAxisLabels() { var xItems = jQuery('#linear-chart-wrap .y-axis .tick'); var yItems = jQuery('#linear-chart-wrap .x-axis .tick'); xItems.each(function(i){ var currentLabel = jQuery(this).find('text'); var labelText = currentLabel.text(); var newText = labelText; if (labelText.indexOf(",") !== -1) { newText = "$" + i + "m"; } else { newText = "$" + labelText; } currentLabel.text(newText); }) yItems.each(function(i){ var currentLabel = jQuery(this).find('text'); var labelText = currentLabel.text(); var newText = labelText.replace(",", ""); currentLabel.text(newText); if ((i === 0) || (i === yItems.length-1)) { currentLabel.text(""); } }) } changeAxisLabels(); } function initPieChart() { var initData = [ { label: 'PyCon Expenses', val: 75.3, color: '#ffd04e' }, { label: 'Grant Expense-PSF', val: 12.6, color: '#00929f' }, { label: 'Fiscal Sponsoree Expense', val: 7.7, color: '#7db351' }, { label: 'Packaging WG, Infra, Other', val: 3.8, color: '#297bb9' }, { label: 'Code of Conduct Work Group', val: 0.4, color: '#755099' }, { label: 'Community Awards & Expenses', val: 0.2, color: '#297bb9' } ] var chartOptions = { className: 'pie-chart', width: 660, height: 560, margin: 50, circleWidth: 360, circleHeight: 360 }; if (jQuery(window).width() < 768) { chartOptions.width = 325; chartOptions.height = 325; chartOptions.circleWidth = 260; chartOptions.circleHeight = 260; } var radius = Math.min(chartOptions.circleWidth, chartOptions.circleHeight) / 2; var arc = d3.svg.arc() .outerRadius(radius * 1) .innerRadius(0); var outerArc = d3.svg.arc() .innerRadius(radius * 0.9) .outerRadius(radius * 0.9); function midAngle(d){ return d.startAngle + (d.endAngle - d.startAngle)/2; } var pie = d3.layout.pie() .sort(null) .value(function(d) { return d.val; }); var svg = d3.select("#pie-chart-wrap") .append("svg") .attr("class", chartOptions.className) .attr("width", chartOptions.width) .attr("height", chartOptions.height) .attr("viewBox", "0 0 " + chartOptions.width + " " + chartOptions.height) .append("g") .attr("transform", "translate(" +(chartOptions.width / 2) + "," + (chartOptions.height / 2 ) + ")"); var g = svg.selectAll(".arc") .data(pie(initData)) .enter() .append("g") .attr("class", "arc"); g.append("path") .attr("d", arc) .style("fill", function(d, i) { return (d.data.color); }); var key = function(d){ return d.data.label; }; svg.append("defs").append("marker") .attr("id", "circ") .attr("markerWidth", 5) .attr("markerHeight", 5) .attr("refX", 2.5) .attr("refY", 2.5) .append("circle") .attr("cx", 2.5) .attr("cy", 2.5) .attr("r", 2.5) .style("fill", "#e2e8ec") .style("stroke", "none") svg.append("g") .attr("class", "labels"); svg.append("g") .attr("class", "lines"); var text = svg.select(".labels").selectAll("text") .data(pie(initData), key); text.enter() .append("text") .attr("dy", ".35em") .attr("dy", ".35em") .text(function(d) { return d.data.label; }) .append("tspan") .attr("class", "text-val") .attr("x", 0) .attr("dy", "1.3em") .text(function(d) { return d.data.dataVal; }) .append("tspan") .text(function(d) { return (' ' + d.data.val + '%'); }) text.transition() .attrTween("transform", function(d) { this._current = this._current || d; var interpolate = d3.interpolate(this._current, d); this._current = interpolate(0); return function(t) { var d2 = interpolate(t); var pos = outerArc.centroid(d2); pos[0] = radius * (midAngle(d2) < Math.PI ? 1 : -1); if (d.value < 4) { pos[1] = pos[1] - 32; } if (d.value < 1) { pos[1] = pos[1] - 42; } if (d.value < 0.3) { pos[1] = pos[1] - 42; } return "translate("+ pos +")"; }; }) .styleTween("text-anchor", function(d){ this._current = this._current || d; var interpolate = d3.interpolate(this._current, d); this._current = interpolate(0); return function(t) { var d2 = interpolate(t); return midAngle(d2) < Math.PI ? "start":"end"; }; }); text.exit() .remove(); var polyline = svg.select(".lines").selectAll("polyline") .data(pie(initData), key); polyline.enter() .append("polyline") .attr("marker-start", "url(#circ)") .attr("stroke-width", "2") .attr("stroke", "#f00") polyline.transition() .attrTween("points", function(d){ this._current = this._current || d; var interpolate = d3.interpolate(this._current, d); this._current = interpolate(0); return function(t) { var d2 = interpolate(t); var pos = outerArc.centroid(d2); pos[0] = radius * 0.95 * (midAngle(d2) < Math.PI ? 1 : -1); if (d.value < 4) { pos[1] = pos[1] - 32; } if (d.value < 1) { pos[1] = pos[1] - 10; } if (d.value < 0.3) { pos[1] = pos[1] - 10; } return [arc.centroid(d2), outerArc.centroid(d2), pos]; }; }); polyline.exit() .remove(); jQuery('#pie-chart-wrap').each(function(){ var holder = jQuery(this); var lines = holder.find('.lines polyline'); var texts = holder.find('.labels text') var offsetline = 22; lines.each(function(i) { if (i === 5) { // jQuery(this).css({"transform": "translateY(-" + 82 + "px)"}) this.setAttribute("transform", "translate(0,-64)") } if (i === 4) { // jQuery(this).css({"transform": "translateY(-" + 42 + "px)"}) this.setAttribute("transform", "translate(0,-32)") } }) }) jQuery('.pie-chart-data').each(function(){ var holder = jQuery(this); for (var i=0; i<initData.length;i++) { var newRow = '<div class="row-data-item">' + '<span class="data-color" style="background-color:' + initData[i].color + '"></span>' + '<span class="data-label">' + initData[i].label + '</span>' + '<span class="data-val">' + initData[i].dataVal + '</span>' + '<span class="data-per">' + initData[i].val + '%</span>' + '</div>' holder.append(newRow); } }) } </script> </article> </section> </div><!-- end .container --> </div><!-- end #content .content-wrapper --> <!-- Footer and social media list --> <footer id="site-map" class="main-footer" role="contentinfo"> <div class="main-footer-links"> <div class="container"> <a id="back-to-top-1" class="jump-link" href="#python-network"><span aria-hidden="true" class="icon-arrow-up"><span>&#9650;</span></span> Back to Top</a> <ul class="sitemap navigation menu do-not-print" role="tree" id="container"> <li class="tier-1 element-1"> <a href="/about/" >About</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/about/apps/" title="">Applications</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/about/quotes/" title="">Quotes</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/about/gettingstarted/" title="">Getting Started</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/about/help/" title="">Help</a></li> <li class="tier-2 element-5" role="treeitem"><a href="http://brochure.getpython.info/" title="">Python Brochure</a></li> </ul> </li> <li class="tier-1 element-2"> <a href="/downloads/" >Downloads</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/downloads/" title="">All releases</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/downloads/source/" title="">Source code</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/downloads/windows/" title="">Windows</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/downloads/macos/" title="">macOS</a></li> <li class="tier-2 element-5" role="treeitem"><a href="/download/other/" title="">Other Platforms</a></li> <li class="tier-2 element-6" role="treeitem"><a href="https://docs.python.org/3/license.html" title="">License</a></li> <li class="tier-2 element-7" role="treeitem"><a href="/download/alternatives" title="">Alternative Implementations</a></li> </ul> </li> <li class="tier-1 element-3"> <a href="/doc/" >Documentation</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/doc/" title="">Docs</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/doc/av" title="">Audio/Visual Talks</a></li> <li class="tier-2 element-3" role="treeitem"><a href="https://wiki.python.org/moin/BeginnersGuide" title="">Beginner&#x27;s Guide</a></li> <li class="tier-2 element-4" role="treeitem"><a href="https://devguide.python.org/" title="">Developer&#x27;s Guide</a></li> <li class="tier-2 element-5" role="treeitem"><a href="https://docs.python.org/faq/" title="">FAQ</a></li> <li class="tier-2 element-6" role="treeitem"><a href="http://wiki.python.org/moin/Languages" title="">Non-English Docs</a></li> <li class="tier-2 element-7" role="treeitem"><a href="https://peps.python.org" title="">PEP Index</a></li> <li class="tier-2 element-8" role="treeitem"><a href="https://wiki.python.org/moin/PythonBooks" title="">Python Books</a></li> <li class="tier-2 element-9" role="treeitem"><a href="/doc/essays/" title="">Python Essays</a></li> </ul> </li> <li class="tier-1 element-4"> <a href="/community/" >Community</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/community/diversity/" title="">Diversity</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/community/lists/" title="">Mailing Lists</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/community/irc/" title="">IRC</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/community/forums/" title="">Forums</a></li> <li class="tier-2 element-5" role="treeitem"><a href="/psf/annual-report/2021/" title="">PSF Annual Impact Report</a></li> <li class="tier-2 element-6" role="treeitem"><a href="/community/workshops/" title="">Python Conferences</a></li> <li class="tier-2 element-7" role="treeitem"><a href="/community/sigs/" title="">Special Interest Groups</a></li> <li class="tier-2 element-8" role="treeitem"><a href="/community/logos/" title="">Python Logo</a></li> <li class="tier-2 element-9" role="treeitem"><a href="https://wiki.python.org/moin/" title="">Python Wiki</a></li> <li class="tier-2 element-10" role="treeitem"><a href="/psf/conduct/" title="">Code of Conduct</a></li> <li class="tier-2 element-11" role="treeitem"><a href="/community/awards" title="">Community Awards</a></li> <li class="tier-2 element-12" role="treeitem"><a href="/psf/get-involved/" title="">Get Involved</a></li> <li class="tier-2 element-13" role="treeitem"><a href="/psf/community-stories/" title="">Shared Stories</a></li> </ul> </li> <li class="tier-1 element-5"> <a href="/success-stories/" title="success-stories">Success Stories</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/success-stories/category/arts/" title="">Arts</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/success-stories/category/business/" title="">Business</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/success-stories/category/education/" title="">Education</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/success-stories/category/engineering/" title="">Engineering</a></li> <li class="tier-2 element-5" role="treeitem"><a href="/success-stories/category/government/" title="">Government</a></li> <li class="tier-2 element-6" role="treeitem"><a href="/success-stories/category/scientific/" title="">Scientific</a></li> <li class="tier-2 element-7" role="treeitem"><a href="/success-stories/category/software-development/" title="">Software Development</a></li> </ul> </li> <li class="tier-1 element-6"> <a href="/blogs/" title="News from around the Python world">News</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/blogs/" title="Python Insider Blog Posts">Python News</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/psf/newsletter/" title="Python Software Foundation Newsletter">PSF Newsletter</a></li> <li class="tier-2 element-3" role="treeitem"><a href="http://pyfound.blogspot.com/" title="PSF Blog">PSF News</a></li> <li class="tier-2 element-4" role="treeitem"><a href="http://pycon.blogspot.com/" title="PyCon Blog">PyCon US News</a></li> <li class="tier-2 element-5" role="treeitem"><a href="http://planetpython.org/" title="Planet Python">News from the Community</a></li> </ul> </li> <li class="tier-1 element-7"> <a href="/events/" >Events</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="/events/python-events/" title="">Python Events</a></li> <li class="tier-2 element-2" role="treeitem"><a href="/events/python-user-group/" title="">User Group Events</a></li> <li class="tier-2 element-3" role="treeitem"><a href="/events/python-events/past/" title="">Python Events Archive</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/events/python-user-group/past/" title="">User Group Events Archive</a></li> <li class="tier-2 element-5" role="treeitem"><a href="https://wiki.python.org/moin/PythonEventsCalendar#Submitting_an_Event" title="">Submit an Event</a></li> </ul> </li> <li class="tier-1 element-8"> <a href="/dev/" >Contributing</a> <ul class="subnav menu"> <li class="tier-2 element-1" role="treeitem"><a href="https://devguide.python.org/" title="">Developer&#x27;s Guide</a></li> <li class="tier-2 element-2" role="treeitem"><a href="https://github.com/python/cpython/issues" title="">Issue Tracker</a></li> <li class="tier-2 element-3" role="treeitem"><a href="https://mail.python.org/mailman/listinfo/python-dev" title="">python-dev list</a></li> <li class="tier-2 element-4" role="treeitem"><a href="/dev/core-mentorship/" title="">Core Mentorship</a></li> <li class="tier-2 element-5" role="treeitem"><a href="/dev/security/" title="">Report a Security Issue</a></li> </ul> </li> </ul> <a id="back-to-top-2" class="jump-link" href="#python-network"><span aria-hidden="true" class="icon-arrow-up"><span>&#9650;</span></span> Back to Top</a> </div><!-- end .container --> </div> <!-- end .main-footer-links --> <div class="site-base"> <div class="container"> <ul class="footer-links navigation menu do-not-print" role="tree"> <li class="tier-1 element-1"><a href="/about/help/">Help &amp; <span class="say-no-more">General</span> Contact</a></li> <li class="tier-1 element-2"><a href="/community/diversity/">Diversity <span class="say-no-more">Initiatives</span></a></li> <li class="tier-1 element-3"><a href="https://github.com/python/pythondotorg/issues">Submit Website Bug</a></li> <li class="tier-1 element-4"> <a href="https://status.python.org/">Status <span class="python-status-indicator-default" id="python-status-indicator"></span></a> </li> </ul> <div class="copyright"> <p><small> <span class="pre">Copyright &copy;2001-2025.</span> &nbsp;<span class="pre"><a href="/psf-landing/">Python Software Foundation</a></span> &nbsp;<span class="pre"><a href="/about/legal/">Legal Statements</a></span> &nbsp;<span class="pre"><a href="https://policies.python.org/python.org/Privacy-Notice/">Privacy Notice</a></span> <!--&nbsp;<span class="pre"><a href="/psf/community-infrastructure">Powered by PSF Community Infrastructure</a></span>--> </small></p> </div> </div><!-- end .container --> </div><!-- end .site-base --> </footer> </div><!-- end #touchnav-wrapper --> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="/static/js/libs/jquery-1.8.2.min.js"><\/script>')</script> <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script>window.jQuery || document.write('<script src="/static/js/libs/jquery-ui-1.12.1.min.js"><\/script>')</script> <script src="/static/js/libs/masonry.pkgd.min.js"></script> <script src="/static/js/libs/html-includes.js"></script> <script type="text/javascript" src="/static/js/main-min.ef82c06437cf.js" charset="utf-8"></script> <!--[if lte IE 7]> <script type="text/javascript" src="/static/js/plugins/IE8-min.8af6e26c7a3b.js" charset="utf-8"></script> <![endif]--> <!--[if lte IE 8]> <script type="text/javascript" src="/static/js/plugins/getComputedStyle-min.d41d8cd98f00.js" charset="utf-8"></script> <![endif]--> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10