Étant donné un paquet python pack
fournissant la classe pack.foo.Bar
:refactorisation un module et en gardant la compatibilité ascendante, y compris pour intersphinx
pack/
__init__.py # empty
foo.py
# content of foo.py
"""
This module does stuff using the :class:`pack.foo.Bar` class.
"""
class Bar(object):
pass
# much more code here
Je veux factoriser le module pack.foo
dans un paquet, de sorte que la classe Bar
est déplacé le fichier pack/foo/bar.py
. Afin de maintenir la compatibilité ascendante, je peux eu ce au fichier pack/foo/__init__.py
:
"""
This module does stuff using the :class:`pack.foo.Bar` class.
"""
from pack.foo.bar import Bar
__all__ = ['Bar']
Les utilisateurs de l'API peuvent toujours utiliser from pack.foo import Bar
.
Un problème subsiste: les références lors de l'utilisation du sphinx. Lorsque le docstring sphynx parse dans pack/foo/__init__.py
, il ne peut pas trouver la cible:
WARNING: py:class reference target not found pack.foo.bar.Bar
qui briserait la documentation faite par les utilisateurs lors de l'utilisation de l'extension intersphinx.
Quelle est la bonne façon de rééquiper une structure de colis tout en conservant une rétrocompatibilité complète, y compris l'inventaire des objets sphinx?