A Python wrapper around the OpenWeatherMap web API
PyOWM
A Python wrapper around OpenWeatherMap web APIsWhat is it?
PyOWM is a client Python wrapper library for OpenWeatherMap (OWM) web APIs. It allows quick and easy consumption of OWM data from Python applications via a simple object model and in a human-friendly fashion.PyOWM runs on Python 3.9+
Former Dark Sky API users: you can can use PyOWM to get OpenWeatherMap's OneCall API data as an easy replacement to Dark Sky
What kind of data can I get with PyOWM ?
With PyOWM you can integrate into your code any of the following OpenWeatherMap web APIs:- Weather API v3.0 + OneCall API, providing current weather data, weather forecasts, weather history - Agro API v1.0, providing soil data and satellite imagery search and download - Air Pollution API v3.0, providing data about CO, O3, NO2 and SO2 - UV Index API v3.0, providing data about Ultraviolet exposition - Stations API v3.0, allowing to create and manage meteostation and publish local weather measurements - Weather Alerts API v3.0, allowing to set triggers on weather conditions and areas and poll for spawned alerts - Image tiles for several map layers provided by OWM - Geocoding API v1.0 allowing to perform direct/reverse geocoding
In case of trouble...
Please read the FAQ before filing a new issue on GitHub! There are many common issues, therefore a fix for your issue might come easier than you think## Get started
API key
As OpenWeatherMap APIs need a valid API key to allow responses, PyOWM won't work if you don't provide one. This stands for both free and paid (pro) subscription plans. You can signup for a free API key on the OWM website Please notice that the free API subscription plan is subject to requests throttling.
Example
With a free OWM API Key:
from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps
---------- FREE API KEY examples ---------------------
owm = OWM('your free OWM API key') mgr = owm.weather_manager()
Search for current weather in London (Great Britain) and get details
observation = mgr.weatheratplace('London,GB')
w = observation.weather
w.detailed_status # 'clouds' w.wind() # {'speed': 4.6, 'deg': 330} w.humidity # 87 w.temperature('celsius') # {'tempmax': 10.5, 'temp': 9.7, 'tempmin': 9.0} w.rain # {} w.heat_index # None w.clouds # 75
Will it be clear tomorrow at this time in Milan (Italy) ?
forecast = mgr.forecastatplace('Milan,IT', 'daily')
answer = forecast.willbeclear_at(timestamps.tomorrow())
---------- PAID API KEY example ---------------------
configdict = config.getdefaultconfigforsubscriptiontype('professional') owm = OWM('your paid OWM API key', config_dict)
What's the current humidity in Berlin (Germany) ?
onecallobject = mgr.one_call(lat=52.5244, lon=13.4105)
onecallobject.current.humidity
Installation
Install withpip for your ease:
$ pip install pyowm
There are alternatives: setuptools, Windows installers and common Linux package managers such as Yaourt (Arch Linux) YaST/Zypper (OpenSuse) (please refer to the documentation for more detail)
Eager to fetch the very latest updates to PyOWM? Install the development trunk (which might be unstable). Eg on Linux:
$ git clone https://github.com/csparpa/pyowm.git
$ cd pyowm && git checkout develop
$ pip install -r requirements.txt && python setup.py install
Documentation
The library software API documentation is available on Read the Docs.The Code recipes section comes in handy!
Community & Contributing
Here are some cool projects that use PyOWM
Contributors (coding, testing, packaging, reporting issues) are welcome! See the the official documentation website for details.


