Python development guidelines
GitLab requires Python as a dependency for reStructuredText markup rendering.
As of GitLab 11.10, we require Python 3.
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. It works and behaves similarly to its counterpart in the
pyenv on macOS, you can use Homebrew with:
brew install pyenv
pyenv does not officially support Windows and does not work in Windows outside the Windows Subsystem for Linux. If you are a Windows user, you can use
pyenv-win on Windows, run the following PowerShell command:
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
pyenv on Linux, you can run the command below:
curl "https://pyenv.run" | bash
Alternatively, you may find
pyenv available as a system package via your distribution’s package manager.
You can read more about it in the
Pyenv installation adds 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:
fisher add fisherman/pyenv
Or for Oh My Fish:
omf install pyenv
While GitLab doesn’t directly contain any Python scripts, because we depend on Python to render reStructuredText 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 project has been introduced to Python:
Pipfile and Pipenv.
Pipfile with the dependencies now exists in the root folder. To install them, run:
Running this command installs both the required Python version as well as required pip dependencies.
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:
After running that command, you can run GitLab on the same shell and it uses the Python and dependencies
installed from the
pipenv install command.