Owlready (previously named Ontopy) is a module for ontology-oriented programming in Python 3.

Note: Owlready is deprecated in favor to the new version, Owlready2: (development version) (stable version)

Owlready can:

  • Import and export OWL 2.0 ontologies in the OWL/XML format (other file formats are not yet supported).
  • Manipulates ontology classes, instances and properties transparently, as if they were normal Python objects.
  • Add Python methods to ontology classes.
  • Perform automatic classification of classes and instances, using the HermiT reasoner.
  • Automatically generate dialog boxes for editing ontology instances, using Editobj3.

Owlready has been created by Jean-Baptiste Lamy at the LIMICS reseach lab. It is available under the GNU LGPL licence v3. If you use Owlready in scientific works, please cite the following article:

Lamy JB. Owlready: Ontology-oriented programming in Python with automatic classification and high level constructs for biomedical ontologies. Artificial Intelligence In Medicine 2017;80C:11-28

In case of troubles, questions or comments, please use this Forum/Mailing list:

What can I do with Owlready?

Load an ontology from a local repository, or from Internet:

>>> from owlready import *
>>> onto_path.append("/path/to/your/local/ontology/repository")
>>> onto = get_ontology("")
>>> onto.load()

Create new classes in the ontology, possibly mixing OWL restrictions and Python methods:

>>> class NonVegetarianPizza(onto.Pizza):
...   equivalent_to = [
...     onto.Pizza
...   & ( restriction("has_topping", SOME, onto.MeatTopping)
...     | restriction("has_topping", SOME, onto.FishTopping)
...     ) ]
...   def eat(self): print("Beurk! I'm vegetarian!")

Access ontology class, and create new instances / individuals:

>>> onto.Pizza
>>> test_pizza = onto.Pizza("test_pizza_owl_identifier")
>>> test_pizza.has_topping = [ onto.CheeseTopping(),
...                            onto.TomatoTopping(),
...                            onto.MeatTopping  () ]

Export to OWL/XML file:


Perform reasoning, and classify instances and classes:

>>> test_pizza.__class__

>>> # Execute HermiT and reparent instances and classes
>>> onto.sync_reasoner()

>>> test_pizza.__class__
Beurk! I'm vegetarian !

For more documentation, look at the doc/ and doc/examples/ directories in the source.



  • Fix sync_reasonner and Hermit call under windows (thanks Clare Grasso)


  • Add warnings
  • Accepts ontologies files that do not ends with '.owl'
  • Fix a bug when loading ontologies including concept without a '#' in their IRI


  • Add link to Owlready2 and Nabble forum/mailing list
  • Add load_ontology_from_file()
  • Add unload_all_ontologies()
  • Remove debug file /tmp/sortie_hermit.txt
  • Add Artificial Intelligence In Medicine scientific article in doc and Readme