当我从我的剧本中尝试以下内容时,我收到错误
- 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它仍然失败。
这令人难以置信
答案 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