【发布时间】: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