# Building Astropy and its Subpackages¶

The build process currently uses the setuptools package to build and install the astropy core (and any affiliated packages that use the template). As is typical, there is a single setup.py file that is used for the whole astropy package. To make it easier to set up C extensions for individual sub-packages, we use extension-helpers, which allows extensions to be defined inside each sub-package.

The way extension-helpers works is that it looks for setup_package.py files anywhere in the package, and then looks for a function called get_extensions inside each of these files. This function should return a list of setuptools.Extension objects, and these are combined into an overall list of extensions to build.

For certain string-parsing tasks, Astropy uses the PLY tool. PLY generates tables that speed up the parsing process, which are checked into source code so they don’t have to be regenerated. These tables can be recognized by having either lextab or parsetab in their names. To regenerate these files (e.g. if a new version of PLY is bundled with Astropy or some of the parsing code changes), the tables need to be deleted and the appropriate parts of astropy re-imported and run. For exact details, see the comments in the headers of the parsetab and lextab files.

## Building on Windows¶

The most convenient option is to use Python installation from Miniconda. If you like Unix-like commands, Git Bash, which comes installed with Git, complements Miniconda pretty well, as long as Miniconda is installed with the option for it to be available system-wide (the option that is not recommended by the installer).

Since astropy contains C extensions, you also need to install Microsoft Visual Studio (the latest available should work) so Python can access the system C compiler.

Once everything is set up as above, you can proceed to build astropy from source in the conda environment in an OS-agnostic way. For example:

• Create a new conda environment.

• Go to the astropy code checkout directory.

• If you have not already, fetch all of the tags from the main repository. If you do not have the latest tag, your developer version number will be wrong.

• Run pip install -e . to build astropy.