पायथन virtualenv को कैसे छोड़ें / बाहर निकलें / निष्क्रिय करें


1603

मैं virtualenv और virtualenvwrapper का उपयोग कर रहा हूं। मैं virtualenv के बीच workonकमांड का उपयोग कर के ठीक ठीक के बीच स्विच कर सकता हूं ।

me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$ 

मैं सभी वर्चुअल मशीनों से कैसे बाहर निकलूं और अपनी असली मशीन पर फिर से काम करूं? अभी, मुझे वापस आने का एकमात्र तरीका me@mymachine:~$शेल से बाहर निकलना और एक नई शुरुआत करना है। यह कष्टप्रद है। क्या "कुछ भी नहीं" पर काम करने की आज्ञा है, और यदि हां, तो यह क्या है? यदि ऐसी कोई आज्ञा नहीं है, तो मैं इसे कैसे बनाऊंगा?


5
वर्कऑन "नथिंग" के लिए एक कमांड है - यह आपके सभी उपलब्ध वर्चुअल वातावरण को प्रदर्शित करता है, जो कि बहुत कम है। बस बिना किसी तर्क और हिट दर्ज के साथ "वर्कऑन" टाइप करें। नीचे छोड़ने का आदेश "निष्क्रिय" है, जैसा कि नीचे उत्तर दिया गया है।
दनिद

जवाबों:


2589

आमतौर पर, एक virtualenv को सक्रिय करने से आपको शेल नाम दिया जाता है:

$ deactivate

जो चीजों को वापस सामान्य में डाल देता है।

मैंने अभी-अभी कोड के लिए विशेष रूप से फिर से देखा है virtualenvwrapper, और, हाँ, यह deactivateसभी virtualenvs से बचने के तरीके के रूप में भी समर्थन करता है ।

यदि आप एक एनाकोंडा वातावरण छोड़ने की कोशिश कर रहे हैं , तो कमांड आपके संस्करण पर निर्भर करता है conda। हाल के संस्करण (जैसे 4.6) condaआपके शेल में सीधे एक फ़ंक्शन स्थापित करते हैं, जिस स्थिति में आप चलते हैं:

conda deactivate

पुराने conda संस्करण इसके बजाय स्टैंड-अलोन स्क्रिप्ट का उपयोग कर निष्क्रियकरण लागू करते हैं:

source deactivate

126
"निष्क्रिय" आदेश एक बाइनरी नहीं है, न ही एक स्क्रिप्ट जो आप "स्रोत"; यह एक शैल उपनाम है जिसे "सक्रिय" स्क्रिप्ट द्वारा आपके वर्तमान शेल में गतिशील रूप से परिभाषित किया गया है।
ब्रैंडन रोड्स

6
इस बीच (लगभग चार साल बाद) यह दस्तावेज में जोड़ा गया प्रतीत होता है ।
gertvdijk

6
बहुत अधिक सहज होगा यदि इसे "वर्कऑफ़" या "अनवर्क" कहा जाता है। या अगर "वर्कऑन" को "सक्रिय" कहा जाता था। उर्फ के लिए शुक्रिया।
कुकुरिन

4
@kkurian - आपको सुझाव देना चाहिए कि इस मुद्दे पर ट्रैकर virtualenvwrapperऔर शायद डग हेलमैन इस पर विचार करेंगे! ध्यान दें, जो उन लोगों के बाद में इन टिप्पणियों पढ़ सकता है के लिए, कि workonहै नहीं एक देशी virtualenvकमान (जो क्या मूल प्रश्न के बारे में है), लेकिन एक virtualenvwrapperआदेश!
ब्रैंडन रोड्स

17
"वर्कऑन" के अंदर वास्तविक virtualenv कमांड को क्या कहा जाता है? ... (बिगाड़ने की चेतावनी) ... ... (बिगाड़ने की चेतावनी) ... ... (बिगाड़ने की चेतावनी) ... ... (बिगाड़ने की चेतावनी) ... सक्रिय करें!
FutureNerd

53

मैं एक परिभाषित उर्फ , workoff , के विपरीत के रूप में workon :

alias workoff='deactivate'

यह याद रखना आसान है:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$

1
किस फाइल में? .bashrc?
जब्त किया

@ शुरू किया हाँ, इस उत्तर को उर्फ ​​के उदाहरण के लिए देखें~/.bashrc
बॉब स्टीन

21
मुझे यह उपनाम पसंद है। मुझे कराटे किड (मोम का वैक्सऑफ़) की याद दिलाता है
C0deH4cker

@ C0deH4cker: मैंने एसओ में हस्ताक्षर किए और इस सवाल पर वापस आया सिर्फ आपकी टिप्पणी: पी
pooley1994

योग्य मैं सोच रहा था (क्लैप-ऑन; क्लैप-ऑफ)। मुझे लगता है कि हम भी शामिल कर सकते हैं (झटका
एडिसन

53

उपयोग:

$ deactivate 

यदि यह काम नहीं करता है, तो प्रयास करें

$ source deactivate

जो कोई भी जानता है कि बैशsource कैसे काम करता है, वह अजीब होगा, लेकिन वर्चुअन के आसपास कुछ रैपर / वर्कफ्लो इसे पूरक / प्रतिरूप के रूप में लागू करते हैं source activate। आपकी माइलेज भिन्न हो सकती है।


7
deactivateएक ऐसा फंक्शन है जो activateफाइल बनाते समय बनता है। आपके सुझाव का कोई source deactivateमतलब नहीं है, क्योंकि कोई फ़ाइल नहीं है जिसका नाम हैdeactivate
एंथन

7
यह चढ़ाव के लायक नहीं है। चयनित प्रतिक्रिया का संपादन देखें: स्रोत निष्क्रिय करना एनाकोंडा वातावरण के लिए है।
डग ब्रैडशॉ

2
यह एसओ उत्तर गुणवत्ता मानकों को पूरा नहीं करने के लिए "योग्य" है । यह एक उत्तर से अधिक टिप्पणी है। लेकिन, पोस्टर की 79 प्रतिष्ठा के कारण, हमें अच्छा होना चाहिए और अच्छी प्रतिक्रिया देना चाहिए।
ब्रूनो ब्रोंस्की

मैं प्रदर्शन किया है @Abdul कैसे आप में संशोधन 2 में अपने जवाब की गुणवत्ता में सुधार कर सकते हैं stackoverflow.com/posts/29586756/revisions
ब्रूनो Bronosky

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

19

पायथन वर्चुअल वातावरण को सक्रिय करने के लिए:

$cd ~/python-venv/
$./bin/activate

निष्क्रिय करने के लिए:

$deactivate

3
OS X10.11.1 पर टर्मिनल में, मुझे लगता है कि उपयोग करना है:$source activate
एरिक मिलियट-मार्टिनेज

मुझे स्रोत की आवश्यकता नहीं थी। मैंने किया था $cd /to/dir/i/want/my/virtualenv/installedतो $virtualenv name_i_want_for_itउसके बाद $. name_i_want_for_it/bin/activatevirtualenv अभी भी मुझे के लिए रवाना एक सा लगता है। सुधारने की जरूरत ...
uchuugaka

3
"स्रोत" "के समान है।" आदेश .. या तो एक फ़ाइल स्रोत के लिए इस्तेमाल किया जा सकता है
कोरी गोल्डबर्ग

11

मैंने पाया कि जब एक Miniconda3 वातावरण के भीतर मुझे दौड़ना था:

conda deactivate

न तो deactivateहै और न ही source deactivateमेरे लिए काम किया।


1
deactivateके लिए था virtualenv, और source deactivateलिनक्स पर पुराने conda के लिए है। conda deactivateconda envs (नहीं virtualenvs) के लिए एक अच्छा पार मंच तरीका है
टोमाज़ Gandor

6

आप virtualenvwrapperजिस तरह से काम करते हैं उसे कम करने के लिए आप इसका उपयोग कर सकते हैं virtualenv

स्थापना virtualenvwrapper:

pip install virtualenvwrapper

यदि आप एक मानक शेल का उपयोग कर रहे हैं, तो अपने को खोलें ~/.bashrcया ~/.zshrcयदि आप ओह माई ज़श का उपयोग करते हैं । इन दो पंक्तियों को जोड़ें:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

मौजूदा virtualenv को सक्रिय करने के लिए, कमांड का उपयोग करें workon:

$ workon myenv
(myenv)$

अपने virtualenv को निष्क्रिय करने के लिए:

(myenv)$ deactivate

यहाँ मेरा ट्यूटोरियल है , स्टेप बाई स्टेप वर्चुअल्स इन वॉट्सएप और वर्चुअनवॉपर कैसे इंस्टॉल करें।


2
मैं अंतर्निहित virtualenv की तुलना में बहुत कम अंतर देखता हूं
Nam G VU

1
@NamGVU workonकमांड को नोटिस करें , यह किसी भी डायरेक्टरी से काम करता है।
.गौरव

1
जैसा कि एक अन्य पोस्ट की टिप्पणी में उल्लेख किया गया है (और स्टैकओवरफ़्लो में इसे इंगित करने का एक व्यावहारिक तरीका नहीं है) आप deactivateइस फ़ंक्शन को परिभाषित करने वाली स्क्रिप्ट को सोर्स किए बिना शेल स्क्रिप्ट में उपयोग नहीं कर सकते हैं (उस स्थिति में आपके पास वह कमांड नहीं होगा .. । त्रुटि)
मरिआनो रुइज

4

चूंकि deactivateसोर्सिंग द्वारा बनाए गए फ़ंक्शन ~/bin/activateको इस तरह के कमांड की तलाश में सामान्य साधनों द्वारा नहीं खोजा जा सकता है ~/bin, आप एक ऐसा फ़ंक्शन बनाना चाहते हैं जो फ़ंक्शन को निष्पादित करता है deactivate

समस्या यह है कि एक स्क्रिप्ट जिसका नाम deactivateएकल कमांड deactivateहै, एक अंतहीन लूप का कारण होगा यदि गलती से वेनव में नहीं किया जाता है। एक आम गलती।

deactivateयदि फ़ंक्शन मौजूद है (यानी सोर्सिंग द्वारा बनाया गया है activate) तो इसे निष्पादित करने से बचा जा सकता है ।

#!/bin/bash

declare -Ff deactivate  && deactivate

3

का उपयोग करें deactivate

(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$ 

ध्यान दें, (my_env)चला गया है।


2

मैं का उपयोग zsh-autoenv जो बंद आधारित है autoenv

zsh-autoenv स्वचालित रूप से स्रोत (ज्ञात / श्वेतसूचीबद्ध) .autoenv.zshफाइलें, आमतौर पर परियोजना रूट निर्देशिका में उपयोग की जाती हैं। यह "एंट्री" और "इवेंट्स" छोड़ता है, वेरिएबल्स की ओवरस्टिंग और स्टैशिंग (ओवरराइटिंग और रिस्टोरिंग) करता है।

यहाँ एक उदाहरण है:

; cd dtree 
Switching to virtual environment: Development tree utiles
;dtree(feature/task24|✓); cat .autoenv.zsh       
# Autoenv.
echo -n "Switching to virtual environment: "
printf "\e[38;5;93m%s\e[0m\n" "Development tree utiles"
workon dtree
# eof
dtree(feature/task24|✓); cat .autoenv_leave.zsh 
deactivate

इसलिए जब मैं dtreeनिर्देशिका को छोड़ता हूं , तो वर्चुअल वातावरण स्वचालित रूप से बाहर निकल जाता है।

"Development tree utiles" सिर्फ एक नाम है ... इल्युमिनाटी को यहां से जोड़ने का कोई छिपा मतलब नहीं है।


1

deactivateवेनव की activateस्क्रिप्ट द्वारा प्रदान की गई सुविधा का उपयोग करने से आपको निष्क्रियकरण फ़ंक्शन पर भरोसा करने की आवश्यकता होती है ताकि सभी पर्यावरण चर को साफ-सुथरे ढंग से रीसेट किया जा सके कि वे पहले कैसे थे - न केवल मूल सक्रियण , बल्कि किसी भी स्विच , कॉन्फ़िगरेशन , या अन्य को ध्यान में रखते हुए। इस बीच आपके द्वारा किया गया कार्य हो सकता है।

यह शायद ठीक है, लेकिन यह आपके पर्यावरण को बाद में संशोधित करने का एक नया, गैर-शून्य जोखिम पेश करता है।

हालाँकि, यह तकनीकी रूप से अपने माता-पिता के पर्यावरण चर को सीधे रूप से बदलने की प्रक्रिया के लिए संभव नहीं है, इसलिए हम एक अलग उप-शेल का उपयोग कर सकते हैं यह सुनिश्चित करने के लिए कि हमारे venvपीछे कोई अवशिष्ट परिवर्तन नहीं है:


सक्रिय के लिए:

$ bash --init-file PythonVenv/bin/activate

  • यह चारों ओर एक नया खोल शुरू करता है venv। आपका मूल bashशेल अनमॉडिफाइड रहता है।

निष्क्रिय करने के लिए:

$ exitया [CTRL]+ है[D]

  • यह संपूर्ण शेल से बाहर venvहै, और सक्रिय स्क्रिप्ट से पर्यावरण में कोई परिवर्तन करने से पहले आपको मूल शेल में वापस छोड़ देता है।

उदाहरण:

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

[user@computer ~]$ bash --init-file PythonVenv/bin/activate

(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV
/home/user/PythonVenv

(PythonVenv) [user@computer ~]$ exit
exit

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

-1

इंस्टॉलर स्क्रिप्ट पर काम करते समय मुझे यही समस्या थी। मैंने इस पर एक नज़र डाला कि बिन / सक्रिय_थिश्मो ने क्या किया और इसे उलट दिया।

उदाहरण:

#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys

# Path to virtualenv
venv_path = os.path.join('/home', 'sixdays', '.virtualenvs', 'test32')

# Save old values
old_os_path = os.environ['PATH']
old_sys_path = list(sys.path)
old_sys_prefix = sys.prefix


def deactivate():
    # Change back by setting values to starting values
    os.environ['PATH'] = old_os_path
    sys.prefix = old_sys_prefix
    sys.path[:0] = old_sys_path


# Activate the virtualenvironment
activate_this = os.path.join(venv_path, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))


# Print list of pip packages for virtualenv for example purpose
import pip
print str(pip.get_installed_distributions())

# Unload pip module
del pip

# Deactivate/switch back to initial interpreter
deactivate()

# Print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())

मैं 100% यकीन नहीं कर रहा हूँ अगर यह इरादा के अनुसार काम करता है। मुझे पूरी तरह से कुछ याद हो सकता है।


2
अगर पर्यावरण पथ, सिस्टम पथ, डिफ़ॉल्ट प्रॉम्प्ट के रीसेट मूल्य को निष्क्रिय करते हैं तो आपका निष्क्रिय कार्य अच्छा तरीका है। मुझे आपकी स्क्रिप्ट पसंद है। पहले से ही +1 दिया गया।
रामकुमार डी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.