|
| 1 | +# Development Guide |
| 2 | + |
| 3 | +- [Development Guide](#development-guide) |
| 4 | + - [Welcome](#welcome) |
| 5 | + - [Preparing Your Local Operating System](#preparing-your-local-operating-system) |
| 6 | + - [Setting Up macOS](#setting-up-macos) |
| 7 | + - [(Optionally) Setting Up Windows](#optional-setting-up-windows) |
| 8 | + - [Installing Required Software](#installing-required-software) |
| 9 | + - [Installing on macOS](#installing-on-macos) |
| 10 | + - [Installing on Linux](#installing-on-linux) |
| 11 | + - [Installing Python](#installing-python) |
| 12 | + - [(Optionally) Virtual Environment Manager](#optionally-virtual-environment-manager) |
| 13 | + - [Installing Docker](#installing-docker) |
| 14 | + - [GitHub Workflow](#github-workflow) |
| 15 | + |
| 16 | +## Welcome |
| 17 | + |
| 18 | +This document is the canonical source of truth for building and contributing to the [Python SDK][project]. |
| 19 | + |
| 20 | +Please submit an [issue] on GitHub if you: |
| 21 | + |
| 22 | +- Notice a requirement that this doc does not capture. |
| 23 | +- Find a different doc that specifies requirements (the doc should instead link here). |
| 24 | + |
| 25 | +## Preparing Your Local Operating System |
| 26 | + |
| 27 | +Where needed, each piece of required software will have separate instructions for Linux, Windows, or macOS. |
| 28 | + |
| 29 | +### Setting Up macOS |
| 30 | + |
| 31 | +Parts of this project assume you are using GNU command line tools; you will need to install those tools on your system. [Follow these directions to install the tools](https://ryanparman.com/posts/2019/using-gnu-command-line-tools-in-macos-instead-of-freebsd-tools/). |
| 32 | + |
| 33 | +In particular, this command installs the necessary packages: |
| 34 | + |
| 35 | +```bash |
| 36 | +brew install coreutils ed findutils gawk gnu-sed gnu-tar grep make jq |
| 37 | +``` |
| 38 | + |
| 39 | +You will want to include this block or something similar at the end of your `.bashrc` or shell init script: |
| 40 | + |
| 41 | +```bash |
| 42 | +GNUBINS="$(find `brew --prefix`/opt -type d -follow -name gnubin -print)" |
| 43 | + |
| 44 | +for bindir in ${GNUBINS[@]} |
| 45 | +do |
| 46 | + export PATH=$bindir:$PATH |
| 47 | +done |
| 48 | + |
| 49 | +export PATH |
| 50 | +``` |
| 51 | + |
| 52 | +This ensures that the GNU tools are found first in your path. Note that shell init scripts work a little differently for macOS. [This article can help you figure out what changes to make.](https://scriptingosx.com/2017/04/about-bash_profile-and-bashrc-on-macos/) |
| 53 | + |
| 54 | +### (Optional) Setting Up Windows |
| 55 | + |
| 56 | +If you are running Windows, you can contribute to the SDK without requiring a Linux-based operating system. However, it is **HIGHLY** recommended that you have access to a Linux terminal or command prompt. Is this absolutely necessary? No. Will this help out sometime down the road? Yes! |
| 57 | + |
| 58 | +There are two recommended methods to set up your machine. To determine which method is the best choice, you must first determine which version of Windows you are running. To do this, press Windows logo key + R, type winver, and click OK. You may also enter the ver command at the Windows Command Prompt. |
| 59 | + |
| 60 | +- If you're using Windows 10, Version 2004, Build 19041 or higher, you can use Windows Subsystem for Linux (WSL) to perform various tasks. [Follow these instructions to install WSL2](https://docs.microsoft.com/en-us/windows/wsl/install-win10). |
| 61 | +- If you're using an earlier version of Windows, create a Linux virtual machine with at least 8GB of memory and 60GB of disk space. |
| 62 | + |
| 63 | +Once you have finished setting up your WSL2 installation or Linux VM, follow the instructions below to configure your system for building and developing code. |
| 64 | + |
| 65 | +**NOTE:** Some `examples` at the root of the repo *may* require modification as they implement Linux SIGTERM signals. This typically tends to be code using the Async IO threading model. Those examples will work on Windows if that code is removed. |
| 66 | + |
| 67 | +## Installing Required Software |
| 68 | + |
| 69 | +After setting up your operating system, you will be required to install software dependencies required to run examples, perform static checks, linters, execute tests, etc. |
| 70 | + |
| 71 | +### Installing on macOS |
| 72 | + |
| 73 | +Some build tools were installed when you prepared your system with the GNU command line tools earlier. However, you will also need to install the [Command Line Tools for Xcode](https://developer.apple.com/library/archive/technotes/tn2339/_index.html). |
| 74 | + |
| 75 | +### Installing on Linux |
| 76 | + |
| 77 | +All Linux distributions have the GNU tools available. Below are the most popular distributions and commands used to install these tools. |
| 78 | + |
| 79 | +- Debian/Ubuntu |
| 80 | + |
| 81 | + ```bash |
| 82 | + sudo apt update |
| 83 | + sudo apt install build-essential |
| 84 | + ``` |
| 85 | + |
| 86 | +- Fedora/RHEL/CentOS |
| 87 | + |
| 88 | + ```bash |
| 89 | + sudo yum update |
| 90 | + sudo yum groupinstall "Development Tools" |
| 91 | + ``` |
| 92 | + |
| 93 | +- OpenSUSE |
| 94 | + |
| 95 | + ```bash |
| 96 | + sudo zypper update |
| 97 | + sudo zypper install -t pattern devel_C_C++ |
| 98 | + ``` |
| 99 | + |
| 100 | +- Arch |
| 101 | + |
| 102 | + ```bash |
| 103 | + sudo pacman -Sy base-devel |
| 104 | + ``` |
| 105 | + |
| 106 | +### Installing Python |
| 107 | + |
| 108 | +The Python SDK is written in [Python](https://www.python.org/downloads/). To set up a Python development environment, please follow the instructions in this [Python 3 Installation guide](https://realpython.com/installing-python/). |
| 109 | + |
| 110 | +#### (Optionally) Virtual Environment Manager |
| 111 | + |
| 112 | +Once you have installed Python, an optional but **HIGHLY** recommended piece of software is something that will manage virtual environments. This is important because Python projects tend to have software requirements that vary widely between projects, and even those that use the same package may require running different versions of those dependencies. |
| 113 | + |
| 114 | +This will allow you to have multiple environments co-exist together, making it easy to switch between environments as required. There are a number of different options for virtual environment software out there. You can find a list of recommended ones below. |
| 115 | + |
| 116 | +##### Miniconda |
| 117 | + |
| 118 | +Miniconda is a free minimal installer for conda. It is a small bootstrap version of Anaconda that includes only conda. |
| 119 | + |
| 120 | +[https://docs.anaconda.com/miniconda/](https://docs.anaconda.com/miniconda/) |
| 121 | + |
| 122 | +##### venv |
| 123 | + |
| 124 | +The venv module supports creating lightweight "virtual environments", each with their own independent set of Python packages installed in their site directories. |
| 125 | + |
| 126 | +[https://docs.python.org/3/library/venv.html](https://docs.python.org/3/library/venv.html) |
| 127 | + |
| 128 | +##### pyenv |
| 129 | + |
| 130 | +pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well. |
| 131 | + |
| 132 | +[https://github.com/pyenv/pyenv](https://github.com/pyenv/pyenv) |
| 133 | + |
| 134 | +### Installing Docker |
| 135 | + |
| 136 | +Some aspects of development require Docker. To install Docker in your development environment, [follow the instructions from the Docker website](https://docs.docker.com/get-docker/). |
| 137 | + |
| 138 | +**Note:** If you are running macOS, ensure that `/usr/local/bin` is in your `PATH`. |
| 139 | + |
| 140 | +### Project Specific Software |
| 141 | + |
| 142 | +Once you have the basics, you can download and install any project specific dependencies by navigating to the root your fork and running: |
| 143 | + |
| 144 | +```bash |
| 145 | +make ensure-deps |
| 146 | +``` |
| 147 | + |
| 148 | +If you have not forked and `git clone`'ed your fork, please review the next section. |
| 149 | + |
| 150 | +## GitHub Workflow |
| 151 | + |
| 152 | +To check out code to work on, please refer to [this guide][github_workflow]. |
| 153 | + |
| 154 | +> Attribution: This was in part borrowed from this [document](https://github.com/kubernetes/community/blob/master/contributors/devel/development.md) but tailored for our use case. |
| 155 | +
|
| 156 | +[project]: https://github.com/deepgram/deepgram-python-sdk |
| 157 | +[issue]: https://github.com/deepgram/deepgram-python-sdk/issues |
| 158 | +[github_workflow]: https://github.com/deepgram/deepgram-python-sdk/.github/GITHUB_WORKFLOW.md |
0 commit comments