Building MGET as a Python wheel
If you just want to install and use MGET, you do not need to build it first; please see the installation instructions. These instructions assume you have intermediate level competence in developing Python packages. You should be familiar with working from the command line, cloning git repos from GitHub with ssh, and building Python packages with setuptools or similar software.
Building a wheel on Linux
Prerequisites
These instructions assume you have the following programs that are usually already installed as part of your Linux distribution:
Git
Python 3.9 or later
The C compiler suitable for your version of Python, typically GCC
We suggest you use whatever versions of these programs were provided with your Linux distribution unless you have a specific reason not to.
MATLAB
MGET includes some functions written in MATLAB. These are the .m files in
src/GeoEco/Matlab/_Matlab. MGET’s setup.py uses the MATLAB Compiler to compile these
functions into the file src/GeoEco/Matlab/_Matlab/_Matlab.ctf. Performing
this compilation requires that a full (non-free) version of MATLAB R2026a be
installed.
However, if you do change any of the .m files, you shouldn’t need MATLAB
to build MGET. We keep the compiled _Matlab.ctf in the source tree, rather
than generating it every time. At build time, setup.py computes sha256
hashes of all of the .m files and compares them to the previous values
maintained in src/GeoEco/Matlab/_Matlab/MatlabFunctions.txt If no files
have changed, setup.py skips the MATLAB compilation.
Clone the MGET repo and prepare a Python virtual environment
First, from your shell, clone the MGET repo:
git clone git@github.com:jjrob/MGET.git
Now create and activate a virtual environment:
cd MGET
python3 -m venv .venv
source .venv/bin/activate
Your shell prompt should now indicate the environment is activated and look
something like (.venv) ~/MGET$, assuming you cloned the repo directly into
your home directory.
Now install the packages needed to build MGET into your virtual environment:
python3 -m pip install -U pip setuptools setuptools_scm build wheel sphinx sphinx_rtd_theme
Build MGET
Now, continuing from your virtual environment:
python3 -m build
If successful, this will produce a new source distribution
(mget3-*.tar.gz) and wheel (mget3-*.whl) in the the dist
directory.
Building a wheel on Windows
Typically, Windows users of MGET will also be ArcGIS Pro users. ArcGIS Pro uses Anaconda Python rather than the reference implementation of Python released on python.org. The best experience for ArcGIS Pro users would be to provide them with a conda package rather than a wheel, but we have not yet done the work needed to build MGET as a conda package. Until then, we are building a wheel instead, which can be safely installed into an ArcGIS Pro conda environment (see here). However, to avoid complications that might arise if we tried to build wheels with setuptools from within a conda environment, we will not use ArcGIS’s Anaconda Python to build MGET. Instead, we’ll install our own copy of Python from python.org.
Prerequisites
Install the following, if they are not installed already:
Git for Windows. This is necessary because the build process needs to use git command line tools. GitHub Desktop will not work, although you may install it in addition to Git for Windows.
Git for Windows must be configured to access GitHub over SSH. This used to require also installing a separate SSH client such as PuTTY, but with Windows 10 and other modern versions of Windows you can use the built-in OpenSSH:
Enable the *ssh-agent* service, start it, and set it to start automatically when Windows starts. This service is needed by SSH during authentication but it is disabled by default.
If you do not already have an SSH key installed in your GitHub account, generate one with ssh-keygen, which is part of OpenSSH and should run fine on modern versions of Windows. You can run ssh-keygen and other SSH utilities from a regular Windows Command Prompt or PowerShell. You do not need to use Git Bash. After generating the key, extract the public part from the
.pubfile and use it to add a new SSH key in your user settings on github.com.If you already have an SSH key set up in GitHub, you should not generate a new key. Instead, you need to find out where your existing key is stored (perhaps on a different machine) and copy the private key file into
C:\Users\<name>\.ssh.
At this point, the newly-generated or copied private key should be in
C:\Users\<name>\.ssh. Now add it to the ssh-agent:ssh-add <path to private key file>
Now instruct Git to use Windows’s copy of OpenSSH for SSH access from now on:
git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
This may not be necessary if you instructed the Git for Windows Installer to do this for you. But there’s no harm in running this command anyway.
Python 3.13 or later. We use this rather than ArcGIS’s Anaconda Python to build the wheel.
Windows versions of MGET are mainly installed by ArcGIS Pro users, and the oldest version of Pro that MGET supports is currently 3.6.0. Because that version of Pro ships with Python 3.13, we only support 3.13 or later for building MGET on Windows (although it will probably build fine on earlier versions of Python).
Use the “Windows installer (64-bit)” to install it.
If you already have ArcGIS installed, be careful about accepting the installer’s defaults. For example, you may not want to associate this new copy of Python with
.pyfiles if ArcGIS’s Anaconda Python is already associated with them.
The C/C++ compiler recommended by Python for compiling C/C++ extension modules for Python 3.5 and later. At the time of this writing, the recommended compiler was Microsoft Visual C++ version 14.x. For our own builds, we used the most recent compiler available, version 14.3, which was that included with Visual Studio 2022. (We used the free Visual Studio 2022 Community Edition.) However, it was also acceptable to use version 14.2 which was available in the “Build Tools for Visual Studio 2019” (also free), which did not require installing a the full release of Visual Studio. For those looking to minimize installation time and complexity, that may be a better option than Visual Studio.
MATLAB
As on Linux, MATLAB R2026a must be installed in
order to rebuild MGET when any of the .m files in
src/GeoEco/Matlab/_Matlab have changed. If they have not changed, you
don’t need MATLAB.
Clone the MGET repo and prepare a Python virtual environment
First, start a Command Prompt or the shell you prefer, change directory to the place where you want to download the MGET repo, and clone it:
git clone git@github.com:jjrob/MGET.git
If you have not configured Git to access GitHub with SSH, please see the instructions above first.
Now create and activate a Python virtual environment:
cd MGET
"C:\Program Files\Python313\python.exe" -m venv .venv
.venv\Scripts\activate
This example specifically invoked python.exe using the full path to the
typical system-wide installation directory of Python 3.13. You may have
installed a different version or installed it to a different place, or you
may have your Python installation directory in your PATH environment
variable, making it unnecessary to specify the full path to the executable.
Adjust the example accordingly.
Your command prompt should now indicate the environment is activated and look
something like (.venv) C:\Users\Jason\Documents\dev\MGET>.
Now install the packages needed to build MGET into your virtual environment:
python -m pip install -U pip setuptools setuptools_scm build wheel sphinx sphinx_rtd_theme
Build MGET
Now, continuing from your virtual environment:
python -m build
If successful, this will produce a new source distribution
(mget3-*.tar.gz) and wheel (mget3-*.whl) in the the dist
directory.
Build warnings and errors you can safely ignore
On both Linux or Windows, during the building of the wheel, you may see the following error one or more times:
ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any
Apparently, this is OK to ignore. See setuptools_scm issue #997 and packaging-problems issue #742 for more information.
You may also ignore the following warning, which appears to occur because the
source tree includes .gitignore but we use MANIFEST.in to prune it from
the distribution:
warning: no previously-included files matching '.gitignore' found anywhere in distribution
The build process first excludes it from the sdist, and then seems to complain when it can’t be found when the wheels are built from the sdist.