কীভাবে ছেড়ে যেতে / প্রস্থান করতে / পাইথন ভ্যুচুয়ালেভকে নিষ্ক্রিয় করা যায়


1603

আমি ভার্চুয়ালেনভ এবং ভার্চুয়ালেনভ্রাপার ব্যবহার করছি। workonকমান্ডটি ব্যবহার করে আমি ভার্চুয়ালেনভের ঠিক সূক্ষ্মের মধ্যে স্যুইচ করতে পারি ।

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

আমি কীভাবে সমস্ত ভার্চুয়াল মেশিন থেকে প্রস্থান করব এবং আমার আসল মেশিনে আবার কাজ করব? এখনই, আমার কাছে ফিরে আসার একমাত্র উপায় me@mymachine:~$হ'ল শেলটি থেকে বেরিয়ে আসা এবং একটি নতুন শুরু করা। এটাই একরকম বিরক্তিকর। "কিছুই না" নিয়ে কাজ করার জন্য কি কোনও আদেশ রয়েছে এবং যদি তা হয় তবে এটি কী? যদি এই জাতীয় আদেশ উপস্থিত না থাকে তবে আমি কীভাবে এটি তৈরি করতে যাব?


5
"কিছুই না" কাজ করার জন্য একটি কমান্ড রয়েছে - এটি আপনার সমস্ত উপলব্ধ ভার্চুয়াল পরিবেশ প্রদর্শন করে, যা নিখরচায়। কোনও যুক্তি ছাড়াই কেবল "ওয়ার্কন" টাইপ করুন এবং এন্টার টিপুন। নীচের উত্তর হিসাবে ছেড়ে যাওয়ার কমান্ডটি "নিষ্ক্রিয় করা হবে"।
ড্যানিড

উত্তর:


2589

সাধারণত, একটি ভার্চুয়ালেনভ সক্রিয়করণ আপনাকে নামের একটি শেল ফাংশন দেয়:

$ deactivate

যা জিনিসগুলিকে স্বাভাবিক অবস্থায় ফিরিয়ে দেয়।

আমি কোডটির জন্য সবেমাত্র বিশেষভাবে আবার দেখেছি virtualenvwrapperএবং হ্যাঁ, এটিও deactivateসমস্ত ভ্যুচুয়ালিভেন থেকে বাঁচার উপায় হিসাবে সমর্থন করে।

আপনি যদি একটি অ্যানাকোন্ডা পরিবেশ ছেড়ে যাওয়ার চেষ্টা করছেন , কমান্ডটি আপনার সংস্করণটির উপর নির্ভর করে conda। সাম্প্রতিক সংস্করণগুলি (৪.6 এর মতো) condaসরাসরি আপনার শেলের মধ্যে একটি ফাংশন ইনস্টল করে , আপনি যে ক্ষেত্রে চালান:

conda deactivate

পরিবর্তে পুরানো কনডা সংস্করণগুলি স্ট্যান্ড-একা স্ক্রিপ্ট ব্যবহার করে নিষ্ক্রিয়করণ প্রয়োগ করে:

source deactivate

126
"নিষ্ক্রিয়" কমান্ডটি বাইনারি নয় বা কোনও স্ক্রিপ্ট নয় যা আপনি "উত্স"; এটি একটি শেল ওরফে যা আপনার বর্তমান শেলটিতে "সক্রিয়করণ" স্ক্রিপ্ট দ্বারা গতিময়ভাবে সংজ্ঞায়িত হয়।
ব্র্যান্ডন রোডস

6
@ অ্যাপ্রচে এর মধ্যে (প্রায় চার বছর পরে) এটি ডকুমেন্টেশনে যুক্ত হয়েছে বলে মনে হয় ।
gertvdijk

6
যদি এটিকে "ওয়ার্কঅফ" বা "অকার্যকর" বলা হত তবে আরও স্বজ্ঞাগত হবে। অথবা যদি "ওয়ার্কন" কে "অ্যাক্টিভেট" বলা হত। উরফের জন্য শুকরিয়া ধন্যবাদ।
ক্কুরিয়ান

4
@ ক্কুরিয়ান - আপনার পরামর্শ দেওয়া উচিত যে ইস্যু ট্র্যাকারটির জন্য virtualenvwrapperএবং সম্ভবত ডগ হেলম্যান এটিকে বিবেচনা করবেন! নোট, যারা পরে এই মন্তব্য পড়তে পারে, যে workonহয় না একটি নেটিভ virtualenvকমান্ড (যা কি মূল প্রশ্ন সম্পর্কে) কিন্তু একটি virtualenvwrapperকমান্ড!
ব্র্যান্ডন রোডস

17
অনুমান করুন যে "ওয়ার্কন" এর প্রকৃত ভার্চুয়ালেনভ কমান্ডটি কী বলা হয়? ... (স্পয়লার সতর্কতা) ... ... (স্পয়লার সতর্কতা) ... ... (স্পয়লার সতর্কতা) ... ... (স্পয়লার সতর্কতা) ... সক্রিয় করুন!
ফিউচারনার্ড

53

আমি একটি উপনাম , ওয়ার্কফাকে ওয়ার্কনের বিপরীত হিসাবে সংজ্ঞায়িত করেছি :

alias workoff='deactivate'

এটি মনে রাখা সহজ:

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

1
কোন ফাইল? .bashrc?
সজ্জিত

@ হ্যাঁ হ্যাঁ, উবাবের উদাহরণের জন্য এই উত্তরটি দেখুন~/.bashrc
বব স্টেইন

20
আমি এই উপন্যাসটি পছন্দ করি কারাতে কিডের (ওয়াক্সন; ওয়াক্সফ) স্মরণ করিয়ে দেয়
C0deH4cker

@ C0deH4cker: আমি এসও-তে সাইন ইন করেছি এবং এই প্রশ্নে ফিরে এসেছি আপনার মন্তব্যটি +1 করতে: পি
পুলি 1994

lol আমি ভাবছিলাম (করতালির শব্দ; তালি বন্ধ) আমি অনুমান করি যে আমরা এগুলিও অন্তর্ভুক্ত করতে পারি (ঝাঁকুনি
এডিসন

52

ব্যবহার করুন:

$ deactivate 

যদি এটি কাজ না করে, চেষ্টা করুন

$ source deactivate

যে কেউ জানেন যে বাশsource কীভাবে কাজ করে তা এটিকে বিজোড় মনে করবে, তবে ভার্চুয়ালেনভের চারপাশে কিছু মোড়ক / ওয়ার্কফ্লো এটিকে পরিপূরক / অংশ হিসাবে কার্যকর করে source activate। আপনার মাইলেজ পরিবর্তিত হতে পারে.


7
deactivateএমন একটি ফাংশন যা আপনি যখন activateফাইলটি উত্স করেন তখন তৈরি হয় । source deactivateনামকরণের কোনও ফাইল নেই বলে আপনার করার পরামর্শটি মোটেই বোঝা যায় নাdeactivate
অ্যান্থন

7
এটি ডাউনভোটদের প্রাপ্য নয়। নির্বাচিত প্রতিক্রিয়ার সম্পাদনা দেখুন: উত্স নিষ্ক্রিয় হ'ল অ্যানাকোন্ডা পরিবেশের জন্য।
ডগ ব্র্যাডশো

2
এসও উত্তর মানের মান পূরণ না করার জন্য এটি ডাউনভোটগুলি "প্রাপ্য" । এটি একটি উত্তর চেয়ে মন্তব্য বেশি। তবে, পোস্টারের 79 খ্যাতির কারণে আমাদের সুন্দর হওয়া উচিত এবং ভাল প্রতিক্রিয়া জানানো উচিত।
ব্রুনো ব্রোনোস্কি

আমি প্রদর্শিত আছে @Abdul কিভাবে আপনি এ সংশোধনের 2 আপনার উত্তর মান উন্নত করতে stackoverflow.com/posts/29586756/revisions
ব্রুনো Bronosky

আপনার শেলটিতে যদি একটি নিষ্ক্রিয় কমান্ড না থাকে তবে এটি খুব সহায়তা করে না। আমি কেন বুঝতে পারি না কেন এটি সমস্যাটিকে সাহায্য করবে। ভার্চুয়াল এনভির কোনও নিষ্ক্রিয় স্ক্রিপ্ট নেই।
বুগেনচেল

19

পাইথন ভার্চুয়াল পরিবেশ সক্রিয় করতে:

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

নিষ্ক্রিয় করতে:

$deactivate

3
ওএস এক্স 10.11.1 এ টার্মিনালে, আমি ব্যবহার করতে হবে বলে মনে হচ্ছে:$source activate
এরিক মিলিয়ট-মার্টিনেজ

আমার উত্সের দরকার নেই। আমি $cd /to/dir/i/want/my/virtualenv/installedতখন $virtualenv name_i_want_for_itতখন $. name_i_want_for_it/bin/activateভার্চুয়ালেনভকে আমার কাছে কিছুটা দূরে মনে হয়েছিল। উন্নত করা দরকার ...
uchuugaka

3
"উত্স" "এর মতোই।" কমান্ড .. হয় কোনও ফাইল উত্স হিসাবে ব্যবহার করা যেতে পারে
কোরি গোল্ডবার্গ

11

আমি দেখতে পেলাম যে মিনিকোন্ডা 3 পরিবেশের মধ্যে যখন আমাকে চালাতে হয়েছিল:

conda deactivate

আমরাও deactivateনা source deactivateআমার জন্য কাজ করেন।


1
deactivateলিনাক্সে ছিল virtualenvএবং source deactivateএটি পুরানো কন্ডার জন্য ছিল । conda deactivateকনডা এনভির জন্য ভাল ক্রস প্ল্যাটফর্মের উপায় (ভ্যাচুয়ালেভগুলি নয়)
টমাসজ গ্যান্ডোর

6

আপনি virtualenvwrapperযেভাবে কাজ করেন তা সহজ করার জন্য আপনি ব্যবহার করতে পারেন virtualenv

ইনস্টল করা virtualenvwrapper:

pip install virtualenvwrapper

আপনি একটি প্রমিত শেল ব্যবহার করে থাকেন, আপনার খোলা ~/.bashrcবা ~/.zshrcআপনি ব্যবহার যদি ওহ আমার Zsh । এই দুটি লাইন যুক্ত করুন:

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

একটি বিদ্যমান virtualenv সক্রিয় করতে, কমান্ডটি ব্যবহার করুন workon:

$ workon myenv
(myenv)$

আপনার ভার্চুয়ালেনভ নিষ্ক্রিয় করার জন্য:

(myenv)$ deactivate

আমার টিউটোরিয়ালটি এখানে , কীভাবে ভার্চুয়ালেনভ এবং ভার্চুয়ালেনভ্রাপার ইনস্টল করতে হবে তার ধাপে।


2
বিল্ট-ইন ভ্যুচুয়ালেনভের তুলনায় আমি সামান্য পার্থক্য দেখছি
নাম জি ভিইউ

1
@ নামজিভিউ workonকমান্ডটি লক্ষ্য করুন , এটি যে কোনও ডিরেক্টরি থেকে কাজ করে।
igaurav

1
অন্য পোস্টের মন্তব্যে যেমন উল্লেখ করা হয়েছে (এবং স্ট্যাকওভারফ্লোতে এটি নির্দেশ করার জন্য কোনও ব্যবহারিক উপায় নেই) আপনি deactivateপ্রথমে এই ফাংশনটি সংজ্ঞায়িত স্ক্রিপ্টটি সোর্স না করে শেল স্ক্রিপ্টে ব্যবহার করতে পারবেন না (সেই ক্ষেত্রে আপনি সেই আদেশটি খুঁজে পাবেন না .. । ত্রুটি)
মারিয়ানো রুইজ

4

যেহেতু deactivateসোর্সিং দ্বারা তৈরি ফাংশনটি ~/bin/activateএই জাতীয় কমান্ড সন্ধানের স্বাভাবিক মাধ্যমে আবিষ্কার করা যায় না ~/bin, আপনি এটি তৈরি করতে চাইতে পারেন যা কেবলমাত্র ফাংশনটি কার্যকর করে deactivate

সমস্যাটি হ'ল deactivateএকক deactivateকমান্ডযুক্ত নামের একটি স্ক্রিপ্ট ভেন্টে না থাকা অবস্থায় দুর্ঘটনাক্রমে সম্পাদিত হলে একটি অন্তহীন লুপ সৃষ্টি করে। একটি সাধারণ ভুল।

deactivateফাংশনটি বিদ্যমান থাকলে (অর্থাত সোর্সিং দ্বারা এটি তৈরি করা হয়েছে activate) কেবলমাত্র কার্যকর করেই এড়ানো যায় ।

#!/bin/bash

declare -Ff deactivate  && deactivate


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তা থেকে বেরিয়ে যায় এবং অ্যাক্টিভেশন স্ক্রিপ্টটি পরিবেশে কোনও পরিবর্তন আনার আগে থেকেই আপনাকে মূল শেলের কাছে ফিরে যায় shell

উদাহরণ:

[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 দেওয়া হয়েছে।
রামকুমার ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.