Câu hỏi Làm thế nào để thoát / thoát / tắt một virtualenv python?


Tôi đang sử dụng virtualenv và virtualenvwrapper. Tôi có thể chuyển đổi giữa virtualenv chỉ bằng cách sử dụng lệnh workon.

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

Tuy nhiên, làm thế nào để thoát khỏi tất cả các máy ảo và workon máy thật của tôi một lần nữa? Ngay bây giờ, cách duy nhất tôi có để trở lại

me@mymachine:~$ 

là để thoát khỏi vỏ và bắt đầu một cái mới. Đó là loại gây phiền nhiễu. Có một lệnh để làm việc "không có gì", và nếu như vậy, nó là gì? Nếu một lệnh như vậy không tồn tại, tôi sẽ tạo ra nó như thế nào?


1070
2018-06-13 14:15


gốc


Có một lệnh để workon "không có gì" - nó hiển thị tất cả các môi trường ảo có sẵn của bạn, khá là tiện lợi. Chỉ cần gõ "workon" không có đối số và nhấn enter. Lệnh để thoát là "hủy kích hoạt", như được trả lời dưới đây. - Dannid


Các câu trả lời:


Thông thường, kích hoạt virtualenv cung cấp cho bạn một hàm shell có tên:

$ deactivate

khiến mọi thứ trở lại bình thường.

Chỉnh sửa 1

Tôi vừa xem lại một lần nữa đoạn mã cho virtualenvwrapper, và, vâng, nó cũng hỗ trợ deactivate như là cách để thoát khỏi tất cả các virtualenv.

Chỉnh sửa 2

Nếu bạn đang cố gắng rời khỏi Anaconda môi trường, các thủ tục là một chút khác nhau: chạy lệnh hai từ source deactivate vì chúng thực hiện việc hủy kích hoạt bằng cách sử dụng tập lệnh độc lập.

bash-4.3$ deactivate
pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'
bash-4.3$ source deactivate
pyenv-virtualenv: no virtualenv has been activated.

1766
2018-06-13 14:31



Virtualenv của tôi không có lệnh hủy kích hoạt - Prof. Falken
Lệnh “hủy kích hoạt” không phải là một nhị phân, cũng không phải là một kịch bản mà bạn “nguồn”; nó là một bí danh vỏ được định nghĩa động trong trình bao hiện tại của bạn bằng kịch bản "kích hoạt". - Brandon Rhodes
@Apreche Trong khi chờ đợi (gần bốn năm sau) điều này dường như đã được thêm vào tài liệu. - gertvdijk
Sẽ trực quan hơn nhiều nếu nó được gọi là "workoff" hoặc "unworkon". Hoặc nếu "workon" được gọi là "kích hoạt". Cảm ơn lòng tốt cho bí danh. - kkurian
Đoán lệnh virtualenv thực sự bên trong "workon" được gọi là gì? ... (cảnh báo spoiler) ... ... (cảnh báo spoiler) ... ... (cảnh báo spoiler) ... ... (cảnh báo spoiler) ... kích hoạt! - FutureNerd


Tôi đã định nghĩa một bí danh  làm việc ngược lại với workon:

alias workoff='deactivate'

Dễ nhớ:

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

33
2018-01-14 16:23



Trong tệp nào? .bashrc? - seyed
@seyed yes, xem câu trả lời này ví dụ về bí danh trong ~/.bashrc - Bob Stein
Tôi thích bí danh này. Nhắc tôi về đứa trẻ Karate (sáp, sáp) - C0deH4cker
Tuyệt vời ! Tôi thực sự thích điều này;) - Yasser Sinjab


$ deactivate 

Nếu cách này không hiệu quả, hãy thử

$ source deactivate

Bất cứ ai biết cách bash source công trình sẽ nghĩ rằng đó là lẻ, nhưng một số trình bao bọc / quy trình công việc xung quanh virtualenv thực hiện như một lời khen / đối tác source activate. YMMV


22
2018-04-12 06:41



deactivate là một hàm được tạo khi bạn nguồn activate tập tin. Đề xuất của bạn để làm source deactivate không có ý nghĩa gì cả, vì không có tệp nào có tên deactivate - Anthon
Điều này không xứng đáng với các downvotes. Xem chỉnh sửa phản hồi đã chọn: tắt nguồn là dành cho môi trường anaconda. - Doug Bradshaw
Nó "xứng đáng" downvotes cho không đáp ứng SO câu trả lời tiêu chuẩn chất lượng. Đó là một bình luận nhiều hơn là một câu trả lời. Nhưng, vì danh tiếng của tấm áp phích 79, chúng ta nên đẹp và đưa ra phản hồi tốt. - Bruno Bronosky
@Abdul Tôi đã chứng minh làm thế nào bạn có thể cải thiện chất lượng câu trả lời của bạn trong Revision 2 tại stackoverflow.com/posts/29586756/revisions - Bruno Bronosky
điều này rất vô ích nếu bạn không có lệnh hủy kích hoạt trong trình bao của mình. Tôi không thực sự hiểu tại sao điều này sẽ giúp được vấn đề. Không có kịch bản tắt trong virtual env. - bgenchel


để kích hoạt môi trường ảo python:

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

để hủy kích hoạt:

$deactivate

10
2017-11-26 07:06



Trong terminal trên OS X10.11.1, tôi dường như phải sử dụng: $source activate - Eric Milliot-Martinez
Tôi không cần nguồn. tôi đã làm $cd /to/dir/i/want/my/virtualenv/installed sau đó $virtualenv name_i_want_for_it sau đó $. name_i_want_for_it/bin/activate virtualenv vẫn còn một chút với tôi. Cần được cải thiện ... - uchuugaka
"nguồn" giống với "." lệnh .. hoặc có thể được sử dụng để nguồn một tập tin - Corey Goldberg


Bạn có thể dùng virtualenvwrapper để giảm bớt cách bạn làm việc với virtualenv

Đang cài đặt virtualenvwrapper

pip install virtualenvwrapper

Nếu bạn đang sử dụng trình bao tiêu chuẩn, hãy mở ~/.bashrc hoặc là ~/.zshrc nếu bạn sử dụng oh-my-zsh. Thêm hai dòng này:

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

Để kích hoạt virtualenv hiện có, sử dụng lệnh workon:

$ workon myenv
(myenv)$

Để hủy kích hoạt virtualenv của bạn:

(myenv)$ deactivate

Đây là hướng dẫn, từng bước làm thế nào để cài đặt virtualenv và virtualenvwrapper


1
2017-09-01 05:13



Tôi thấy sự khác biệt nhỏ so với virtualenv tích hợp - Nam G VU
@NamGVU Lưu ý workon lệnh, nó hoạt động từ bất kỳ thư mục nào. - igaurav
OP đã sử dụng virtualenvwrapper, không? - Radon Rosborough
Không làm việc thực sự. deactivate: command not found. - Schütze


tôi sử dụng zsh-autoenv mà là dựa tắt autoenv.

zsh-autoenv tự động   nguồn (đã biết / danh sách trắng) .autoenv.zsh tệp, thường được sử dụng trong   thư mục gốc của dự án. Nó xử lý "nhập" và để lại "sự kiện,   làm tổ và stashing các biến (ghi đè và khôi phục).

Đây là một ví dụ:

; 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

Vì vậy, khi tôi rời khỏi dtree thư mục, môi trường ảo được tự động thoát.


0
2018-02-14 10:50





(my_env) basant @ basant: ~ / EonTraining / my_env $ hủy kích hoạt

sử dụng 'hủy kích hoạt'

basant @ basant-Lenovo-E40-80: ~ / EonTraining / my_env $

Cuốn (my_env);


0
2017-09-03 06:43





Đã có cùng một vấn đề trong khi làm việc trên một kịch bản cài đặt, tôi đã xem những gì bin / activate_this.py đã làm và đảo ngược nó.

Thí dụ:

#! /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

# deactive/switch back to initial interpreter
deactivate()

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

Không chắc chắn 100% nếu nó hoạt động như dự định, tôi có thể đã bỏ lỡ một cái gì đó hoàn toàn.


-2
2017-12-11 18:18



nếu hủy kích hoạt giá trị đặt lại của đường dẫn môi trường, đường dẫn hệ thống, lời nhắc mặc định thì chức năng hủy kích hoạt của bạn là cách tiếp cận tốt. Tôi thích kịch bản của bạn. Đã được +1. - Ramkumar D