0

I'm trying to update our venv of ansible to a newer version on an older RHEL 7 box :), only it seems to fail for some unclear reasons in some python code.

Running python 3.6.8 on RHEL 7.9 (Maipo)

Any hints are most appreciated, TIA!

$ source a2.9.27/bin/activate
$ type which python
which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
python is /opt/pjp_ansible/virtual_env/a2.9.27/bin/python
$ which pip
/opt/pjp_ansible/virtual_env/a2.9.27/bin/pip
$ pip install ansible==2.9.27
Collecting ansible==2.9.27
  Using cached ansible-2.9.27.tar.gz (14.8 MB)
ERROR: Exception:
Traceback (most recent call last):
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/cli/base_command.py", line 164, in exc_logging_wrapper
    status = run_func(*args)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/cli/req_command.py", line 205, in wrapper
    return func(self, options, args)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/commands/install.py", line 339, in run
    reqs, check_supported_wheels=not options.target_dir
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 93, in resolve
    collected.requirements, max_rounds=try_to_avoid_resolution_too_deep
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 482, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 349, in resolve
    self._add_to_criteria(self.state.criteria, r, parent=None)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria
    if not criterion.candidates:
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_vendor/resolvelib/structs.py", line 151, in __bool__
    return bool(self._sequence)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__
    return any(self)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 47, in _iter_built
    candidate = func()
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 206, in _make_candidate_from_link
    version=version,
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 287, in __init__
    version=version,
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 156, in __init__
    self.dist = self._prepare()
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 225, in _prepare
    dist = self._prepare_distribution()
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 292, in _prepare_distribution
    return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/operations/prepare.py", line 482, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/operations/prepare.py", line 528, in _prepare_linked_requirement
    link, req.source_dir, self._download, self.download_dir, hashes
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/operations/prepare.py", line 223, in unpack_url
    unpack_file(file.path, location, file.content_type)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/utils/unpacking.py", line 247, in unpack_file
    untar_file(filename, location)
  File "/opt/pjp_ansible/virtual_env/a2.9.27/lib64/python3.6/site-packages/pip/_internal/utils/unpacking.py", line 218, in untar_file
    with open(path, "wb") as destfp:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 112: ordinal not in range(128)
  • https://stackoverflow.com/search?q=UnicodeEncodeError%3A+%27ascii%27+codec+can%27t+encode+character. Without looking at data and code ([mcve]), that's as far as it gets. – Ulrich Eckhardt Jun 27 '22 at 12:09
  • This is an encoding issue at Python's level. See https://stackoverflow.com/questions/57197059/unicodeencodeerror-ascii-codec-cant-encode-character-xe9-when-printing-in and https://github.com/pypa/pip/issues/10219#issuecomment-887337037 – β.εηοιτ.βε Jun 27 '22 at 12:09
  • Thanks but it seems that ansible +2.9.10 requires python +3.7/8, hence looking into running pyenv to have multiple python version on the same box :) – Steffen Winther Sørensen Jun 30 '22 at 08:56

1 Answers1

0

found this: realpython.com/intro-to-pyenv which enabled me to create a newer python env and apply in multiple virtual env each with their version of ansible compiled from sources.