f52b385818
We added this sed in I422490ebe9a9c655552685bc2ff342d288335a9c to avoid installing python2 packages on python3-only systems and thus dragging in all of python2. We made a similar change to python-pip in I7d8ba9300039cce90965410a4e16ca9e711904c3; however we realised that the gate (and other consumers) were relying on this element having installed the python2 & 3 packages for consistency -- otherwise jobs would install the python-pip packages and overwrite the pip-from-source and mess everything up. We reverted that in I419dbdf4682394db68974944af1e5c432f3e0565 and added some clearer notes that this element brings in python2 & 3, and if you want something that doesn't do that then this element isn't for you. However, we never fixed up the virtualenv package install -- currently our Xenial images have a global virtualenv installed from source, but the python-virtualenv packages aren't installed. Thus if a job does "apt-get install python-virtualenv" it overwrites the from-source virtualenv with older parts and again messes everything up. Probably most jobs just call "virtualenv" and assume it is there; however in bringing up some rspec test for puppet I have hit this issue as some modules specify dependencies on the virtualenv packages. Thus install the python-virtualenv AND python3-virtualenv packages in this element. Change-Id: Ia84c38dc3c40a6080e144b563e10abca7dac2881 |
||
---|---|---|
.. | ||
install.d/pip-and-virtualenv-source-install | ||
test-elements | ||
element-deps | ||
package-installs.yaml | ||
pkg-map | ||
README.rst | ||
source-repository-pip-and-virtualenv |
================== pip-and-virtualenv ================== This element installs pip and virtualenv in the image. .. note:: This element setups and Python 2 and Python 3 environment. This means it will bring in python2 packages, so isn't appropriate if you want a python3 only environment. Package install =============== If the package installtype is used then these programs are installed from distribution packages. In this case, ``pip`` and ``virtualenv`` will be installed *only* for the python version identified by ``dib-python`` (i.e. the default python for the platform). Distribution packages have worked out name-spacing such that only python2 or python3 owns common scripts like ``/usr/bin/pip`` (on most platforms, ``pip`` refers to python2 pip, and ``pip3`` refers to python3 pip, although some may choose the reverse). To install pip and virtualenv from package:: export DIB_INSTALLTYPE_pip_and_virtualenv=package Source install ============== Source install is the default. If the source installtype is used, ``pip`` and ``virtualenv`` are installed from the latest upstream releases. Source installs from these tools are not name-spaced. It is inconsistent across platforms if the first or last install gets to own common scripts like ``/usr/bin/pip`` and ``virtualenv``. To avoid inconsistency, we firstly install the packaged python 2 **and** 3 versions of ``pip`` and ``virtualenv``. This prevents a later install of these distribution packages conflicting with the source install. We then overwrite ``pip`` and ``virtualenv`` via ``get-pip.py`` and ``pip`` respectively. The system will be left in the following state: * ``/usr/bin/pip`` : python2 pip * ``/usr/bin/pip2`` : python2 pip (same as prior) * ``/usr/bin/pip3`` : python3 pip * ``/usr/bin/virtualenv`` : python2 virtualenv (note python3 ``virtualenv`` script is *not* installed, see below) Source install is supported on limited platforms. See the code, but this includes Ubuntu and RedHat platforms. Using the tools =============== Due to the essentially unsolvable problem of "who owns the script", it is recommended to *not* call ``pip`` or ``virtualenv`` directly. You can directly call them with the ``-m`` argument to the python interpreter you wish to install with. For example, to create a python3 environment do:: # python3 -m virtualenv myenv # myenv/bin/pip install mytool To install a python2 tool from pip:: # python2 -m pip install mytool In this way, you can always know which interpreter is being used (and affected by) the call. Ordering ======== Any element that uses these commands must be designated as 05-* or higher to ensure that they are first installed.