Setting up your work environment

What is a project?

The word project is used for quite a lot of things. There are many types of "projects". For example a Django project is a directory where you can invoke a runserver. It contains at least a and usually a file

But as a Lino contributor you are using atelier, a minimalistic command-line project management tool. Atelier projects have only one thing in common: each project is a directory on your file system. You "activate" a project by opening a terminal and changing to its directory. That's all. Almost all. Read on.

Almost every atelier project also contains at least a file

  • One atelier project can contain one or more Django projects.

  • An atelier project usually corresponds to a public code repository (using Git or Mercurial). But you can have unpublished projects which have no repo at all.

  • An atelier project usually corresponds to a given Python package to be published on PyPI.

  • An atelier project can have a number of Sphinx document trees (default is one tree named docs).

You will have different project base directories containing projects. You might not want to have all your projects under a single top-level directory. We suggest the following naming conventions.


~/projects/ is the base directory for every new project of which you are the author. You created this directory in Playing with your first Lino site, and hello is your first local project.


The Lino Book comes with a set of Django demo projects maintained by the Lino team. For example, min1 is one of the Django projects included in the book project.

Some more shell aliases

The .lino_bash_aliases file (created by getlino and which you should source from your ~/.bash_aliases or ~/.bashrc file) contains some useful aliases and functions. One of them is pywhich:

function pywhich() {
  python -c "import $1; print($1.__file__)"

Shortcut to quickly show where the source code of a Python module is coming from.

This is useful e.g. when you are having troubles with your virtual environments.

Configuring atelier

To get a full Lino contributor environment, you must tell atelier the list of your projects. That's done in your ~/.atelier/ file. You must create this file yourself, manually:

$ mkdir ~/.atelier
$ nano ~/.atelier/

Add the following content:

from pathlib import Path
for root in ["~/projects", "~/repositories"]:
    for p in Path(root).expanduser().iterdir():
        if p.is_dir():

Letting atelier know where your projects are has the following advantages:

  • You can run the per_project script (or its alias pp) to run a given command over many projects.

  • You can use atelier.sphinxconf.interproject to create intersphinx links from one project's docs to the docs of another project.

Usage examples

You can now play around in your "environment".

See a list of your atelier projects:

$ pp -l
========= ========= ========================================== ========================
 Project   Status    URL                                        doctrees
--------- --------- ------------------------------------------ ------------------------
 lino      master!              docs
 xl        master              docs
 noi       master              docs
 cosi      master             docs
 avanti    master          docs
 vilma     master            docs
 care      master             docs
 tera      master             docs
 book      master!              docs
 voga      master             docs
 welfare   master          docs, docs_de, docs_fr
 amici     master            docs
========= ========= ========================================== ========================

Change to ~/repositories/lino and download the latest version of Lino:

$ go lino
$ git pull

Do the same for all your cloned repositories:

$ pp git pull

Run the full test suite in The Lino Book:

$ go book
$ inv prep test

Build a local copy of the html documentation The Lino Book:

$ go book
$ inv bd

Afterwards you can start your browser on the generated output:

$ firefox docs/.build/index.html

Building the docs might not work out of the box, it is a topic of its own. See Building the Lino Book.

It happens that I type the following before leaving my computer for getting a cup of coffee:

$ pp inv prep test bd

This runs in every



In case you also use the Go programming language on your computer, you should obviously pick another name than "go".

Have LibreOffice server running on your machine

Some of the demo examples use lino_xl.lib.appypod for producing printable pdf files. To have this running, you should install the LibreOffice server on your system as described in Running a LibreOffice server.

Quickly installing the Lino SDK into a new virtualenv

Not much tested. Read and follow at your own risk.

Here is how to quickly install the Lino SDK into a new virtualenv:

$ cd ~/repositories
$ sh book/docs/dev/

Automated way for cloning and installing the code repositories:

$ cd ~/repositories
$ wget
$ sh

How to switch to the development version of Atelier

Not much tested. Read and follow at your own risk.

The atelier package had been automatically installed together with lino. That is, you are using the PyPI version of Atelier. That's usually okay because Atelier is more or less stable. But one day we might decide that you should rather switch to the development version.

Doing this is easy:

  1. uninstall the PyPI version and then install the development version:

    $ pip uninstall atelier
    $ cd ~/repositories
    $ git clone
    $ pip install -e atelier
  2. Open your ~/.atelier/ file and insert atelier to the list of projects:

    names = 'atelier lino xl book noi voga presto welfare avanti extjs6'

Where to store repositories


A repositories directory is a collection of code repositories of projects for which we cloned a copy.

In a developer environment, this is ~/lino/env/repositories (created by getlino in Installing a Lino developer environment).