Python virtualenv を終了/終了/非アクティブ化する方法
-
13-09-2019 - |
質問
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
どちらdeactivate
もsource 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%は確かに、私は完全に何かを見逃しているかもしれない。