2011-02-07 4 views
27

मेरे पास एक पैकेज है जिसे मैंने वर्चुअल वातावरण से स्थापित किया है। अगर मैं सिर्फ पाइथन दुभाषिया लॉन्च करता हूं, तो वह पैकेज ठीक से आयात किया जा सकता है। हालांकि, अगर मैं निष्क्रिय हूं, तो वह पैकेज आयात नहीं किया जा सकता है (क्योंकि यह केवल एक विशेष वर्चुअलएव में उपलब्ध है और वैश्विक नहीं है)। वर्चुअलएन्व से मैं निष्क्रिय कैसे लॉन्च कर सकता हूं, ताकि वर्चुअलनेव के सभी पैकेज उपलब्ध हों?वर्चुअल वातावरण (वर्चुअलएनवी) से पाइथन निष्क्रिय कैसे लॉन्च करें

उत्तर

33

निष्क्रिय

from idlelib.PyShell import main 
if __name__ == '__main__': 
    main() 

तो आप इसे अपने आप को शुरू कर सकते हैं जब तक आप डिफ़ॉल्ट संकुल के बिना virtualenv बनाया अनिवार्य है।

+1

मैं किस स्क्रिप्ट को उन स्क्रिप्ट को चलाऊंगा? धन्यवाद –

+0

@ खनल: वर्चुअलएन्व को सक्रिय करने के बाद, आपके प्रोजेक्ट में मौजूद फ़ोल्डर से, जाहिर है। मैंने अभी कोशिश की, और यह काम करता है। इस स्क्रिप्ट को अपने वर्चुअलनेव के 'बिन' पर रखें। – 9000

+0

मैंने अपने वर्चुअलन के बिन/में एक निष्क्रिय स्क्रिप्ट बनाई और मैंने अपने शेबैंग में वर्चुअलनेव पायथन का उपयोग किया लेकिन यह शिकायत करता है कि टिंकर को खोजने में सक्षम नहीं है। मैंने जांच की और टिंकर को नियमित पायथन 2.7.1 में आयात किया जा सकता है लेकिन मैं अपने वर्चुअलनेव पायथन से टिंकर आयात नहीं कर सकता। मैं अपने वर्चुअलनेव पायथन पर टिंकर को कैसे उपलब्ध कर सकता हूं (मैंने किसी अन्य कारण के लिए साइट-पैकेज का उपयोग नहीं किया) – biomed

2

@biomed मैं विंडोज़ पर हूं और मैं इसे आजमा रहा था। मेरे python2.6 फ़ोल्डर में मुझे python26/tcl/tcl8.5 और पायथन/tcl/tk8.5 फ़ोल्डरों को python26/Lib में कॉपी करना था और फिर मैंने ऊपर वर्चुअलनव के स्क्रिप्ट फ़ोल्डर में स्क्रिप्ट बनाई थी। महान काम किया।

+0

+1, इसके लिए धन्यवाद। – Sabuncu

9

विंडोज, इस some_script.py की तरह कमांड लाइन से चलाने Python स्क्रिप्ट पर जब python some_script.py आदेश (इस पर py फ़ाइलों संघ निर्भर करता है) का उपयोग कर इस्तेमाल किया एक के अलावा अन्य अजगर दुभाषिया द्वारा चलाए जा सकता है। अगर कोई इस समस्या से बचना चाहता है तो सामग्री python -c "from idlelib.PyShell import main; main()" के साथ बैच फ़ाइल बनाना सर्वोत्तम है और इसे वर्चुअलएन्व में Scripts फ़ोल्डर में रखें। साथ ही, जैसे अन्य लोगों को निष्क्रिय होने की आवश्यकता है, tcl और tk फ़ोल्डर्स दोनों काम करने की आवश्यकता है। सरल समाधान में कुछ जवाब एक साथ लाना इस

(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tcl8.5 "c:\Program Files\Python\2.7\tcl\tcl8.5" 
symbolic link created for tcl8.5 <<===>> c:\Program Files\Python\2.7\tcl\tcl8.5 
(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tk8.5 "c:\Program Files\Python\2.7\tcl\tk8.5" 
symbolic link created for tk8.5 <<===>> c:\Program Files\Python\2.7\tcl\tk8.5 
+0

+1, इसके लिए धन्यवाद। बस एक नोट: पथनाम में स्थान की वजह से प्रोग्राम फ़ाइलों के तहत पायथन स्थापित न करें! वर्चुअलएन्व मेरे लिए असफल रहा था, और सी: \ (डिफ़ॉल्ट) के तहत पाइथन को पुनः स्थापित कर रहा था। – Sabuncu

+0

मुझे प्रतीकात्मक फ़ोल्डर लिंक बनाने के बाद भी, मेरे पायथन 2.7 सिस्टम पर काम करने के लिए idle.bat फ़ाइल नहीं मिल सका। मैंने शुरुआत में उन्हें लिब के तहत बनाया, और idle.bat लॉन्च विफल रहा। फिर मैंने वर्चुअल वातावरण के तहत टीसीएल नामक एक फ़ोल्डर बनाया, और वहां प्रतीकात्मक फ़ोल्डर लिंक बनाए, और यह अभी भी एक त्रुटि उत्पन्न हुई: ट्रेसबैक (सबसे हालिया कॉल अंतिम): "... _tkinter.TclError: उपयोग करने योग्य init नहीं मिल सकता निम्नलिखित निर्देशिकाओं में .tcl: {C: \ Users \ AMS \ my_env \ tcl \ tcl8.5} सी: /Python27/lib/tcl8.5 सी: /Users/AMS/my_env/lib/tcl8.5 ... इसका शायद मतलब है कि टीसीएल ठीक तरह से स्थापित नहीं किया गया था। " कोई विचार? – Sabuncu

+0

ठीक है, दो फ़ोल्डरों की प्रतिलिपि बनाते हुए टिम ने नीचे बताया है (प्रतीकात्मक लिंक के बजाय) समस्या को हल किया है, और मैं idle.bat के माध्यम से आईडीईएल लॉन्च कर सकता हूं। – Sabuncu

3

तरह आधार अजगर स्थापना करने के लिए virtualenv से सांकेतिक लिंक बनाने के लिए है और यहाँ कैसे मैं एक पूरी तरह कार्यात्मक बैच फ़ाइल के साथ खिड़की पर ऐसा है।

अपने वर्चुअलएन्ग की स्क्रिप्ट निर्देशिका में idle.bat बनाएं। यह टीसीएल और टीके (संस्करण 8.5 के रूप में संस्करण) दोनों लिंक (जब तक वे मौजूद नहीं होते) बनाते हैं और उन्हें वर्चुअलएन्ग की लिब निर्देशिका में डाल देते हैं, तो यह निष्क्रिय हो जाता है। इस कोड को बिल्कुल एक संपादक में कॉपी और पेस्ट करें। अपने वर्तमान वर्चुअलएन्व और पायथन इंस्टॉलेशन के लिए पथ नाम बदलें (मेरा 2.7 के लिए मानक है) फिर इसे स्क्रिप्ट/idle.bat में सहेजें।

IF EXIST C:\<path to current virtualenv>\Lib\tcl8.5 (
REM do nothing 
) ELSE (
    mklink /d C:\<path to current virtualenv>\Lib\tcl8.5 "c:\Python27\tcl\tcl8.5" 
) 
IF EXIST C:\<path to current virtualenv>\Lib\tk8.5 (
REM do nothing 
) ELSE (
    mklink /d C:\<path to current virtualenv>\Lib\tk8.5 "c:\Python27\tcl\tk8.5" 
) 

python -c "from idlelib.PyShell import main; main()" 

निष्क्रिय करने के लिए पावरहेल (रन एडमिन!) के साथ स्क्रिप्ट चलाएं।

cd c:\<path to current virtualenv>\ 
./Scripts/idle.bat 
+0

धन्यवाद! मैं इस तरह एक स्क्रिप्ट की तलाश में था जैसा मैंने पहले एक अलग मशीन पर किया था। –

0

के लिए मुझे इस बस काम करता है (लिनक्स टर्मिनल) की तरह कुछ की शुरूआत:

source venv/bin/activate && python `which idle` & 

(venv स्पष्ट रूप से अपने venv के लिए पथ है)

21

मैं कमांडलाइन से .\(virtualenv dir)\Scripts\activate.bat स्क्रिप्ट चलाने, तो करें:

python -m idlelib.idle 

this answer से।

+1

धन्यवाद - यह विंडोज़ पर पूरी तरह से काम करता है। – Simon

+1

यह मैक पर भी काम करता है। –

1

मैं उबंटू 15.04 ऑपरेटिंग सिस्टम का उपयोग कर रहा हूं। मैंने वर्चुअलनेव का उपयोग करके कुछ पैकेज स्थापित किए हैं।

तो, उन पैकेज मैं में टर्मिनल

निम्न कमांड का उपयोग सहित अंदर virtualenv फ़ाइलों को चलाने के लिए (मेरे आभासी वातावरण का नाम venv है):

#Activate the virtualenv venv 
source venv/bin/activate 

#To Run IDLE in virtualenv venv 
python -m idlelib 

चलाने के बाद आईडीएल, आप ctrl + o कीबोर्ड शॉर्टकट का उपयोग कर फ़ाइल खोल सकते हैं।

0

पायथन 3.6 modernized and refactoredidlelib। इस परिवर्तन में कई विधियों का नामकरण शामिल था। इस वजह से, idlelib.PyShell अब idlelib.pyshell के साथ उपयोग किया जाना चाहिए। निम्नलिखित स्निपेट स्वीकृत उत्तर पर आधारित है और किसी भी पायथन संस्करण के लिए काम करना चाहिए:

#!/usr/bin/env python 
"""Simple script to run Idle from a venv in PyCharm.""" 

try: 
    # Import for Python pre 3.6 
    from idlelib.PyShell import main 
except ModuleNotFoundError: 
    # Import for Python version 3.6 and later 
    from idlelib.pyshell import main 

if __name__ == '__main__': 
    main()