python - Ansible 更新仍然显示旧版本

标签 python pip ansible

我在 Debian 8 服务器上将 ansible 从版本 2.0 升级到 2.3.1,并按照 Ansible 提供的说明进行操作:

  1. 添加到来源列表: deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main

  2. 运行以下命令:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 sudo apt-get 更新 sudo apt-get install ansible

我检查了which ansible,显示指向/usr/local/bin。 当我运行 echo $PATH 时,我看到列出了/usr/local/bin。我是否需要运行额外的步骤来获取正确版本的 Ansible?

我没有输出。但是当我运行 apt 时,它成功更新到 ansible 2.3.1

更新:ansible 最初是通过 pip 安装的。当我运行`pip install --upgrade ansible 时,我得到:

  Running setup.py (path:/tmp/pip-build-jyjjV6/cryptography/setup.py) egg_info for package cryptography

    no previously-included directories found matching 'docs/_build'
    warning: no previously-included files matching '*' found under directory 'vectors'
Downloading/unpacking pynacl>=1.0.1 (from paramiko->ansible)
  Downloading PyNaCl-1.1.2.tar.gz (3.1MB): 3.1MB downloaded
  Running setup.py (path:/tmp/pip-build-jyjjV6/pynacl/setup.py) egg_info for package pynacl
    c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
     #include <ffi.h>
                     ^
    compilation terminated.
    Traceback (most recent call last):
      File "<string>", line 17, in <module>
      File "/tmp/pip-build-jyjjV6/pynacl/setup.py", line 232, in <module>
        "Programming Language :: Python :: 3.6",
      File "/usr/lib/python2.7/distutils/core.py", line 111, in setup
        _setup_distribution = dist = klass(attrs)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 268, in __init__
        self.fetch_build_eggs(attrs['setup_requires'])
      File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 312, in fetch_build_eggs
        replace_conflicting=True,
      File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 846, in resolve
        dist = best[req.key] = env.best_match(req, ws, installer)
      File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1091, in best_match
        return self.obtain(req, installer)
      File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1103, in obtain
        return installer(requirement)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 379, in fetch_build_egg
        return cmd.easy_install(req)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 639, in easy_install
        return self.install_item(spec, dist.location, tmpdir, deps)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 669, in install_item
        dists = self.install_eggs(spec, download, tmpdir)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 852, in install_eggs
        return self.build_and_install(setup_script, setup_base)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1080, in build_and_install
        self.run_setup(setup_script, setup_base, args)
      File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1068, in run_setup
        raise DistutilsError("Setup script exited with %s" % (v.args[0],))
    distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    Complete output from command python setup.py egg_info:
    c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory

 #include <ffi.h>

                 ^

compilation terminated.

Traceback (most recent call last):

  File "<string>", line 17, in <module>

  File "/tmp/pip-build-jyjjV6/pynacl/setup.py", line 232, in <module>

    "Programming Language :: Python :: 3.6",

  File "/usr/lib/python2.7/distutils/core.py", line 111, in setup

    _setup_distribution = dist = klass(attrs)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 268, in __init__

    self.fetch_build_eggs(attrs['setup_requires'])

  File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 312, in fetch_build_eggs

    replace_conflicting=True,

  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 846, in resolve

    dist = best[req.key] = env.best_match(req, ws, installer)

  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1091, in best_match

    return self.obtain(req, installer)

  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1103, in obtain

    return installer(requirement)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/dist.py", line 379, in fetch_build_egg

    return cmd.easy_install(req)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 639, in easy_install

    return self.install_item(spec, dist.location, tmpdir, deps)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 669, in install_item

    dists = self.install_eggs(spec, download, tmpdir)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 852, in install_eggs

    return self.build_and_install(setup_script, setup_base)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1080, in build_and_install

    self.run_setup(setup_script, setup_base, args)

  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1068, in run_setup

    raise DistutilsError("Setup script exited with %s" % (v.args[0],))

distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-jyjjV6/pynacl
Storing debug log for failure in /root/.pip/pip.log

当我尝试运行 apt-get install 和运行/usr/bin/ansible --version 时,我得到:

Traceback (most recent call last):
  File "/usr/bin/ansible", line 46, in <module>
    from ansible.module_utils._text import to_text
ImportError: No module named _text

理想情况下,我想通过 pip 升级,但我似乎无法让它运行。不过,我会选择使用 apt-get。

最佳答案

DEB 包在 /usr/bin/ansible 中安装 ansible,我猜你之前的安装不是来自 DEB 包(而是 pip?)并且它解释为什么你有 2 个版本的 ansible。
根据您的 PATH 定义,您不会获得新版本。

您应该清理以前的安装(pip uninstall?)

更新:pip install --upgrade 失败,因为它正在尝试构建一些可依赖的 C 绑定(bind)。

你应该卸载用pip安装的版本,然后重新安装DEB包:

pip uninstall --yes ansible
apt install --yes --reinstall ansible

从系统包和 pip 混合安装从来都不是一个好主意...

关于python - Ansible 更新仍然显示旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44827842/

相关文章:

python - 由于我的脚本中存在 'å' ,因此无法运行脚本

python - pip 错误 -> ImportError : No module named helpers

ansible - 在 ansible Play book 中创建循环 - 错误

python - 通过 SFTP 从远程服务器读取 GZIP 文本文件

python - 命令 python3 只是 py -3 的 OS X 变体吗?

python - 解析 : String to XML

python - 使用 pip 和诗歌与 python 3.10.4 安装 TensorFlow 2.8.0 错误

windows - 在 vista 上运行 pip 从 powershell 内部安装 python 包

Ansible 循环错误

deployment - Ansible 与 Jenkins