<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blosc Home Page  (Posts by Oscar Guiñón)</title><link>https://blosc.org/</link><description></description><atom:link href="https://blosc.org/authors/oscar-guinon.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:blosc@blosc.org"&gt;The Blosc Developers&lt;/a&gt; </copyright><lastBuildDate>Wed, 10 Jun 2026 17:44:34 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Announcing Blosc Wheels</title><link>https://blosc.org/posts/new-blosc-wheels/</link><dc:creator>Oscar Guiñón</dc:creator><description>&lt;p&gt;We are happy to announce that wheels for Intel (32 and 64 bits) and all major OS (Win, Linux, Mac) are being produced on regular basis for python-blosc.  Such wheels also contain development files for the C-Blosc library.  If you are interested in knowing more how to use them, keep reading.&lt;/p&gt;
&lt;p&gt;A Python wheel (.whl file) is a ZIP archive used to make easier the installation process of packages.  The new wheels make Blosc library installation faster by avoiding compiling, and they are now available at PyPI. See: &lt;a class="reference external" href="https://pypi.org/project/blosc/"&gt;https://pypi.org/project/blosc/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Moreover, wheels for Blosc have support for AVX2 &lt;em&gt;runtime&lt;/em&gt; detection, so it will be automatically leveraged in case the local host has AVX2. On the other hand, if the host does not have AVX2, SSE2 is used instead, which, even if it is slower than AVX2, it is still faster than regular x86 instructions.&lt;/p&gt;
&lt;section id="small-intro-to-wheels"&gt;
&lt;h2&gt;Small intro to wheels&lt;/h2&gt;
&lt;p&gt;Wheels are an advantageous alternative to distribute Python (but also pure C) packages which contain C (or Cython) source code, and hence, need a compiler.  For those that are not familiar to wheels, here it comes a small tutorial on how to create and use wheels.&lt;/p&gt;
&lt;p&gt;First, let's recall the traditional way to build a source distribution:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_bb0f1f53544f46829b4e41e203cdde15-1" name="rest_code_bb0f1f53544f46829b4e41e203cdde15-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_bb0f1f53544f46829b4e41e203cdde15-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;setup.py&lt;span class="w"&gt; &lt;/span&gt;sdist
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To build a wheel, the process is quite similar:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_d193022f70cf4967931024a035ca5bfe-1" name="rest_code_d193022f70cf4967931024a035ca5bfe-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_d193022f70cf4967931024a035ca5bfe-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;setup.py&lt;span class="w"&gt; &lt;/span&gt;bdist_wheel
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To install a package via pip (pip decides whether install a from wheel or compile from the source package; wheels have obviously more priority):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_780de3c9076046058a8a78823c0d2967-1" name="rest_code_780de3c9076046058a8a78823c0d2967-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_780de3c9076046058a8a78823c0d2967-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;package&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To install a package forcing to use source distribution:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_5c7de5af63bd4c42bedcc7faa083dcce-1" name="rest_code_5c7de5af63bd4c42bedcc7faa083dcce-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_5c7de5af63bd4c42bedcc7faa083dcce-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;--no-binary&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;package&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To install a package forcing to use wheels:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_2067b847d6bc4a18b82c411b93921d37-1" name="rest_code_2067b847d6bc4a18b82c411b93921d37-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_2067b847d6bc4a18b82c411b93921d37-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;--only-binary&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;package&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/section&gt;
&lt;section id="different-types-of-wheels"&gt;
&lt;h2&gt;Different types of wheels&lt;/h2&gt;
&lt;p&gt;There are different kind of wheels, depending on the goals and the build process:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Universal Wheels are wheels that are pure Python (i.e. contain no compiled extensions) and support Python 2 and 3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pure Python Wheels that are not “universal” are wheels that are pure Python (i.e. contain no compiled extensions), but don’t natively support both Python 2 and 3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Platform Wheels are wheels that are specific to a certain platform like Linux, macOS, or Windows, usually due to containing compiled extensions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Platform wheels are built in one Linux variant and have no guarantee of working on another Linux variant.  However, the manylinux wheels are accepted by most Linux variants:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;manylinux1: based on Centos5.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;manylinux2010: based on Centos6.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;manylinux2014: based on Centos7.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Specifically, Blosc wheels are platform wheels that support Python3 (3.7 and up) on Windows, Linux and Mac, for both 32 and 64 bits systems.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="binaries-for-c-blosc-libraries-are-included"&gt;
&lt;h2&gt;Binaries for C-Blosc libraries are included&lt;/h2&gt;
&lt;p&gt;Although wheels were meant for Python packages, nothing prevents adding more stuff to them.  In particular, we are not only distributing python-blosc binary extensions in our wheels, but also binaries for the C-Blosc library.  This way, people willing to use the C-Blosc library can make use of these wheels to install the necessary development files.&lt;/p&gt;
&lt;p&gt;First, install the binary wheel via PyPI without the need to manually compile the thing:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_29bfbe804b4e4d589cafac0e638105e4-1" name="rest_code_29bfbe804b4e4d589cafac0e638105e4-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_29bfbe804b4e4d589cafac0e638105e4-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;--only-binary&lt;span class="w"&gt; &lt;/span&gt;blosc
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, let's suppose that we want to compile the &lt;cite&gt;c-blosc/examples/many_compressors.c&lt;/cite&gt; on Linux:&lt;/p&gt;
&lt;p&gt;First, you have to look where the wheels directory is located.  In our case:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_e5ccac9144d84f23810503d2ddf1d57c-1" name="rest_code_e5ccac9144d84f23810503d2ddf1d57c-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_e5ccac9144d84f23810503d2ddf1d57c-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nv"&gt;WHEEL_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/soscar/miniconda3
&lt;a id="rest_code_e5ccac9144d84f23810503d2ddf1d57c-2" name="rest_code_e5ccac9144d84f23810503d2ddf1d57c-2" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_e5ccac9144d84f23810503d2ddf1d57c-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$WHEEL_DIR&lt;/span&gt;/lib&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;# note that you need the LD_LIBRARY_PATH env variable&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For the actual compilation, you need to pass the directory for the include and lib directories:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_6198c8ab95b84c9fb407931bb5395165-1" name="rest_code_6198c8ab95b84c9fb407931bb5395165-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_6198c8ab95b84c9fb407931bb5395165-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;gcc&lt;span class="w"&gt; &lt;/span&gt;many_compressors.c&lt;span class="w"&gt; &lt;/span&gt;-I&lt;span class="nv"&gt;$WHEEL_DIR&lt;/span&gt;/include&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;many_compressors&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="nv"&gt;$WHEEL_DIR&lt;/span&gt;/lib&lt;span class="w"&gt; &lt;/span&gt;-lblosc
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Finally, run the resulting binary and hopefully you will see something like:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-1" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-1" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;./many_compressors
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-2" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-2" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;Blosc version info: 1.20.1 ($Date:: 2020-09-08 #$)&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-3" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-3" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;Using 4 threads (previously using 1)&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-4" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-4" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-4"&gt;&lt;/a&gt;&lt;span class="go"&gt;Using blosclz compressor&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-5" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-5" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compression: 4000000 -&amp;gt; 37816 (105.8x)&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-6" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-6" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-6"&gt;&lt;/a&gt;&lt;span class="go"&gt;Succesful roundtrip!&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-7" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-7" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-7"&gt;&lt;/a&gt;&lt;span class="go"&gt;Using lz4 compressor&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-8" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-8" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compression: 4000000 -&amp;gt; 37938 (105.4x)&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-9" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-9" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-9"&gt;&lt;/a&gt;&lt;span class="go"&gt;Succesful roundtrip!&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-10" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-10" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-10"&gt;&lt;/a&gt;&lt;span class="go"&gt;Using lz4hc compressor&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-11" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-11" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-11"&gt;&lt;/a&gt;&lt;span class="go"&gt;Compression: 4000000 -&amp;gt; 27165 (147.2x)&lt;/span&gt;
&lt;a id="rest_code_1a608028c7c9415d94ada9f1f424ded1-12" name="rest_code_1a608028c7c9415d94ada9f1f424ded1-12" href="https://blosc.org/posts/new-blosc-wheels/#rest_code_1a608028c7c9415d94ada9f1f424ded1-12"&gt;&lt;/a&gt;&lt;span class="go"&gt;Succesful roundtrip!&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For more details, including compiling with binary wheels on other platforms than Linux, see: &lt;a class="reference external" href="https://github.com/Blosc/c-blosc/blob/master/COMPILING_WITH_WHEELS.rst"&gt;https://github.com/Blosc/c-blosc/blob/master/COMPILING_WITH_WHEELS.rst&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="final-remarks"&gt;
&lt;h2&gt;Final remarks&lt;/h2&gt;
&lt;p&gt;Producing Python wheels for a project can be somewhat involved for regular users. However, the advantages of binary wheels really make them worth the effort, since they make the installation process easier and faster for users.  This is why we are so happy to finally provide wheels that can benefit, not only python-blosc users, but users of the C-Blosc library as well.&lt;/p&gt;
&lt;p&gt;Last but not least, a big thank you to the Zarr team, specially to Jeff Hammerbacher, who provided a grant to the Blosc team for making the wheels support official.  Hopefully this new development will make life easier for Zarr developers and users (by the way, we are really glad to see Zarr quickly spreading as a data container for big multidimensional data, and Blosc helping on the compression part).&lt;/p&gt;
&lt;/section&gt;</description><category>wheels</category><guid>https://blosc.org/posts/new-blosc-wheels/</guid><pubDate>Mon, 18 Jan 2021 12:32:20 GMT</pubDate></item></channel></rss>