使用Ansible安装pip requirements.txt时出错,但在服务器上手动执行时却不会出错

时间:2014-08-29 17:16:44

标签: ansible

当我从我的剧本中尝试以下内容时,我收到错误

- name: Install project requirements
  remote_user: john
  pip:
    name=django-authtools
    virtualenv="/home/john/ve"

但是,如果我继续使用服务器并获取env,然后运行pip install django-authtools,那就可以了。

其他套餐有效,只有这个套餐失败了。我已经检查过其他软件包是否安装在Ansible的virtualenv中,所以它不是试图在其他地方安装它的情况。

错误:

  File "/home/john/ve/build/django-authtools/setup.py", line 26, in <module>

    long_description='\n\n'.join([read('README.rst'), read('CHANGES.rst')]),

  File "/home/john/ve/build/django-authtools/setup.py", line 12, in read

    return open(os.path.join(os.path.dirname(__file__), fname)).read()

  File "/home/john/ve/lib/python3.4/encodings/ascii.py", line 26, in decode

    return codecs.ascii_decode(input, self.errors)[0]

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 550: ordinal not in range(128)

我正在使用Python 3。

更新 我也尝试过:

- name: Install project requirements
  remote_user: john
  pip:
    name=django-authtools
    virtualenv="/home/john/ve"
    executable="pip3.4"

更新#2

我已尝试/home/john/ve/bin/pip install -r /home/john/project/requirements.txt因为它在服务器上运行但通过Ansible它仍然失败。 这令人难以置信

2 个答案:

答案 0 :(得分:1)

最终发现了问题:locale

Ansible将语言环境设置为C,在我的情况下django-authtools失败。

快速解决这个问题:

创建以下变量:

host_locale: en_GB.UTF-8

host_locale_dict: {
  LANG: "{{ host_locale }}",
  LC_COLLATE: "{{ host_locale }}",
  LC_CTYPE: "{{ host_locale }}",
  LC_MESSAGES: "{{ host_locale }}",
  LC_MONETARY: "{{ host_locale }}",
  LC_NUMERIC: "{{ host_locale }}",
  LC_TIME: "{{ host_locale }}",
  LC_ALL: "{{ host_locale }}",
}

并在您的任务中设置environment

environment: host_locale_dict

答案 1 :(得分:0)

我最终在[defaults]部分的ansible.cfg文件中设置了它。

module_lang    = en_US.UTF-8

另一件值得注意的事情是,我对目录结构的问题较少,如:

DistributedReporting/
└── venv
    └── src

相反:

DistributedReporting/
├── src
└── venv