<!--
Change how pip version is set for virtual environments to support a user set value (ie pip==9.0.3)
-->
This test currently fails because of https://github.com/voxpupuli/puppet-python/issues/586
<!--
Thank you for contributing to this project!
-->
<!--
Replace this comment with a description of your pull request.
-->
<!--
Replace this comment with the list of issues or n/a.
Use format:
Fixes #123
Fixes #124
-->
Simplify packages version detection
Fixes #617
Change regex in python_version
and python_release
facts so it matches python release candidate version (e.g. Python 2.7.16rc1, Python 3.7.3rc1).
modulesync 5.4.0
<!--
Thank you for contributing to this project!
-->
This PR provides an optional Parameter for the virtualenv creation. This allows e.g. in airgapped environments to specify a private pip index as source for the pip and setuptools packages
This limit the quantity of spaghetti code we add when adding support for
another platform.
No functional change.
<!--
Thank you for contributing to this project!
-->
<!--
use ensure_packages to install python
-->
<!--
error due to duplicated import of python if used combined with other plugins
-->
<!--
Thank you for contributing to this project!
-->
<!--
Pypa has updated its url of get-pip.py recently, so we need to update the url accordingly
-->
<!--
Replace this comment with the list of issues or n/a.
Use format:
Fixes #123
Fixes #124
-->
<!--
Thank you for contributing to this project!
-->
<!--
Replace this comment with a description of your pull request.
-->
For Ubuntu 18.04 and Debian 10, ensure distutils is installed.
When testing pyvenv I ran into this problem when using Python 3 and noticed if you install python3-venv
instead of python3.7-venv
it pulls in python3-distutils
but rather than changing the behavior of how to install python*-venv
just pulling in the dependency works.
Failure with/without system packages
```
root@debian10:/# python3.7 -m venv --clear --system-site-packages /opt/globus-cli
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt-get install python3-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
Failing command: ['/opt/globus-cli/bin/python3.7', '-Im', 'ensurepip', '--upgrade', '--default-pip']
root@debian10:/# python3.7 -m venv --clear /opt/globus-cli
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.
apt-get install python3-venv
You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.
Failing command: ['/opt/globus-cli/bin/python3.7', '-Im', 'ensurepip', '--upgrade', '--default-pip']
```
Solution:
```
root@debian10:/# apt-get install python3.7-distutils
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'python3-distutils' instead of 'python3.7-distutils'
The following packages were automatically installed and are no longer required:
libexpat1-dev libpython-all-dev libpython-dev libpython2-dev libpython2.7 libpython2.7-dev python-all
python2-dev python2.7-dev
Use 'apt autoremove' to remove them.
The following NEW packages will be installed:
python3-distutils
0 upgraded, 1 newly installed, 0 to remove and 14 not upgraded.
Need to get 142 kB of archives.
After this operation, 715 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian buster/main amd64 python3-distutils all 3.7.3-1 [142 kB]
Fetched 142 kB in 0s (333 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package python3-distutils.
(Reading database ... 42675 files and directories currently installed.)
Preparing to unpack .../python3-distutils3.7.3-1all.deb ...
Unpacking python3-distutils (3.7.3-1) ...
Setting up python3-distutils (3.7.3-1) ...
root@debian10:/# python3.7 -m venv --clear --system-site-packages /opt/globus-cli
root@debian10:/#
```
This PR fixes the ensure => present
on the python-venv package on rocky linux. It does, like CentOS, not have a seperate venv package.
Just like we can skip managing the pip and venv packages, allow to opt-out of managing the dev package.
Enforcing a state of these packages sometimes cause trouble if the user of the module does not care about them but they get installed as another package dependency (e.g. syslog-ng-mod-python depends on python-venv, by default python-venv is ensured absent, so on each run Puppet wants to install syslog-ng-mod-python (which install python-venv as a dependency) or remove python-venv (which remove syslog-ng-mod-python as a dependency)). This can be avoided using the corresponding manage_XXX_package
paramater, but manage_dev_package
was missing.
This is part 1/3 of #668
Install python packages from dedicated classes of the module.
This allow to use a single python profile in a control-repo that does not enforce installation / removal of these packages and still allow modules to require them.
```puppet
class foo {
include python
include python::install::dev
# ...
}
class bar {
include python
include python::install::venv
# ...
}
class profile::python {
class { 'python':
dev => 'present',
pip => 'present',
venv => 'present',
managedevpackage => false,
managepippackage => false,
managevenvpackage => false,
}
}
class profile::foo {
include profile::python
class { 'foo':
}
}
class profile::bar {
include profile::python
class { 'bar':
}
}
```
If a node is classified profile::foo
, the python-dev
package will be installed. If a node is classified profile::bar
, the python-venv
package will be installed. Other python-*
packages are not managed.
This is part 2/3 of #668 and does not introduce functional change. However it permits new usages and therefore is labelled enhancement.
Part 3/3 will be backwards-incompatible in order to change the defaults of the python
class to match those in the above example.
Also include:
* #669