---
layout: default
title: Apache Libcloud is a standard Python library that abstracts away differences among multiple cloud provider APIs
description: Python library for interacting with many of the popular cloud service providers using a unified API.
javascript_files:
  - _assets/js/code-examples.js
---
<div class="row section">
  <div class="col-lg-12">
    <div class="main-content text-center">
      <h1>One Interface To Rule Them All</h1>
      <h2 class="tagline">Python library for interacting with many of the popular
        cloud service providers using a unified API.</h2>

      <p>Supports <a href="https://libcloud.readthedocs.org/en/stable/supported_providers.html" target="_blank">more than 50</a> providers such as</p>

      <div id="carousel-provider-logos" class="carousel slide" data-ride="carousel" data-interval="3500">
        <!-- Wrapper for slides -->
        <div class="carousel-inner">
          <div class="item active">
            <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/rackspace.html" target="_blank">
              <img src="/images/provider-logos/rackspace.png" class="provider-logo" /></a>
            <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/ec2.html" target="_blank">
              <img src="/images/provider-logos/aws.png" class="provider-logo" /></a>
            <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/cloudstack.html" target="_blank">
            <img src="/images/provider-logos/cloudstack.png" class="provider-logo" /></a>
          </div>
          <div class="item">
            <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/openstack.html" target="_blank">
              <img src="/images/provider-logos/openstack.png" class="provider-logo" /></a>
            <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/digital_ocean.html" target="_blank">
              <img src="/images/provider-logos/digitalocean.png" class="provider-logo" /></a>
            <img src="/images/provider-logos/eucalyptus.png" class="provider-logo" />
          </div>
          <div class="item">
              <img src="/images/provider-logos/joyent.png" class="provider-logo" />
              <img src="/images/provider-logos/linode.png" class="provider-logo" />
              <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/exoscale.html" target="_blank">
              <img src="/images/provider-logos/exoscale.png" class="provider-logo" /></a>
          </div>
          <div class="item">
              <img src="/images/provider-logos/nephoscale.png" class="provider-logo" />
              <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/gce.html" target="_blank">
              <img src="/images/provider-logos/gcp.png" class="provider-logo" /></a>
              <img src="/images/provider-logos/zerigo.png" class="provider-logo" />
          </div>
          <div class="item">
              <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/cloudsigma.html" target="_blank">
                <img src="/images/provider-logos/cloudsigma.png" class="provider-logo" />
              </a>
              <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/ikoula.html" target="_blank">
                <img src="/images/provider-logos/ikoula.png" class="provider-logo" />
              </a>
              <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/libvirt.html" target="_blank">
                <img src="/images/provider-logos/libvirt.png" class="provider-logo" />
              </a>
          </div>
          <div class="item">
              <a href="https://libcloud.readthedocs.org/en/stable/compute/drivers/dimensiondata.html" target="_blank">
                <img src="/images/provider-logos/dimensiondata.png" class="provider-logo" />
              </a>
              <a href="https://libcloud.readthedocs.org/en/stable/dns/drivers/cloudflare.html" target="_blank">
                <img src="/images/provider-logos/cloudflare.png" class="provider-logo" />
              </a>
              <a href="https://libcloud.readthedocs.org/en/stable/storage/drivers/backblaze_b2.html" target="_blank">
                <img src="/images/provider-logos/backblaze.png" class="provider-logo" />
              </a>
          </div>
        </div>

        <!-- Controls -->
        <a class="left carousel-control" href="#carousel-provider-logos" data-slide="prev">
          <span class="glyphicon glyphicon-chevron-left"></span>
        </a>
        <a class="right carousel-control" href="#carousel-provider-logos" data-slide="next">
          <span class="glyphicon glyphicon-chevron-right"></span>
        </a>
      </div>
    </div>

    <div class="row section row-2">
      <div class="col-md-6">
        <h3>Installation</h3>
        <p>Latest stable version (Python 3.5+ only): <a href="https://pypi.python.org/pypi/apache-libcloud/3.5.0" target="_blank">3.5.0</a> (March 11th, 2022)</p>
        <p>Latest bug-fix only version (Python 3.5+ only): <a href="https://pypi.python.org/pypi/apache-libcloud/3.4.1" target="_blank">3.4.1</a> (November 11th, 2021)</p>
        <p>Latest bug-fix only version (Python 2 and Python 3): <a href="https://pypi.python.org/pypi/apache-libcloud/2.8.3" target="_blank">2.8.3</a> (June 12th, 2020)</p>
        <p><code>pip install apache-libcloud</code></p>
        <p>Or <a href="downloads.html">download it from our servers</a> and install it manually.</p>
      </div>

      <div class="col-md-6">
        <h3>Features</h3>
        <ul>
          <li>Avoid vendor lock-in</li>
          <li>Use the same API to talk to many different providers</li>
          <li>More than <a href="https://libcloud.readthedocs.org/en/stable/supported_providers.html">
          30 supported providers</a> total</li>
          <li>Six main APIs:
          <a href="https://libcloud.readthedocs.org/en/stable/compute/index.html">Compute</a>,
          <a href="https://libcloud.readthedocs.org/en/stable/storage/index.html">Storage</a>,
          <a href="https://libcloud.readthedocs.org/en/stable/loadbalancer/index.html">Load Balancers</a>,
          <a href="https://libcloud.readthedocs.org/en/stable/dns/index.html">DNS</a>,
          <a href="https://libcloud.readthedocs.org/en/stable/container/index.html">Container</a>,
          <a href="https://libcloud.readthedocs.org/en/stable/backup/index.html">Backup</a></li>
          <li>Supports <a href="/about.html#supported-python-versions">Python 3, PyPy (3.x and 2.x) and Python 2.7 (v2.8.x release series)</a></li>
        </ul>
      </div>

    </div>

    <div class="row section row-3">
      <div class="col-md-6 example" data-example="compute-1">
        <h3>Compute Example - Create a node</h3>
        {% highlight python linedivs %}
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver

cls = get_driver(Provider.RACKSPACE)
driver = cls('username', 'api key', region='iad')

sizes = driver.list_sizes()
images = driver.list_images()

size = [s for s in sizes if s.id == 'performance1-1'][0]
image = [i for i in images if 'Ubuntu 18.04' in i.name][0]

node = driver.create_node(name='libcloud', size=size, image=image)
print(node)
{% endhighlight %}
        <p>For information on what the code does, click or hover over the line.</p>
        <p>For more compute examples, see <a href="https://libcloud.readthedocs.org/en/stable/compute/examples.html">documentation</a>.</p>
      </div>

      <div class="col-md-6 example" data-example="dns-1">
        <h3>DNS Example - Create a DNS record</h3>
        {% highlight python linedivs %}
from libcloud.dns.types import Provider, RecordType
from libcloud.dns.providers import get_driver

cls = get_driver(Provider.ZERIGO)
driver = cls('email', 'api key')

zones = driver.list_zones()
zone = [zone for zone in zones if zone.domain == 'mydomain.com'][0]

record = zone.create_record(name='www', type=RecordType.A, data='127.0.0.1')
print(record)
{% endhighlight %}
      <p>For information on what the code does, click or hover over the line.</p>
      <p>For more DNS examples, see <a href="https://libcloud.readthedocs.org/en/stable/dns/examples.html">documentation</a>.</p>
      </div>
    </div>

    <div class="row section row-4">

      <div class="col-md-4">
        <h3>Latest Blog Posts</h3>
        {% for post in site.posts limit:4 %}
          {% unless post.exclude_from_index %}
            <p><a href="{{ post.url }}">{{ post.title }}</a>
          {% endunless %}
        {% endfor %}

        <p>You can also subscribe and stay up to date using our
        <a href="/blog/atom.xml">RSS / Atom feed.</a></p>
      </div>

      <div class="col-md-4">
        <h3>Whois using Libcloud?</h3>

          <div class="whos-using text-center">
            <a href="http://www.saltstack.com/community/" alt="SaltStack" title="SaltStack - Central system and configuration manager" rel="tooltip" "target="_blank"><img src="/images/whois-using/saltstack.png" class="logo" /></a>
            <a href="https://www.cloudcontrol.com" alt="CloudControl" title="cloudControl - Rock-solid European Platform as a Service" rel="tooltip" target="_blank"><img src="/images/whois-using/cloudcontrol.png" class="logo" /></a>
            <a href="https://mist.io" alt="mist.io" title="mist.io - Cloud management in your pocket" rel="tooltip" target="_blank"><img src="/images/whois-using/mistio.png" class="logo" /></a>
          </div>

          <div class="whos-using text-center">
            <a href="http://www.scalr.com" alt="Scalr" title="Scalr - Enterprise Cloud Management Platform" rel="tooltip" target="_blank"><img src="/images/whois-using/scalr.png" class="logo" /></a>
            <a href="http://www.rackspace.com" alt="Rackspace" title="Rackspace - The Open Cloud Company" rel="tooltip" target="_blank"><img src="/images/whois-using/rackspace.png" class="logo" /></a>
            <a href="http://www.divvycloud.com/" alt="DivvyCloud" title="DivvyCloud - Hybrid Cloud Management" rel="tooltip" target="_blank"><img src="/images/whois-using/divvycloud.png" class="logo" /></a>
          </div>

          <p>See <a href="/whois-using.html">more projects and companies</a> using Libcloud.</p>
        </div>

      <div class="col-md-4">
        <h3>Get in Touch, Follow Us</h3>

        <p>Users mailing list: <a href="mailto:users-subscribe@libcloud.apache.org">users@libcloud.apache.org</a></p>
        <p>Developers mailing list: <a href="mailto:dev-subscribe@libcloud.apache.org">dev@libcloud.apache.org</a></p>
        <p>IRC channel: <a href="https://web.libera.chat/?channel=#libcloud">#libcloud on Libera.Chat</a></p>

        <div style="margin-top: 20px">
          <a href="https://github.com/apache/libcloud" title="Libcloud on Github" rel="tooltip" target="_blank"><img src="/images/social-icons/github.jpg" alt="Libcloud on Github" class="social-icon" /></a>
          <a href="https://twitter.com/libcloud" title="Libcloud on Twitter" rel="tooltip" target="_blank"><img src="/images/social-icons/twitter.png" alt="Libcloud on Twitter" class="social-icon" /></a>
          <a href="https://www.openhub.net/p/libcloud/" title="Libcloud on Open Hub" rel="tooltip" target="_blank"><img src="/images/social-icons/openhub.png" alt="Libcloud on Open Hub" class="social-icon" /></a>
          <a href="https://sourcegraph.com/github.com/apache/libcloud" title="Libcloud on SourceGraph" rel="tooltip" target="_blank"><img src="/images/social-icons/sourcegraph.png" alt="Libcloud on SourceGraph" class="social-icon" /></a>
        </div>
      </div>
    </div>

    <!--<div class="row section row-4">
      <div class="col-md-12">
        <h3>Events, Other</h3>
        <div class="col-md-4">
          <a href="http://events.linuxfoundation.org/events/apachecon-europe" target="_blank"><img src="/images/events/apachecon_europe_2014.png" class="img-inline"></a>
        </div>
      </div>
    </div>-->

  </div>
</div>
