= Building Python with Mill
:language: python
:language-small: python

Mill can be used to build Python projects, whether large pure-Python codebases
or Python modules mixed in with other languages like Java or Kotlin. While Python
is traditionally a scripting language, larger Python projects often include tools like
xref:pythonlib/linting.adoc#_formatting[autoformatting], xref:pythonlib/linting.adoc#_linting[linting],
typechecking with Mypy, packaging PEX files, xref:pythonlib/publishing.adoc[publishing to PyPI],
and so on. These workflows can benefit from a build tool like Mill to provide parallelization,
caching, xref:large/selective-execution.adoc[Selective Test Execution], and other
features that speed up development and CI.


NOTE: Mill's Python support is still under active development, and you can expect
the APIs to evolve over time. Nevertheless, it is complete enough to support most
common tasks like xref:pythonlib/dependencies.adoc[downloading dependencies from PyPI],
xref:pythonlib/testing.adoc[running tests],
xref:pythonlib/publishing.adoc[publishing libraries] or
xref:pythonlib/web-examples.adoc[running web apps], while providing build-tool benefits
like automatic build-time parallelism, caching, and xref:large/selective-execution.adoc[Selective Test Execution]
that especially benefit large multi-module codebases and monorepos.
Please try it out and let us know on Github if you hit any issues!

== Simple Python Module

include::partial$example/pythonlib/basic/1-simple.adoc[]

== Custom Build Logic

include::partial$example/pythonlib/basic/2-custom-build-logic.adoc[]

== Multi-Module Project

include::partial$example/pythonlib/basic/3-multi-module.adoc[]
