Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
103 lines (102 sloc) 7.56 KB
<!doctype html>
<html lang="en" ng-app="app">
<head>
<meta charset="utf-8">
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css" rel="stylesheet">
<link rel="icon" href="favicon.ico">
<link rel="icon" href="wheel.png">
<style>
body{margin-top:15px;}
a.btn, h1{text-align: center;}
a.btn:last-child, canvas, body{margin-bottom:15px;}
a.btn {border-bottom-width: 0; border-radius: 0; width: 100%}
a.btn:first-child{border-top-left-radius: 5px; border-top-right-radius: 5px;}
a.btn:last-child{border-bottom-width: 1px; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px;}
pre {text-align: left;}
footer{text-align: center;}
</style>
<title>Python Wheels</title>
</head>
<body ng-controller="wheelCtrl">
<div class="container">
<div class="row">
<div class="col-sm-6">
<h1 id="wheels">Python Wheels</h1>
<object data="wheel.svg" type="image/svg+xml" width="380" height="380" class="center-block"></object>
<h2 id="what">What are wheels?</h2>
<p><a href="https://pypi.python.org/pypi/wheel">Wheels</a> are <a href="http://www.python.org/dev/peps/pep-0427">the new standard</a> of python distribution and are intended to replace eggs. Support is offered in <code>pip &gt;= 1.4</code> and <code>setuptools &gt;= 0.8</code>.</p>
<h3 id="advantages">Advantages of wheels</h3>
<ol>
<li>Faster installation for pure python and native C extension packages.</li>
<li>Avoids arbitrary code execution for installation. (Avoids setup.py)</li>
<li>Installation of a C extension does not require a compiler on Windows or macOS.</li>
<li>Allows better caching for testing and continuous integration.</li>
<li>Creates .pyc files as part of installation to ensure they match the python interpreter used.</li>
<li>More consistent installs across platforms and machines.</li>
</ol>
<h2 id="about-list">What is this list?</h2>
<p>This site shows the top 360 most-downloaded packages on <a href="https://pypi.python.org/pypi">PyPI</a> showing which have been uploaded as wheel archives.</p>
<ul>
<li><span class="text-success">Green</span> packages offer wheels,</li>
<li><span class="text-muted">White</span> packages have no wheel archives uploaded (yet!).</li>
</ul>
<p>Packages that are known to be deprecated are not included. (For example distribute). If your package is incorrectly listed, please <a href="https://github.com/meshy/pythonwheels/issues/">create a ticket</a>.</p>
<p>This is not the official website for wheels, just a nice visual way to measure adoption. To see the authoritative guide on wheels and other aspects of python packaging, see the <a href="https://packaging.python.org">Python Packaging User Guide</a>.</p>
<h2 id="creating-wheels">My package is white. What can I do?</h2>
<h3 id="pure-wheel">Pure Python</h3>
<p>If you have a pure python package that is not using 2to3 for Python 3 support, you've got it easy. Make sure Wheel is installed&hellip;</p>
<pre>
pip install wheel</pre>
<p>&hellip;and when you'd normally run <code>python setup.py sdist upload</code>, run instead <code>python setup.py sdist bdist_wheel upload</code>. For a more in-depth explanation, see this guide on <a href="https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/">sharing your labor of love</a>.</p>
<p><em>Note: </em>If your project is python 2 and 3 compatible you can create a universal wheel distribution. Create a file called <code>setup.cfg</code> with the following content and upload your package.</p>
<pre>
[bdist_wheel]
universal = 1</pre>
<p><strong>Warning: </strong>If your project has optional C extensions, it is recommended not to publish a universal wheel, because pip will prefer the wheel over a source installation.</p>
<h3 id="dirty-wheel">C extensions</h3>
<p>PyPI currently allows uploading platform-specific wheels for Windows, macOS and Linux. It is useful to create wheels for these platforms, as it avoids the need for your users to compile the package when installing.</p>
<p>You will need to have access to the platform you are building for.</p>
<h2 id="bugs">Something's wrong with this page!</h2>
<p>Fantastic, a problem found is a problem fixed. Please <a href="https://github.com/meshy/pythonwheels/issues/">create a ticket</a>!</p>
<p>You can also <a href="https://github.com/meshy/pythonwheels/pulls/">submit a pull-request</a>.</p>
<p><em>Note: </em>Requests for behavioural changes in the packaging tools themselves should be directed to <a href="https://mail.python.org/mailman/listinfo/distutils-sig">distutils-sig</a> and the <a href="https://github.com/pypa/packaging-problems">Python Packaging Authority</a>.</p>
<h2 id="thanks">Thanks</h2>
<p>Thanks to the <a href="https://python3wos.appspot.com/">Python 3 Wall of Superpowers</a> for the concept and making their code open source, <a href="https://twitter.com/dstufft">Donald Stufft</a> for his help on IRC, <a href="https://twitter.com/jturnbull">James Turnbull</a> for the intro copy, and <a href="http://ghickman.co.uk/">George Hickman</a> for pointing me in the right direction as usual.</p>
</div>
<div class="col-sm-6">
<div class="list">
<span ng-hide="packages">pythonwheels.com requires javascript to be enabled to display the list of packages.</span>
<a ng-repeat="package in packages" ng-href="https://pypi.python.org/pypi/{{ package.name }}" class="btn btn-{{ package.css_class }}" ng-attr-title="{{package.title}}">
<span ng-bind="package.name"></span>
<span ng-bind="package.icon"></span>
</a>
</div>
</div>
</div>
<footer>
<p>Written by <a href="http://meshy.co.uk/">meshy</a>, sponsored by <a href="http://incuna.com/">Incuna</a>, code on <a href="https://github.com/meshy/pythonwheels">GitHub</a>.</p>
<p>Last updated <span ng-bind="last_update"></span>. (Updated hourly.)</p>
</footer>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script>
<script>
var app = angular.module('app', [])
.controller('wheelCtrl', function ($scope, $http){
$http.get('results.json').then(function(res){
$scope.last_update = res.data.last_update;
$scope.packages = res.data.data;
});
});
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-45641000-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>
</body>
</html>