---
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.7+ only): <a href="https://pypi.python.org/pypi/apache-libcloud/3.8.0" target="_blank">3.8.0</a> (August 10th, 2023)</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.7+, PyPy 3.7+, 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://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>
