2015-05-19 16 views
9

साथ ansible में django_manage मैं के लिए Django manage.py मॉड्यूल http://docs.ansible.com/django_manage_module.htmlकैसे: python3

के लिए इस अनुसरण कर रहा हूँ जैसे मेरे कार्यों में से एक लगता है कि -

- name: Django migrate 
    django_manage: command=migrate 
       app_path={{app_path}} 
       settings={{django_settings}} 
    tags: 
    - django 

इस को Python2 साथ पूरी तरह से ठीक काम करता है (ubuntu में डिफ़ॉल्ट) लेकिन जब मैं python3-Django परियोजना के साथ की कोशिश यह इस त्रुटि यह Ansible लगता है से त्रुटि

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 

फेंकता Bydefault Python2 का उपयोग करता है। क्या हम इसे पायथन 3 या किसी अन्य कामकाज में बदल सकते हैं?

पुनश्च: पिप फ्रीज सुनिश्चित करना है कि Django 1.8 स्थापित किया है (pip3 का उपयोग कर python3 के लिए)

सुझाव: जब मैं [email protected]:/srv/myproj$ python3 manage.py migrate चलाने यह ठीक काम करता है। तो मैं जैसे

- name: Django migrate 
    command: python3 manage.py migrate 
    tags: 
    - django 

सीधे आदेश पारित करने कुछ के बारे में सोच रहा हूँ, लेकिन मैं कैसे परियोजना पथ या manage.py फ़ाइल के पथ से पारित है, वहाँ केवल एक सेटिंग पारित करने के लिए विकल्प, --settings=myproject.settings.main की तरह कुछ है।

क्या हम प्रत्यक्ष आदेश पास करके कर सकते हैं?

+0

यदि आप वर्चुअल वातावरण का उपयोग कर रहे हैं, तो 'virtualenv' पैरामीटर का उपयोग करके वर्चुअल वातावरण में पाइथन 3 दुभाषिया का उपयोग करने की उम्मीद है। – Alasdair

+0

@ अलास्डेयर: नहीं! मैं virtualenv का उपयोग नहीं कर रहा हूँ। सब कुछ व्यवस्थित है। 'sudo pip3 ' – micheal

+0

हाँ, मैंने अनुमान लगाया था कि जब मैंने आपके प्रश्न में 'pip3' देखा था, लेकिन फिर भी टिप्पणी छोड़ने का फैसला किया क्योंकि यह किसी और की मदद कर सकता है। आशा है कि आप एक समाधान पता लगाएंगे। स्थानीय मशीन पर – Alasdair

उत्तर

3

Ansible वेबसाइट http://docs.ansible.com/intro_installation.html

अजगर 3 से अजगर 2 और (Ansible सहित) सबसे अजगर कार्यक्रमों की तुलना में एक अलग भाषा अभी तक पर स्विच नहीं कर रहे हैं। हालांकि, कुछ लिनक्स वितरण (Gentoo, Arch) में पाइथन 2.X दुभाषिया डिफ़ॉल्ट रूप से स्थापित नहीं हो सकता है। उन प्रणालियों पर, आपको एक स्थापित करना चाहिए, और अपने 2.X पायथन पर इंगित करने के लिए सूची में 'ansible_python_interpreter' चर सेट करें (सूची देखें)। Red Hat Enterprise Linux, CentOS, Fedora, और उबंटू जैसे वितरण में सभी के पास 2.X दुभाषिया डिफ़ॉल्ट रूप से स्थापित होता है और यह उन वितरणों पर लागू नहीं होता है। यह लगभग सभी यूनिक्स सिस्टम के बारे में भी सच है। यदि आपको पाइथन 2.X इंस्टॉल करके इन रिमोट सिस्टम को बूटस्ट्रैप करने की आवश्यकता है, तो 'कच्चे' मॉड्यूल का उपयोग करके इसे दूरस्थ रूप से करने में सक्षम हो जाएगा।

1

Ansible Django आदेश को चलाने के लिए python उपयोग कर रहा है: https://github.com/ansible/ansible-modules-core/blob/devel/web_infrastructure/django_manage.py#L237

आपका एकमात्र समाधान अपने पथ को बदलने के द्वारा निष्पादन योग्य है कि चलाया जाएगा, उदाहरण के लिए ओवरराइड करने के लिए इस प्रकार है:

- 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" 
0

हैं आप Django manage.py फ़ाइल में Shebang को #!/usr/bin/env python3 होने के लिए संपादित करते हैं, तो आप यह सुनिश्चित कर सकते हैं कि आपके Django ऐप को चलाने के लिए हमेशा अजगर 3 का उपयोग किया जाएगा।

उत्तरदायी 2.3.0 और Django 1.10.5 के साथ सफलतापूर्वक प्रयास किया। वाईएमएमवी