【发布时间】:2015-05-19 13:11:26
【问题描述】:
我正在关注 django manage.py 模块 http://docs.ansible.com/django_manage_module.html
例如我的一项任务看起来像 -
- name: Django migrate
django_manage: command=migrate
app_path={{app_path}}
settings={{django_settings}}
tags:
- django
这在 python2 (默认在 ubuntu 中)工作得很好,但是当我尝试使用 python3-django 项目时它会抛出错误
failed: [123.456.200.000] => (item=school) => {"cmd": "python manage.py makemigrations --noinput school --settings=myproj.settings.production", "failed": true, "item": "school", "path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games", "state": "absent", "syspath": ["/home/ubuntu/.ansible/tmp/ansible-tmp-1432039779.41-30449122707918", "/usr/lib/python2.7", "/usr/lib/python2.7/plat-x86_64-linux-gnu", "/usr/lib/python2.7/lib-tk", "/usr/lib/python2.7/lib-old", "/usr/lib/python2.7/lib-dynload", "/usr/local/lib/python2.7/dist-packages", "/usr/lib/python2.7/dist-packages"]}
msg:
:stderr: Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
从这个错误看来 Ansible 默认使用 Python2。我们可以将其更改为 python3 或任何其他解决方法吗?
PS:pip freeze 确保已安装 django 1.8(对于使用 pip3 的 python3)
建议:
当我运行ubuntu@ubuntu:/srv/myproj$ python3 manage.py migrate 时,它工作正常。所以我正在考虑直接传递命令
像
- name: Django migrate
command: python3 manage.py migrate
tags:
- django
但是我如何传递项目路径或manage.py文件的路径,只有一个选项可以传递设置,比如--settings=myproject.settings.main。
我们可以通过直接命令吗?
【问题讨论】:
-
如果您使用的是虚拟环境,那么使用
virtualenv参数有望在虚拟环境中使用 Python 3 解释器。 -
@Alasdair:不!我没有使用 virtualenv。一切都是系统范围的。
sudo pip3 install <pkg_name> -
是的,当我在您的问题中看到
pip3时,我已经猜到了,但还是决定留下评论,因为它可能对其他人有所帮助。希望你能找到解决办法。 -
在本地机器上我使用 virtualenv。
virtaulenv -p python3 venv但在远程服务器上我会使用sudo apt-get install python3-pip并直接使用pip3 install xyz,因为我不需要在那台机器上使用 virtualenv。 -
对于命令有
chdir键,您可以在运行命令之前使用 cd 在目录中
标签: django ansible ansible-playbook