Skip to main content

The PVLIB toolbox provides a set functions for simulating the performance of photovoltaic energy systems.

Project description


[![Coverage Status](](
[![Documentation Status](](

pvlib-python provides a set of documented functions for simulating the performance of photovoltaic energy systems. The toolbox was originally developed in MATLAB at Sandia National Laboratories and it implements many of the models and methods developed at the Labs. More information on Sandia Labs PV performance modelling programs can be found at


Full documentation can be found at [readthedocs](


We need your help to make pvlib-python a great tool! Please see the [Development information wiki]( for more on how you can contribute.

Quick Start

Hopefully you're using [virtualenv]( and [virtualenvwrapper]( To install, run

pip install git+

Alternatively, ``git clone`` this repository, ``cd`` into it, and run

pip install .

Add ``-e`` to install in [develop mode](

To use the NREL SPA algorithm, a pip install from the web cannot be used. Instead:

1. Download the pvlib repository from
2. Download the SPA files from [NREL](
3. Copy the SPA files into ``pvlib-python/pvlib/spa_c_files``
4. From the ``pvlib-python`` directory, run ``pip uninstall pvlib`` followed by ``pip install . ``

Usage Example
# built-in imports
import sys
import datetime

# add-on imports
import pandas as pd

# pvlib imports
from pvlib.location import Location
import pvlib.solarposition
import pvlib.clearsky

# make a location
tus = Location(32.2, -111, 'MST', 700)

# make a pandas DatetimeIndex for some day
times = pd.date_range(start=datetime.datetime(2014,6,24), end=datetime.datetime(2014,6,25), freq='1Min')

# calculate the solar position
solpos = pvlib.solarposition.get_solarposition(times, tus, method='pyephem')

# calculate clear sky data
tus_cs = pvlib.clearsky.ineichen(times, tus, airmass_model='young1994')

Until the code is tested more thoroughly, you might find it useful to add:
import logging
logging.getLogger('pvlib').setLevel(logging.DEBUG) # or at least INFO

3 clause BSD.

First, make sure the package is installed in develop mode or run ``python build_ext --inplace`` to properly compile the ``spa_py.c`` code. Testing can be accomplished by running nosetests on the pvlib directory (or pvlib/tests):
nosetests -v pvlib
Unit test code should be placed in the ``pvlib/test`` directory. Each module should have its own test module.


pvlib-python is compatible with Python versions 2.7, 3.3, and 3.4, and pandas versions 0.13.1 through 0.16.

Code Transition
Here are some of the major differences between the latest build and the original Sandia PVLIB\_Python project.

Library wide changes:
* Remove ``pvl_`` from module names.
* Consolidation of similar modules. For example, functions from ```` and ```` have been consolidated into ````.
* Removed ``Vars=Locals(); Expect...; var=pvl\_tools.Parse(Vars,Expect);`` pattern. Very few tests of input validitity remain. Garbage in, garbage or ``nan`` out.
* Removing unnecssary and sometimes undesired behavior such as setting maximum zenith=90 or airmass=0. Instead, we make extensive use of ``nan`` values.
* Adding logging calls, removing print calls.
* Code in reviewed modules is mostly PEP8 compliant.
* All code is Python 3 compatible (see testing).
* Changing function and module names so that they do not conflict.
* Added ``/pvlib/data`` for lookup tables, test, and tutorial data.
* Return one DataFrame instead of a tuple of DataFrames.

More specific changes:
* Add PyEphem option to solar position calculations.
* ```` has more AOI, projection, and irradiance sum and calculation functions
* TMY data is not forced to 1987.
* Locations are now ``pvlib.location.Location`` objects, not structs.
* Specify time zones using a string from the standard IANA Time Zone Database naming conventions or using a pytz.timezone instead of an integer GMT offset. We may add dateutils support in the future.
* ``clearsky.ineichen`` supports interpolating monthly Linke Turbidities to daily resolution.

* Using readthedocs for documentation hosting.
* Many typos and formatting errors corrected.
* Documentation source code and tutorials live in ``/`` rather than ``/pvlib/docs``.
* Additional tutorials in ``/docs/tutorials``.

* Tests are cleaner and more thorough. They are still no where near complete.
* Using Coveralls to measure test coverage.
* Using TravisCI for automated testing.
* Using ``nosetests`` for more concise test code.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pvlib-0.1.0.tar.gz (20.7 MB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page