簡體   English   中英

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

[英]How: django_manage in ansible with Python3

我正在關注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 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

但是如何傳遞項目路徑或manage.py文件的路徑,只有一個選項可以傳遞設置,例如--settings=myproject.settings.main

通過直接命令可以做到嗎?

來自Ansible網站http://docs.ansible.com/intro_installation.html

Python 3與Python 2略有不同,大多數Python程序(包括Ansible)尚未切換。 但是,某些Linux發行版(Gentoo,Arch)默認情況下可能沒有安裝Python 2.X解釋器。 在這些系統上,您應該安裝一個,並在庫存中設置'ansible_python_interpreter'變量(請參閱清單)以指向您的2.X Python。 Red Hat Enterprise Linux,CentOS,Fedora和Ubuntu等發行版都默認安裝了2.X解釋器,這不適用於這些發行版。 幾乎所有的Unix系統都是如此。 如果您需要通過安裝Python 2.X來引導這些遠程系統,使用'raw'模塊將能夠遠程執行。

Ansible正在使用python來運行django命令: https//github.com/ansible/ansible-modules-core/blob/devel/web_infrastructure/django_manage.py#L237

因此,您唯一的解決方案是覆蓋將要運行的可執行文件,例如通過更改PATH:

- file: src=/usr/bin/python3 dest=/home/user/.local/bin/python state=link
- name: Django migrate
  django_manage: command=migrate
                 app_path={{app_path}}
                 settings={{django_settings}}
  environment:
    - PATH: "/home/user/.local/bin/:/bin:/usr/bin:/usr/local/bin"

如果您將Django manage.py文件中的shebang編輯為#!/usr/bin/env python3那么您可以確保始終使用python 3來運行您的Django應用程序。

使用Ansible 2.3.0和Django 1.10.5成功嘗試。 因人而異

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM