Установите ansible на Centos7 с помощью pip3

#pip #ansible #centos7

Вопрос:

Я установил ansible версии 2.9.25 (последняя версия для centos), но не удается загрузить файл с помощью модуля «get_url», и все, что я гуглю, похоже, указывает на использование python2 в отличие от python3. Поэтому я пытаюсь установить ansible через pip3, который, как утверждается в документации, установит ansible с помощью python3, но выдает ошибку Unicode:

 # pip3 install ansible
Collecting ansible
  Using cached ansible-4.6.0.tar.gz (35.6 MB)
Collecting ansible-core<2.12,>=2.11.5
  Using cached ansible-core-2.11.5.tar.gz (6.8 MB)
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 173, in _main
    status = self.run(options, args)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/cli/req_command.py", line 203, in wrapper
    return func(self, options, args)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 316, in run
    reqs, check_supported_wheels=not options.target_dir
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve
    collected.requirements, max_rounds=try_to_avoid_resolution_too_deep
  File "/usr/local/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 472, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/usr/local/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 366, in resolve
    failure_causes = self._attempt_to_pin_criterion(name)
  File "/usr/local/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 212, in _attempt_to_pin_criterion
    criteria = self._get_updated_criteria(candidate)
  File "/usr/local/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 203, in _get_updated_criteria
    self._add_to_criteria(criteria, requirement, parent=candidate)
  File "/usr/local/lib/python3.6/site-packages/pip/_vendor/resolvelib/resolvers.py", line 172, in _add_to_criteria
    if not criterion.candidates:
  File "/usr/local/lib/python3.6/site-packages/pip/_vendor/resolvelib/structs.py", line 151, in __bool__
    return bool(self._sequence)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 140, in __bool__
    return any(self)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 128, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 32, in _iter_built
    candidate = func()
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 209, in _make_candidate_from_link
    version=version,
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 301, in __init__
    version=version,
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 156, in __init__
    self.dist = self._prepare()
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 227, in _prepare
    dist = self._prepare_distribution()
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 306, in _prepare_distribution
    self._ireq, parallel_builds=True
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/operations/prepare.py", line 508, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/operations/prepare.py", line 552, in _prepare_linked_requirement
    self.download_dir, hashes
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/operations/prepare.py", line 249, in unpack_url
    unpack_file(file.path, location, file.content_type)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/utils/unpacking.py", line 256, in unpack_file
    untar_file(filename, location)
  File "/usr/local/lib/python3.6/site-packages/pip/_internal/utils/unpacking.py", line 226, in untar_file
    with open(path, "wb") as destfp:
UnicodeEncodeError: 'ascii' codec can't encode character 'xe9' in position 117: ordinal not in range(128)

 

Команды, которые я запустил, чтобы попытаться исправить:

 pip3 install setuptools_rust
pip3 install --upgrade pip
pip3 install ansible 
sudo yum install gcc libffi-devel python3-dev python-devel openssl-devel
sudo yum install -y git python-devel python-pip gcc gcc-c  

 

Другие решения, которые я пробовал:
https://github.com/paramiko/paramiko/issues/1027#issuecomment-371754576

Текущая настройка:

 # pip --version
pip 21.2.4 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
# pip3 --version
pip 21.2.4 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
# python --version
Python 2.7.5
# python3 --version
Python 3.6.8
 

Пожалуйста, дайте мне знать, если я могу предоставить какую-либо другую информацию!

Комментарии:

1. У меня были похожие ошибки. Консоль/терминал должны использовать язык UTF-8, а не ASCII. Установить LC_CTYPE или LC_ALL в C.UTF-8 или en_US.UTF-8

2. Большое спасибо за комментарий и быстрое время отклика. Я действительно ценю вашу помощь! Ваш ответ решил эту проблему 🙂

3. После установки ansible может использоваться с любым языком. Только для установки требуется UTF-8.

4. Блестящее спасибо, доктор философии! Последние пару дней я ломал голову над этим, так что большое спасибо и надеюсь, что у вас будут отличные выходные!

5. Извините за глупый вопрос, но я не вижу флага, чтобы отметить ваш первый комментарий как правильный ответ?

Ответ №1:

У меня были похожие ошибки. Консоль/терминал должны использовать язык UTF-8, а не ASCII. Установите переменную окружения LC_CTYPE или LC_ALL в C.UTF-8 или en_US.UTF-8 :

 LC_CTYPE=en_US.UTF-8
export LC_CTYPE
 

После установки ansible может использоваться с любым языком. Только для установки требуется UTF-8.