From a5d38f30094b15e761e418124310730740db1501 2018-08-12 11:49:02 From: Branko Majic Date: 2018-08-12 11:49:02 Subject: [PATCH] MAR-132: Workarounds for wsgi_website Python virtual environment in Debian Stretch: - Manually install setuptools in Python virtual environment on Debian Stretch, otherwise the pkg-resources==0.0.0 package will mess with pip freeze etc. - Add back installation of futures package, even on Python 3 (since it does not cause any harm). - A small cleanup of how requirements are treated will be done in separate ticket. --- diff --git a/roles/wsgi_website/defaults/main.yml b/roles/wsgi_website/defaults/main.yml index 27fe4ec967bcfcb691e3ab8abf945de37ed9ecb5..dbaf3ccef43a5ab4ae74261e8fa70fef5abb3866 100644 --- a/roles/wsgi_website/defaults/main.yml +++ b/roles/wsgi_website/defaults/main.yml @@ -23,3 +23,4 @@ admin: "admin-{{ fqdn | replace('.', '_') }}" user: "web-{{ fqdn | replace('.', '_') }}" home: "/var/www/{{ fqdn }}" python_interpreter: "/usr/bin/python{{ python_version }}" +no_setuptools: "{% if ansible_distribution_release == 'jessie' %}{% elif ansible_distribution_release == 'stretch' %}--no-setuptools{% endif %}" diff --git a/roles/wsgi_website/tasks/main.yml b/roles/wsgi_website/tasks/main.yml index b2ce178b4e8dc385d2fd8bd791304810aa2048cd..cbcde9753a182697cba81d214e45057c7f598035 100644 --- a/roles/wsgi_website/tasks/main.yml +++ b/roles/wsgi_website/tasks/main.yml @@ -114,8 +114,10 @@ group: "{{ user }}" mode: 02750 +# setuptools is excluded on Stretch, because it would pull-in the +# pkg-resources package that then messes with pip freeze etc. - name: Create Python virtual environment - command: '/usr/bin/virtualenv --python "{{ python_interpreter }}" --prompt "({{ fqdn }})" "{{ home }}/virtualenv"' + command: '/usr/bin/virtualenv {{ no_setuptools }} --python "{{ python_interpreter }}" --prompt "({{ fqdn }})" "{{ home }}/virtualenv"' args: creates: "{{ home }}/virtualenv/bin/{{ python_interpreter | basename }}" become: true @@ -126,10 +128,11 @@ # created (thanks to 'creates' parameter). - skip_ansible_lint -- name: Install latest pip in virtual environment +- name: Install latest pip and setuptools in virtual environment pip: name: - "pip>=18.0.0,<19.0.0" + - "setuptools>=40.0.0,<41.0.0" virtualenv: "{{ home }}/virtualenv" become: true become_user: "{{ admin }}" @@ -174,6 +177,20 @@ with_items: - package: gunicorn version: "{{ gunicorn_version }}" + when: "not wsgi_requirements" + register: install_wsgi_server + notify: + - Restart WSGI services + +- name: Install futures Python 2 backport (for WSGI server) + become: true + become_user: "{{ admin }}" + pip: + name: "{{ item.package }}" + version: "{{ item.version }}" + state: present + virtualenv: "{{ home }}/virtualenv" + with_items: - package: futures version: "{{ futures_version }}" when: "not wsgi_requirements"