PyYAML
PyYAML is a YAML parser and emitter for Python.
Overview
YAML is a data serialization format designed for human readability and interaction with scripting languages.
PyYAML is a YAML parser and emitter for the Python programming language.
PyYAML features
- a complete YAML 1.1 parser. In particular, PyYAML can parse all examples from the specification. The parsing algorithm is simple enough to be a reference for YAML parser implementors.
- Unicode support including UTF-8/UTF-16 input/output and *
- low-level event-based parser and emitter API (like SAX).
- high-level API for serializing and deserializing native Python objects (like DOM or pickle).
- support for all types from the YAML types repository. A simple extension API is provided.
- both pure-Python and fast LibYAML-based parsers and emitters.
- relatively sensible error messages.
Requirements
PyYAML requires Python 2.7 or Python 3.5+.
Download and Installation
The current stable release of PyYAML: 5.3.
Download links:
Unpack the archive and install the package by executing
$ python setup.py install
If you want to use LibYAML bindings, you need to download and install LibYAML. Then you may install the bindings by executing
$ python setup.py --with-libyaml install
The source distribution includes a comprehensive test suite. To run the tests, type
$ python setup.py test
Documentation
Quick example (see documentation for loading multiple documents):
>>> import yaml
>>> print yaml.load("""
... name: Vorlin Laruknuzum
... sex: Male
... class: Priest
... title: Acolyte
... hp: [32, 71]
... sp: [1, 13]
... gold: 423
... inventory:
... - a Holy Book of Prayers (Words of Wisdom)
... - an Azure Potion of Cure Light Wounds
... - a Silver Wand of Wonder
... """)
{'name': 'Vorlin Laruknuzum', 'gold': 423, 'title': 'Acolyte', 'hp': [32, 71],
'sp': [1, 13], 'sex': 'Male', 'inventory': ['a Holy Book of Prayers (Words of Wisdom)',
'an Azure Potion of Cure Light Wounds', 'a Siver Wand of Wonder'], 'class': 'Priest'}
>>> print yaml.dump({'name': "The Cloak 'Colluin'", 'depth': 5, 'rarity': 45,
... 'weight': 10, 'cost': 50000, 'flags': ['INT', 'WIS', 'SPEED', 'STEALTH']})
name: The Cloak 'Colluin'
rarity: 45
flags: [INT, WIS, SPEED, STEALTH]
weight: 10
cost: 50000
depth: 5
For more details, please check PyYAML Documentation.
History
5.3.1 (2020-03-18)
- #386 – Prevents arbitrary code execution during python/object/new constructor
5.3 (2020-01-06)
- #290 – Use
is
instead of equality for comparing with None
- #270 – fix typos and stylistic nit
- #309 – Fix up small typo
- #161 – Fix handling of slots
- #358 – Allow calling
add_multi_constructor
with None
- #285 – Add use of
safe_load()
function in README
- #351 – Fix reader for Unicode code points over 0xFFFF
- #360 – Enable certain unicode tests when maxunicode not > 0xffff
- #359 – Use
full_load
in yaml-highlight example
- #244 – Document that PyYAML is implemented with Cython
- #329 – Fix for Python 3.10
- #310 – increase size of index, line, and column fields
- #260 – remove some unused imports
- #163 – Create timezone-aware datetimes when parsed as such
- #363 – Add tests for timezone
5.2 (2019-12-02)
- Repair incompatibilities introduced with 5.1. The default Loader was changed, but several methods like add_constructor still used the old default #279 – A more flexible fix for custom tag constructors #287 – Change default loader for yaml.add_constructor #305 – Change default loader for add_implicit_resolver, add_path_resolver
- Make FullLoader safer by removing python/object/apply from the default FullLoader #347 – Move constructor for object/apply to UnsafeConstructor
- Fix bug introduced in 5.1 where quoting went wrong on systems with sys.maxunicode <= 0xffff #276 – Fix logic for quoting special characters
- Other PRs: #280 – Update CHANGES for 5.1
5.1 (2019-03-13)
- Incompatible changes:
- #257 – Deprecate yaml.load and add FullLoader and UnsafeLoader classes
- #256 – Make default_flow_style=False
- Features:
- #158 – Support escaped slash in double quotes “/”
- #45 – Allow colon in a plain scalar in a flow context
- #63 – Adding support to Unicode characters over codepoint 0xffff
- #254 – Allow to turn off sorting keys in Dumper
- Bugfixes:
- #129 – Remove call to
ord
in lib3 emitter code
- Other:
- #35 – Some modernization of the test running
- #42 – Install tox in a virtualenv
- #48 – Fix typos
- #55 – Improve RepresenterError creation
- #59 – Resolves #57, update readme issues link
- #60 – Document and test Python 3.6 support
- #61 – Use Travis CI built in pip cache support
- #62 – Remove tox workaround for Travis CI
- #75 – add 3.12 changelog
- #76 – Fallback to Pure Python if Compilation fails
- #84 – Drop unsupported Python 3.3
- #102 – Include license file in the generated wheel package
- #105 – Removed Python 2.6 & 3.3 support
- #111 – Remove commented out Psyco code
- #149 – Test on Python 3.7-dev
- #175 – Updated link to pypi in release announcement
- #181 – Import Hashable from collections.abc
- #194 – Reverting https://github.com/yaml/pyyaml/pull/74
- #195 – Build libyaml on travis
- #196 – Force cython when building sdist
- #261 – Skip certain unicode tests when maxunicode not > 0xffff
- #263 – Windows Appveyor build
3.13 (2018-07-05)
- Rebuild wheels using latest Cython for Python 3.7 support.
3.12 (2016-08-28)
- Wheel packages for Windows binaries.
- Adding an implicit resolver to a derived loader should not affect the base loader (fixes issue #57).
- Uniform representation for OrderedDict across different versions of Python (fixes issue #61).
- Fixed comparison to None warning (closes issue #64).
3.11 (2014-03-26)
- Source and binary distributions are rebuilt against the latest versions of Cython and LibYAML.
3.10 (2011-05-30)
- Do not try to build LibYAML bindings on platforms other than CPython; this fixed installation under Jython (Thank to olt(at)bogosoft(dot)com).
- Clear cyclic references in the parser and the emitter (Thank to kristjan(at)ccpgames(dot)com).
- LibYAML bindings are rebuilt with the latest version of Cython.
- Dropped support for Python 2.3 and 2.4; currently supported versions are 2.5 to 3.2.
3.09 (2009-08-31)
- Fixed use of uninitialized memory when emitting anchors with LibYAML bindings (Thank to cegner(at)yahoo-inc(dot)com).
- Fixed emitting incorrect BOM characters for UTF-16 (Thank to Valentin Nechayev)
- Fixed the emitter for folded scalars not respecting the preferred line width (Thank to Ingy).
- Fixed a subtle ordering issue with emitting
%TAG
directives (Thank to Andrey Somov).
- Fixed performance regression with LibYAML bindings.
3.08 (2008-12-31)
- Python 3 support (Thank to Erick Tryzelaar).
- Use Cython instead of Pyrex to build LibYAML bindings.
- Refactored support for unicode and byte input/output streams.
3.07 (2008-12-29)
- The emitter learned to use an optional indentation indicator for block scalar; thus scalars with leading whitespaces could now be represented in a literal or folded style.
- The test suite is now included in the source distribution. To run the tests, type
python setup.py test
.
- Refactored the test suite: dropped
unittest
in favor of a custom test appliance.
- Fixed the path resolver in
CDumper
.
- Forced an explicit document end indicator when there is a possibility of parsing ambiguity.
- More
setup.py
improvements: the package should be usable when any combination of setuptools
, Pyrex
and LibYAML
is installed.
- Windows binary packages are built against LibYAML-0.1.2.
- Minor typos and corrections. Thank to Ingy dot Net and Andrey Somov.
3.06 (2008-10-03)
- setup.py checks whether LibYAML is installed and if so, builds and installs LibYAML bindings. To force or disable installation of LibYAML bindings, use
--with-libyaml
or --without-libyaml
respectively (partially fixes #34).
- Building LibYAML bindings no longer requires Pyrex installed (fixed #33).
yaml.load()
raises an exception if the input stream contains more than one YAML document (fixed #54).
- Fixed exceptions produced by LibYAML bindings (fixed #50).
- Fixed a dot
'.'
character being recognized as !!float
(fixed #62).
- Fixed Python 2.3 compatibility issue in constructing
!!timestamp
values.
- Windows binary packages are built against the LibYAML stable branch.
- Added attributes
yaml.__version__
and yaml.__with_libyaml__
(fixed #85).
3.05 (2007-05-13)
- Allow for immutable subclasses of YAMLObject. Fixed #53.
- Make the encoding of the unicode->str conversion explicit; fixed #52.
- Fixed a problem when the
DOCUMENT-END
event is not emitted until the beginning of the next document is available. Fixed #51. Thanks edward(at)sweetbytes.net for the bug report.
- Improve output of float values. Fixed #49.
- Fix the bug when the path in
add_path_resolver
contains boolean values. Fixed #43 (thanks to jstroud(at)mbi.ucla.edu for reporting and pointing to the cause).
- Use the types module instead of constructing type objects by hand. Fixed #41. Thanks to v.haisman(at)sh.cvut.cz for the patch.
- Fix loss of microsecond precision in datetime.datetime constructor (fix #30). Thanks to edemaine(at)mit.edu for the bug report and the patch.
- Fixed loading an empty YAML stream.
3.04 (2006-08-20)
- Include experimental LibYAML bindings.
- Fully support recursive structures (close #5).
- Sort dictionary keys (close #23). Mapping node values are now represented as lists of pairs instead of dictionaries. Do not check for duplicate mapping keys as it didn’t work correctly anyway.
- Fix invalid output of single-quoted scalars in cases when a single quote is not escaped when preceeded by whitespaces or line breaks (close #17).
- To make porting easier, rewrite Parser not using generators.
- Fix handling of unexpected block mapping values, like {{{ : foo }}}
- Fix a bug in
Representer.represent_object
: copy_reg.dispatch_table
was not correctly handled.
- Fix a bug when a block scalar is incorrectly emitted in the simple key context.
- Hold references to the objects being represented (close #22).
- Make Representer not try to guess
!!pairs
when a list is represented.
- Fix timestamp constructing and representing (close #25).
- Fix the ‘N’ plain scalar being incorrectly recognized as
!!bool
(close #26).
3.03 (2006-06-19)
- Fix Python 2.5 compatibility issues.
- Fix numerous bugs in the float handling.
- Fix scanning some ill-formed documents.
- Other minor fixes.
3.02 (2006-05-15)
- Fix win32 installer. Apparently bdist_wininst does not work well under Linux.
- Fix a bug in add_path_resolver.
- Add the yaml-highlight example. Try to run on a color terminal:
python yaml_hl.py <any_document.yaml
.
3.01 (2006-05-07)
- Initial release. The version number reflects the codename of the project (PyYAML 3000) and differenciates it from the abandoned PyYaml module.
Author and Copyright
Copyright (c) 2017-2019 Ingy döt Net Copyright (c) 2006-2016 Kirill Simonov
The PyYAML module was written by Kirill Simonov. It is now maintained by the YAML community.
PyYAML is released under the MIT license.