• The say name was inspired by Perl’s say, but the similarity stops there.
  • Automated multi-version testing managed with the wonderful pytest, pytest-cov, coverage, and tox. Packaging linting with pyroma.
  • Successfully packaged for, and tested against, all late-model versions of Python: 2.6, 2.7, 3.3, 3.4, 3.5, and 3.6 as well as late models of PyPy and PyPy3.
  • say has greater ambitions than just simple template printing. It’s part of a larger rethinking of how output should be formatted. say.Text, show, and quoter are other down-payments on this larger vision. Stay tuned.
  • In addition to being a practical module in its own right, say is testbed for options, a package that provides high-flexibility option, configuration, and parameter management.
  • The author, Jonathan Eunice or @jeunice on Twitter welcomes your comments and suggestions. If you’re using say in your own work, drop me a note and tell me how you’re using it, how you like it, and what you’d like to see!


  • Further formatting techniques for easily generating HTML output and formatting non-scalar values.
  • Complete the transition to per-method styling and more refined named styles.
  • Provide code that allows pylint to see that variables used inside the say and fmt format strings are indeed thereby used.