From ab56addf91c9eca1c942e0c647a0314ae15a7d95 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 2 Feb 2024 10:13:00 -0700 Subject: [PATCH] Update README.rst --- README.rst | 250 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 225 insertions(+), 25 deletions(-) diff --git a/README.rst b/README.rst index be103612..9071b3e3 100644 --- a/README.rst +++ b/README.rst @@ -66,8 +66,128 @@ Useful links Installation ============ -Using ``pip`` -------------- +Supported Python Versions +------------------------- + +The most recent version of GerryChain (as of February 2024) supports + +- Python 3.9 +- Python 3.10 +- Python 3.11 + +If you do not have one of these versions installed on you machine, we +recommend that you go to the +`Python website `_ and +download the installer for one of these versions. [1]_ + +A Note for Windows Users +++++++++++++++++++++++++ + + If you are using Windows and are new to Python, we recommend that you + still install Python using the installation package available on + the Python website. There are several versions of Python available + on the Windows Store, but they can be... finicky, and experience seems + to suggest that downloadable available on the Python website produce + better results. + + In addition, we recommend that you install the + `Windows Terminal `_ + from the Microsoft Store. It is still possible to use PowerShell or + the Command Prompt, but Windows Terminal tends to be more beginner + friendly and allows for a greater range of utility than the natively + installed terminal options (for example, it allows for you to install + the more recent version of PowerShell, + `PowerShell 7 `_, + and for the use of the Linux Subsystem for Windows). + + +Setting Up a Virtual Environment +-------------------------------- + +Once Python is installed on your system, you will want to open the terminal +and navigate to the working directory of your project. Here are some brief +instructions for doing so on different systems: + +- **MacOS**: To open the terminal, you will likely want to use the + Spotlight Search (the magnifying glass in the top right corner of + your screen) to find the "Terminal" application (you can also access + Spotlight Search by pressing "Command (⌘) + Space"). Once you have + the terminal open, type ``cd`` followed by the path to your working + directory. For example, if you are working on a project called + ``my_project`` in your ``Documents`` folder, you may access by typing + the command + + .. code-block:: console + + cd ~/Documents/my_project + + into the terminal (here the ``~`` is a shortcut for your home directory). + If you do not know what your working directory is, you can find it by + navigating to the desired folder in your file explorer, and clicking + on "Get Info". The path will be labeled "Where" and from there you + can copy the path to your clipboard and paste it in the terminal. + + +- **Linux**: Most Linux distributions have the keyboard shortcut + ``Ctrl + Alt + T`` set to open the terminal. From there you may navigate + to your working directory by typing ``cd`` followed by the path to your + working directory. For example, if you are working on a project called + ``my_project`` in your ``Documents`` folder, you may access this via + the command + + .. code-block:: console + + cd ~/Documents/my_project + + (here the ``~`` is a shortcut for your home directory). If you do not + know what your working directory is, you can find it by navigating to + the desired folder in your file explorer, and clicking on "Properties". + The path will be labeled "Location" and from there you can copy the path + to your clipboard and paste it in the terminal (to paste in the terminal + in Linux, you will need to use the keyboard shortcut ``Ctrl + Shift + V`` + instead of ``Ctrl + V``). + +- **Windows**: Open the Windows Terminal and type ``cd`` followed by the + path to your working directory. For example, if you are working on a + project called ``my_project`` in your ``Documents`` folder, you may + access this by typing the command + + .. code-block:: console + + cd ~\Documents\my_project + + into the terminal (here the ``~`` is a shortcut for your home directory). + If you do not know what your working directory is, + you can find it by navigating to the desired folder in your file + explorer, and clicking on "Properties". The path will be labeled + "Location" and from there you can copy the path to your clipboard + and paste it in the terminal. + + +Once you have navigated to your working directory, you will want to +set up a virtual environment. This is a way of isolating the Python +packages you install for this project from the packages you have +installed globally on your system. This is useful because it allows +you to install different versions of packages for different projects +without worrying about compatibility issues. To set up a virtual +environment, type the following command into the terminal: + +.. code-block:: console + + python -m venv .venv + +This will create a virtual environment in your working directory which +you can see if you list all the files in your working directory via +the command ``ls -a`` (``dir`` on Windows). Now we need to activate the +virtual environment. To do this, type the following command into the +terminal: + +- **Windows**: ``.venv\Scripts\activate`` +- **MacOS/Linux**: ``source .venv/bin/activate`` + +You should now see ``(.venv)`` at the beginning of your terminal prompt +now. This indicates that you are in the virtual environment, and are now +ready to install GerryChain. To install GerryChain from PyPI_, run ``pip install gerrychain`` from the command line. @@ -78,40 +198,120 @@ adjacencies or reading in shapefiles, then run This approach sometimes fails due to compatibility issues between our different Python GIS dependencies, like ``geopandas``, ``pyproj``, -``fiona``, and ``shapely``. For this reason, we recommend installing -from conda-forge for users that encounter difficulty with PyPI_. +``fiona``, and ``shapely``. If you run into this issue, try installing +the dependencies using the `geo_settings.txt <./geo_settings.txt>`_ +file. To do this, run ``pip install -r geo_settings.txt`` from the +command line. + +.. note:: + + If you plan on following through the tutorials present within the + remainder of this documentation, you will also need to install + ``matplotlib`` from PyPI_. This can also be accomplished with + a simple invocation of ``pip install matplotlib`` from the command + line. .. _PyPI: https://pypi.org/ +.. [1] Of course, if you are using a Linux system, you will either need to use your + system's package manager or install from source. You may also find luck installing + Python directly from the package manager if you find installing from source to be + troublesome. -Using conda -------------------------- +Making an Environment Reproducible +---------------------------------- -To install GerryChain from conda-forge_ using conda_, run +If you are working on a project wherein you would like to ensure +particular runs are reproducible, it is necessary to invoke -.. code-block:: console +- **MacOS/Linux**: ``export PYTHONHASHSEED=0`` +- **Windows**: - conda install -c conda-forge gerrychain + - PowerShell ``$env:PYTHONHASHSEED=0`` + - Command Prompt ``set PYTHONHASHSEED=0`` -For this command to work as intended, you will first need to activate -the conda environment that you want to install GerryChain in. If -the environment you want to activate is called ``vrdi`` (for example), -then you can do this by running +before running your code. This will ensure that the hash seed is deterministic +which is important for the replication of spanning trees across your runs. If you +would prefer to not have to do this every time, then you need to modify the +activation script for the virtual environment. Again, this is different depending +on your operating system: -.. code-block:: console +- **MacOS/Linux**: Open the file ``.venv/bin/activate`` located in your working + directory using your favorite text editor + and add the line ``export PYTHONHASHSEED=0`` after the ``export PATH`` command. + So you should see something like:: - conda activate vrdi + _OLD_VIRTUAL_PATH="$PATH" + PATH="$VIRTUAL_ENV/Scripts:$PATH" + export PATH -If this command causes problems, make sure conda is up-to-date by -running + export PYTHONHASHSEED=0 + + Then, verify that the hash seed is set to 0 in your Python environment by + running ``python`` from the command line and typing + ``import os; print(os.environ['PYTHONHASHSEED'])``. -.. code-block:: console +- **Windows**: To be safe, you will need to modify 3 files within your virtual + environment: + + - ``.venv\Scripts\activate``: Add the line ``export PYTHONHASHSEED=0`` after + the ``export PATH`` command. So you should see something like:: + + _OLD_VIRTUAL_PATH="$PATH" + PATH="$VIRTUAL_ENV/Scripts:$PATH" + export PATH + + export PYTHONHASHSEED=0 + + - ``.venv\Scripts\activate.bat``: Add the line ``set PYTHONHASHSEED=0`` to the + end of the file. So you should see something like:: + + if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% + if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + + set PATH=%VIRTUAL_ENV%\Scripts;%PATH% + rem set VIRTUAL_ENV_PROMPT=(.venv) + set PYTHONHASHSEED=0 + + - ``.venv\Scripts\Activate.ps1``: Add the line ``$env:PYTHONHASHSEED=0`` to the + end of the before the signature block. So you should see something like:: + + # Add the venv to the PATH + Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH + $Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + + $env:PYTHONHASHSEED=0 + + # SIG # Begin signature block + +After you have made these changes, verify that the hash seed is set to 0 in your +Python environment by running ``python`` from the command line and typing +``import os; print(os.environ['PYTHONHASHSEED'])`` in the Python prompt. + +.. admonition:: A Note on Jupyter + :class: note + + If you are using a jupyter notebook, you will need to make sure that you have + installed the ``ipykernel`` package in your virtual environment as well as + either ``jypyternotebook`` or ``jupyterlab``. To install these packages, run + ``pip install `` from the command line. Then, to use the virtual + python environment in your jupyter notebook, you need to invoke + + .. code-block:: console + + jupyter notebook + + or + + .. code-block:: console + + jupyter lab - conda update conda - conda init + from the command line of your working directory *while your virtual environment + is activated*. This will open a jupyter notebook in your default browser. You may + then check that the hash seed is set to 0 by running the following code in a cell + of your notebook: -For more information on using conda to install packages and manage -dependencies, see `Getting started with conda`_. + .. code-block:: python -.. _`Getting started with conda`: https://conda.io/projects/conda/en/latest/user-guide/getting-started.html -.. _conda: https://conda.io/projects/conda/en/latest/ -.. _conda-forge: https://conda-forge.org/ + import os + print(os.environ['PYTHONHASHSEED'])