Django - Tutorial 044. How to Install and Configure Django on Mac OS

Mac, Homebrew, Nginx, MacOS, Python, Apple, Django


I propose to consider the process of installing and configuring a Django project on Mac OS X based on an existing project.

Some steps will be similar to those already performed in the Django setup article for Ubuntu .

Setting up a virtual environment

  1. Intall python 3
    brew install python3
  2. Install pip
    sudo easy_install pip
  3. Install virtualenv to create virtual environments
    sudo pip3 install virtualenv
  4. Setting up a virtual environment for a project
    virtualenv project_env --python=python3
  5. Go to the directory of the virtual environment of the project and clone the repository.
    cd project_env
      git clone
  6. We also clone submodules if your project uses git submodule
    cd project
      git submodule init
      git submodule update
  7. I hope that you are using the requirements.txt file, because the time has come to install all the necessary packages in the project
    pip install -r requirements.txt

Install the required version of Python

If you need a specific version of python, for example, if the repositories of your production server do not have the latest version, you need to configure your Mac OS X specifically to work with the required version.

brew install pyenv
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
brew install zlib
pyenv install 3.6.7

If you cannot install python and the following error occurs

BUILD FAILED (OS X 10.14.4 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274
Results logged to /var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274.log

Last 10 log lines:
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/", line 5, in <module>
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/", line 204, in _main
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/", line 117, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/private/var/folders/qk/l3vyb_653ksb55yt5r54rt380000gn/T/python-build.20190421214232.40274/Python-3.6.7/Lib/ensurepip/", line 27, in _run_pip
    import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1

then create a file .zshrc with the following contents

# For compilers to find zlib you may need to set:
export LDFLAGS="${LDFLAGS} -L/usr/local/opt/zlib/lib"
export CPPFLAGS="${CPPFLAGS} -I/usr/local/opt/zlib/include"

# For pkg-config to find zlib you may need to set:
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH} /usr/local/opt/zlib/lib/pkgconfig"

Next, perform the remaining actions.

source .zshrc
pyenv install 3.6.7

Check available versions of python

pyenv versions

Setup the required version of python

pyenv local 3.6.7
pyenv global 3.6.7

Check the version of python that is now used on your Mac OS X.

python --version

After that, you will need to repeat all the steps from the settings of the virtual environment, starting with step 4, if you have already installed virtualenv. Or completely repeat all those steps.

Install and configure PostgreSQL

  1. Uninstalling a previous version of Postgres
    brew uninstall --force postgresql
  2. Delete all Postgres files
    rm -rf /usr/local/var/postgres
  3. Installing Postgres using Homebrew
    brew install postgres
  4. Installing PostGIS using Homebrew
    brew install postgis
  5. Start PostgreSQL server. You may need to run this command every time you develop a site.
    pg_ctl -D /usr/local/var/postgres start
  6. Creating a project database. Many of these steps were covered in the very first article on setting up Django on a computer running OS
    psql postgres
      CREATE DATABASE myproject;
      CREATE USER myprojectuser WITH PASSWORD 'password';
      ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
      ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
      ALTER ROLE myprojectuser SET timezone TO 'UTC';
      GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

Install and configure Nginx

I use Nginx to distribute static content, so we will also install Nginx on the development machine.

brew install nginx
sudo brew services start nginx

Nginx configuration setup

At this step you need to configure the Nginx server. For what you need to edit the nginx.conf file, as well as create the settings file of your server in the servers directory.

nano /usr/local/etc/nginx/nginx.conf

Delete the contents of the file and add the following information..

worker_processes  1;

events {
    worker_connections  1024;

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    include servers/*;

Next, create a file myproject

touch /usr/local/etc/nginx/servers/myproject

And add content that will look like this.

server {
    listen 80;
    server_name 111.222.333.44; # здесь прописать или IP-адрес или доменное имя сервера

    location /static/ {
        root /Users/<user>/myprojectenv/myproject/myproject/;
        expires 30d;

    location /media/ {
        root /Users/<user>/myprojectenv/myproject/myproject/;
        expires 30d;

    location / {
        proxy_set_header Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Then restart the server Nginx

sudo brew services restart nginx


And then we do not forget to complete the migration of the database, the collection of static files through collectstatic and other procedures required in your project.

For Django, I recommend Timeweb VDS-server .

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
Support the author Donate


Only authorized users can post comments.
Please, Log in or Sign up
How to become an author?

Contribute to the evolution of the EVILEG community.

Learn how to become a site author.

Learn it

Good day, Dear Users!!!

I am Evgenii Legotckoi, developer of EVILEG. And it is my hobby project, which helps to learn programming another programmers and developers

If the site helped you, and you want also support the development of the site, than you can donate by following ways


Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting Timeweb
June 5, 2020, 2:28 a.m.

Qt - Test 001. Signals and slots

  • Result:0points,
  • Rating points-10
June 3, 2020, 1:56 a.m.

C++ - Тест 003. Условия и циклы

  • Result:35points,
  • Rating points-10
June 2, 2020, 9:11 p.m.
Aleksej Pikenin

C++ - Test 005. Structures and Classes

  • Result:75points,
  • Rating points2
Last comments
June 5, 2020, 1:39 a.m.
Evgenij Legotskoj

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

По-моему, смысла в этом нет особого. Если делегат будет игнорировать настройки таблицы, то это приведёт ещё к большему непониманию, что вообще происходит, для программиста, который после вас буд…
June 5, 2020, 1:34 a.m.

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

Сижу, размышляю: можно ли переписать делегата так, чтобы независимо от настроек строк выделялись строки?
June 5, 2020, 1:31 a.m.
Evgenij Legotskoj

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

Понятно. Я не обратил внимания на то, что там было в старом коде по настройкам строк :)
June 5, 2020, 1:27 a.m.

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

Разобрался. У вас изначально в проекте были вот эти настройки: ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableView->setSelectionMode(QAbstractItemVie…
June 4, 2020, 11:10 a.m.

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

Полностью скопировал пример - всё правильно работает. Значит, где-то у меня ошибки в тестовом проекте. Буду разбираться. Извините за беспокойство. :)
Now discuss on the forum
June 5, 2020, 6:13 a.m.

Фильтр для QtableView sql

Добрый день. Для такой фильтрации необходимо использовать QSortFilterProxyModel. В оффдоках есть хороший пример.
June 4, 2020, 2:46 a.m.
Mihail A

Qt- C++ QTableView подсветить строку

June 3, 2020, 1:49 a.m.

Можно ли сделать в QML таблицу как в Excel?

edi-tableview - нашел пока такое выглядит коряво, посмотрим что можно сделать
June 2, 2020, 2:46 a.m.
Evgenij Legotskoj

Медиа файлы Google Firebase

Картинки можете попробовать сжимать через QPixmap, там есть возможность установки scaleFactor, через него можете устанавливать нужные параметры. А что касается конвертации видео, то лучше п…
June 2, 2020, 2:01 a.m.
Evgenij Legotskoj

Перехват обращения к локальным файлам QWebEngineView

В вашем случае вполне адекватное решение. Так сказать меньше зло. В противном случае пришлось бы очень много переписывать и перепиливать.
© EVILEG 2015-2020
Recommend hosting TIMEWEB