【问题标题】:Ansible update still shows old versionAnsible 更新仍然显示旧版本
【发布时间】:2017-06-29 14:23:31
【问题描述】:

我在 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 update 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。

【问题讨论】:

  • 安装命令的输出是什么?
  • pip list | grep ansible 输出是什么?

标签: python pip ansible


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我确实看到 /usr/bin/ansible 存在,但是当我运行 /usr/bin/ansible --version 时,我得到了一个堆栈跟踪。我不得不使用 apt-get,因为 pip 无法升级到最新版本
  • 我猜那是因为你在 python 中有 2 个版本的 ansible 库。但是提供堆栈跟踪将是一个很好的帮助!
  • 更新了我的答案
  • 工作就像一个魅力。非常感谢:-)
【解决方案2】:

在我的情况下,pip list | grep &lt;package name&gt; 显示了新版本,但 \usr\bin 中的全局包(可能是通过 rpm 安装的)仍然是旧版本。通常你可以通过&lt;package name&gt; --version查看全局包版本。

要修复它,我必须使用 sudo 升级:sudo pip install -U &lt;package name&gt;

或者如果在virtualenv 中,不使用 sudo 安装,但使用 -I 忽略全局包:

pip install -I &lt;package name&gt;

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 2018-10-10
    • 2013-12-08
    • 2020-10-23
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多