方法:使用Python3在ansible中使用django_manage

mic*_*al 9 django ansible ansible-playbook

我正在关注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
Run Code Online (Sandbox Code Playgroud)

这对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
Run Code Online (Sandbox Code Playgroud)

从这个错误看起来Ansible bydefault使用Python2.我们可以将其更改为python3或任何其他解决方法吗?

PS:pip冻结确保安装了django 1.8(对于使用pip3的python3)

建议:当我运行ubuntu@ubuntu:/srv/myproj$ python3 manage.py migrate它工作正常.所以我想把命令直接传递给像

 - name: Django migrate
   command: python3 manage.py migrate
   tags:
     - django
Run Code Online (Sandbox Code Playgroud)

但是如何传递项目路径或manage.py文件的路径,只有一个选项来传递设置,如 --settings=myproject.settings.main.

通过直接命令可以做到吗?

dze*_*zej 3

来自 Ansible 网站http://docs.ansible.com/intro_installation.html

\n\n
\n

Python 3 是一种与 Python 2 略有不同的语言,大多数 Python 程序(包括 Ansible)尚未切换。但是,某些 Linux 发行版(Gentoo、Arch)默认情况下可能没有安装 Python 2.X 解释器。在这些系统上,您应该安装一个,并将清单中的 \xe2\x80\x98ansible_python_interpreter\xe2\x80\x99 变量设置为指向您的 2.X Python。Red Hat Enterprise Linux、CentOS、Fedora 和 Ubuntu 等发行版都默认安装了 2.X 解释器,但这不适用于这些发行版。几乎所有 Unix 系统也是如此。如果您需要通过安装 Python 2.X 来引导这些远程系统,则可以使用 \xe2\x80\x98raw\xe2\x80\x99 模块远程执行此操作。

\n
\n