質問

virtualenv と virtualenvwrapper を使用しています。を使用すると、virtualenv をうまく切り替えることができます。 workon 指示。

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

しかし、すべての仮想マシンを終了して、再び実マシンで作業するにはどうすればよいでしょうか?今のところ、元に戻る唯一の方法は、

me@mymachine:~$ 

シェルを終了して新しいシェルを開始することです。それはちょっと面倒ですね。「何もしない」ことを実行するコマンドはありますか? ある場合、それは何ですか?そのようなコマンドが存在しない場合、どのように作成すればよいでしょうか?

役に立ちましたか?

解決

通常、virtualenvのをアクティブにすると、あなたの名前のシェル関数を与えます:

$ deactivate

正常に戻って物事を置きます。

私はちょうどはい、それはあまりにもすべてvirtualenvsから脱出する方法としてvirtualenvwrapper,をサポートし、deactivateためのコードで特異的に再び見てきています。

あなたがのアナコンダの環境を残すためにしようとしている場合は、

、手順が若干異なります。彼らは、スタンドアロンスクリプトを使用して非アクティブ化を実現するため、2ワードコマンドsource deactivateを実行します。

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.

他のヒント

私は別名のをworkoff のworkonの反対など:

alias workoff='deactivate'

簡単には覚えてます:

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

これが動作しない場合は、してみてください。

$ source deactivate
褒め言葉として bashのsource の作品はそれは奇妙だと思うでしょうが、virtualenvの周りにいくつかのラッパー/ワークフローが実現する方法を知っている

誰もsource activateする/対応。 YMMV

pythonの仮想環境をアクティブにします:

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

非アクティブにします:

$deactivate

私は、ときMiniconda3環境の中で、私が実行しなければならなかったことが判明します:

conda deactivate

どちらdeactivatesource deactivateは私のために働いています。

あなたはvirtualenvwrapperで動作する方法を容易にするためにvirtualenvを使用することができます。

インストールvirtualenvwrapper

pip install virtualenvwrapper

あなたは、標準のシェルを使用している場合は、ああ、私の-zshの使用している場合は、あなたの~/.bashrc~/.zshrcを開きます。この2行を追加します:

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

コマンドworkonを使用して、既存のvirtualenvのを有効にするには:

$ workon myenv
(myenv)$

あなたのvirtualenvのを無効にするには:

(myenv)$ deactivate

ここにある私のチュートリアルに、virtualenvのとvirtualenvwrapperをインストールする方法のステップバイステップ

deactivateを使用します。

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

メモは、(my_env)がなくなっています。

deactivateを調達により作成された~/bin/activate機能は~/binでこのようなコマンドを探しているの通常の手段によって発見することができないので、

、あなただけの機能deactivateを実行して作成したい場合があります。

問題が誤ってvenvで実行中でない場合は、単一のコマンドdeactivateを含むdeactivateという名前のスクリプトが無限ループの原因となることです。よくある間違います。

関数が存在する場合は、

この(すなわちdeactivateを調達することにより作成されている)のみactivateを実行することによって回避することができる。

#!/bin/bash

declare -Ff deactivate  && deactivate

私が使う zsh-autoenv に基づいています 自動環境.

zsh-autoenv 自動的にソース(既知/ホワイトリスト) .autoenv.zsh 通常、プロジェクトルートディレクトリで使用されます。「Enter」を処理して「エントリ」し、変数のネスト、および隠し(上書きと復元)を処理します。

以下に例を示します。

; 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 ディレクトリに移動すると、仮想環境は自動的に終了します。

インストーラスクリプトでの作業中に

は、同じ問題を自分で持っていた、私はのbinに/ activate_this.py の行なったし、それを逆に何を見ていました。

例:

#! /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())
意図した通りに動作するかどうか

100%は確かに、私は完全に何かを見逃しているかもしれない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top