2014-10-16 9 views
37

उत्तरदायी का उपयोग करके एक विशिष्ट पायथन संस्करण के लिए वर्चुअलएन्व कैसे बनाते हैं। क्या उत्तरदायी मानक पुस्तकालय में कोई आदेश है?उत्तरदायी वर्चुअलएव

- virtualenv: dest=venv python_version:/usr/bin/python3 

उत्तर

14

आप pip मॉड्यूल और एक विशिष्ट virtualenv बाइनरी के साथ यह कर सकते हैं:

मैं की तरह कुछ चाहते हैं

- pip: virtualenv=/path/to/venv virtualenv_command=/path/to/virtualenv3 ... 
+2

ऐसा करने के लिए नाम या आवश्यकताएं मांगी जा रही हैं। क्या मुझे इनमें से किसी भी विकल्प को सेट करने की ज़रूरत है? या क्या खाली वर्चुअलएव – user204088

+4

@ user204088 बनाने का कोई तरीका है और आपको खाली वर्चुअलव की आवश्यकता क्यों होगी? उत्तरदायी पाइप मॉड्यूल अच्छी तरह से आपके लिए एक बनाता है यदि यह अस्तित्व में नहीं है, या इसका उपयोग करते हैं तो इसका उपयोग करें ... – Stefano

+1

आपने शायद इसे पहले ही पता लगाया है लेकिन यह नाम/आवश्यकताएं मांग रहा है क्योंकि पाइप को यह जानने की आवश्यकता है कि क्या इंस्टॉल करना है। वर्चुअल वातावरण बनाने के लिए इसे ऊपर निर्दिष्ट के रूप में उपयोग नहीं किया जा सकता है। इसके बजाए, यह आपके द्वारा निर्दिष्ट पैकेज (ओं) को स्थापित करने के दौरान वर्चुअल वातावरण बनाता है। – William

43

मैं कई बार किया है virtualenv_command निर्दिष्ट करने के साथ कुछ अनियमित व्यवहार का अनुभव (उदाहरण: मेरे वर्चुअलएन्व में एक पायथन 2.7 निष्पादन योग्य हो रहा है, भले ही मैंने virtualenv-3.4 के साथ कमांड चलाने के लिए निर्दिष्ट किया हो।

आपको लगता है कि समस्या का अनुभव है, तो आप virtualenv मैन्युअल command मॉड्यूल के साथ बना सकते हैं:

- name: Manually create the initial virtualenv 
    command: virtualenv /user/home/venvs/myenv -p python3.4 creates="/user/home/venvs/myenv" 

(ध्यान दें: creates निर्दिष्ट करने के द्वारा इस आदेश का केवल मामले में चलेगा कि एक virtualenv /user/home/venvs/myenv पर मौजूद नहीं है)।

तो फिर तुम pip कमांड के साथ सामान्य रूप में अपनी आवश्यकताओं को स्थापित कर सकते हैं:

- name: Install requirements 
    pip: 
    requirements=/my_app/requirements.txt 
    virtualenv=/user/home/venvs/myenv 

अद्यतन

मैंने पाया कि virtualenv_python (Ansible में 2.0+ उपलब्ध है) को निर्दिष्ट भी काम करने के लिए लगता है उपरोक्त मामले में। उदाहरण के लिए:

- name: Install requirements 
    pip: 
    requirements: /my_app/requirements.txt 
    virtualenv: /user/home/venvs/myenv 
    virtualenv_python: python3.4 

+1

आखिरी बार मेरे लिए काम किया (इस तरह उत्तरदायी 2 के दस्तावेज़ों में इस तरह का उल्लेख किया गया है)। सिर्फ एक चीज: मुझे 'कलिथिया' स्थापित करते समय 'chdir' निर्दिष्ट करने की आवश्यकता थी, अन्यथा वर्तमान निर्देशिका (जिसे 'requirements.txt' के अंदर संदर्भित किया गया है) गलत है। 'Chdir =/my_app' होने पर – FibreFoX

+3

हो सकता है यदि पिछले दो' पाइप 'कार्य वर्चुअलएव के अंदर पाइथन 3.x की आवश्यकता नहीं है और आपका उत्तर Python 2.x का उपयोग कर रहा है। चूंकि Ansthible Python2 का उपयोग कर रहा है, यह एक 'pip2 install' कमांड उत्पन्न करता है जो वर्चुअलएन्व को बाईपास करता है और इसके बजाए किसी भी सिस्टम-स्तरीय पाइप इंस्टॉलेशन का उपयोग करेगा - इसलिए संकुल सिस्टम स्तर पर वर्चुअलएन्व में नहीं हैं।पाइथन 3 के साथ इस सेटअप के लिए, मुझे वर्चुअलनव और पीआईपी स्थापना बनाने के लिए खोल कमांड का उपयोग करना पड़ा। – RichVel

+0

काम क्या था 'खोल: स्रोत "{{app_home}}/वर्चुअलनव्स/myenv/bin/सक्रिय करें" && pip3 install -r "{{app_home}}/test/requirements.txt" '। – RichVel

5
ansible 2.0 के साथ

आप virtualenv_python

उदाहरण के लिए के साथ अपने virtualenv के लिए एक अजगर संस्करण निर्दिष्ट कर सकते हैं (इस के साथ आप मैन्युअल रूप से virtualenv पहले बनाने की आवश्यकता नहीं होना चाहिए):

- name: Initiate virtualenv 
    pip: virtualenv="{{ virtualenv_dir }}" 
     virtualenv_python=python3.4 
     requirements={{ app_dir }}/requirements.txt 
+1

यह उत्तरदायी 1 में पहले से ही संभव था। * 'Virtualenv_command' उदाहरण का उपयोग कर। 'virtualenv_command:" python3.4/path/to/virtualenv "' – Stefano