# Python 2 and Python 3

Ren'Py is adding support for Python 3. The goal is to keep Ren'Py itself compatible with Python 2 for as long as possible, while at the same time supporting Python 3. This is because there are a lot of Ren'Py games written in Python 2, and we'd like to keep supporting them forever, while at the same time supporting Python 3 for new development.

## Version Numbering

The goal is to release two tracks of Ren'Py, with different major version numbers:

Ren'Py 7.x.y
  Will support Python 2.
Ren'Py 8.x.y
  Will support Python 3.

We won't try to keep the two versions in sync; Ren'Py 8.0 might be Ren'Py 7.5 or so.

## Dict

The dictionary class in Python 3 has changed. The .items(), .keys(), and .values() methods now return view objects, rather than lists of objects, and the .iteritems(), .iterkeys(), and .itervalues() methods have gone away. This is a problem, as the brief way to iterate over a dict's items is:

    for k, v in d.items():
        ...

But that's a problem in Python 2, as it has to construct a list. The method proposed by PEP 469, and implemented in six. However, this leads to having to write:

    for k, v in iteritems(d):
        ...

Which doesn't feel Pythonic. The solution that I plan to implement is the one rejected in PEP 469, which is patching the dict class to add the .iteritems(), .iterkeys(), and .itervalues() methods back to the API.