summaryrefslogtreecommitdiff
path: root/doc/development/python_guide/index.md
blob: a80bee27d4abf2de9a2b6ad5cc6405ac2adac177 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Python Development Guidelines

GitLab requires Python as a dependency for [reStructuredText](http://docutils.sourceforge.net/rst.html)
markup rendering.

As of GitLab 11.10, we require Python 3.

## Installation

There are several ways of installing python on your system. To be able to use the same version we use in production,
we suggest you use [pyenv](https://github.com/pyenv/pyenv). It works and behave similar to its counterpart in the
ruby world: [rbenv](https://github.com/rbenv/rbenv).

### macOS

To install `pyenv` on macOS, you can use [Homebrew](https://brew.sh/) with:

```bash
brew install pyenv
```

### Linux

To install `pyenv` on Linux, you can run the command below:

```bash
curl https://pyenv.run | bash
```

Alternatively, you may find `pypenv` available as a system package via your distro package manager.

You can read more about it in: <https://github.com/pyenv/pyenv-installer#prerequisites>.

### Shell integration

Pyenv installation will add required changes to Bash. If you use a different shell,
check for any additional steps required for it.

For Fish, you can install a plugin for [Fisher](https://github.com/jorgebucaran/fisher):

```bash
fisher add fisherman/pyenv
```

Or for [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish):

```bash
omf install pyenv
```

## Dependency management

While GitLab doesn't directly contain any Python scripts, because we depend on Python to render
[reStructuredText](http://docutils.sourceforge.net/rst.html) markup, we need to keep track on dependencies
on the main project level, so we can run that on our development machines.

Recently, an equivalent to the `Gemfile` and the [Bundler](https://bundler.io/) project has been introduced to Python:
`Pipfile` and [Pipenv](https://pipenv.readthedocs.io/en/latest/).

You will now find a `Pipfile` with the dependencies in the root folder. To install them, run:

```bash
pipenv install
```

Running this command will install both the required Python version as well as required pip dependencies.

## Use instructions

To run any python code under the Pipenv environment, you need to first start a `virtualenv` based on the dependencies
of the application. With Pipenv, this is a simple as running:

```bash
pipenv shell
```

After running that command, you can run GitLab on the same shell and it will be using the Python and dependencies
installed from the `pipenv install` command.