【问题标题】:How to Install ansible in virtualenv?如何在 virtualenv 中安装 ansible?
【发布时间】:2016-08-30 18:34:10
【问题描述】:

我需要在一个 Ubuntu 12.04 上创建一些虚拟环境并在另一个上运行 ansible(我无法安装任何东西(没有互联网连接)。

我尝试在虚拟环境中安装 Ansible:

export venv_name="ansible_virt_env"
mkdir ~/venv && cd ~/venv
echo "Virtualenv ${venv_name} directory" > README
virtualenv --no-site-packages --prompt="ansible" ${venv_name:-venv}
. ~/venv/${venv_name:-venv}/bin/activate
~/venv/${venv_name:-venv}/bin/pip install  -U pip
~/venv/${venv_name:-venv}/bin/pip install  -U setuptools
~/venv/${venv_name:-venv}/bin/pip install ansible

但是失败了:

ansibleroot@[RDE1.3]:~/venv# ~/venv/${venv_name:-venv}/bin/pip install  -U setuptools
Collecting setuptools    

/root/venv/ansible_virt_env/include/site/python2.7/cffi: 在 pkg-config 搜索路径中找不到软件包 libffi。 也许您应该添加包含“libffi.pc”的目录 到 PKG_CONFIG_PATH 环境变量 找不到包“libffi” 在 pkg-config 搜索路径中找不到软件包 libffi。

我安装了libffi-dev: apt-get install libffi-dev

并且 ansible 不起作用: /root/venv/ansible_virt_env/bin/ansible 错误!意外异常:jinja2 完整的追溯是:

Traceback (most recent call last):
  File "/root/venv/ansible_virt_env/bin/ansible", line 75, in <module>
    from ansible.cli.adhoc import AdHocCLI as mycli
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/cli/adhoc.py", line 28, in <module>
    from ansible.executor.task_queue_manager import TaskQueueManager
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/executor/task_queue_manager.py", line 28, in <module>
    from ansible.executor.play_iterator import PlayIterator
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/executor/play_iterator.py", line 29, in <module>
    from ansible.playbook.block import Block
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/playbook/__init__.py", line 25, in <module>
    from ansible.playbook.play import Play
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/playbook/play.py", line 27, in <module>
    from ansible.playbook.base import Base
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/playbook/base.py", line 35, in <module>
    from ansible.parsing.dataloader import DataLoader
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/parsing/dataloader.py", line 32, in <module>
    from ansible.parsing.vault import VaultLib
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/ansible/parsing/vault/__init__.py", line 67, in <module>
    from cryptography.hazmat.primitives.hashes import SHA256 as c_SHA256
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/cryptography/hazmat/primitives/hashes.py", line 15, in <module>
    from cryptography.hazmat.backends.interfaces import HashBackend
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/cryptography/hazmat/backends/__init__.py", line 7, in <module>
    import pkg_resources
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py", line 2707, in <module>
    working_set.require(__requires__)
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py", line 686, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/root/venv/ansible_virt_env/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg/pkg_resources.py", line 584, in resolve
    raise DistributionNotFound(req)
DistributionNotFound: jinja2

但是 jinja2 存在:

ansibleroot@[RDE1.3]:~/venv# /root/venv/ansible_virt_env/bin/python
Python 2.7.3 (default, Dec 18 2014, 19:10:20)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import jinja2
>>>
ansibleroot@[RDE1.3]:~/venv# /root/venv/ansible_virt_env/bin/pip list
ansible (2.0.2.0)
cffi (1.6.0)
cryptography (1.3.2)
distribute (0.6.24)
enum34 (1.1.4)
idna (2.1)
ipaddress (1.0.16)
Jinja2 (2.8)
MarkupSafe (0.23)
paramiko (2.0.0)
pip (8.1.1)
pyasn1 (0.1.9)
pycparser (2.14)
pycrypto (2.6.1)
PyYAML (3.11)
setuptools (21.0.0)
six (1.10.0)

【问题讨论】:

  • 系统缺少libffi或其头文件。如果无法安装所需的库,我不知道如何处理。
  • 谢谢,我解决了这个问题,但还是失败了
  • 也许您的 virtualenv 已损坏。尝试在全新的 virtualenv 中安装所有内容(首先升级 pip 本身)。
  • 直到 ansible 2.0.0 它工作。失败后我创建了问题github.com/ansible/ansible/issues/15733

标签: python virtualenv ansible


【解决方案1】:

你好,你需要安装这个版本: pip install paramiko==1.10 pip install Jinja2==2.2

【讨论】:

    【解决方案2】:

    对于它的价值,我在 ansible 2.1.0.0(通过 pip 安装)、Jinja 2.8、paramiko 2.0.1 上遇到了同样的问题。 将 ansible 更新到 2.2.1.0 解决了这个问题(导致 Jinja2 也更新到 2.8.1)。

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 2011-04-20
      • 2020-06-18
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多