web-dev-qa-db-ja.com

Python virtualenvがWindows10Cmderでアクティブ化されていません

私はWindows10でCmderをPython 3.5で、ラップトップと仕事用コンピューターでvirtualenvを使用して問題なく使用しています。

これで、Windows 10、Python 3.5、virtualenv 15.0を実行している新しいコンピューターがあり、python仮想環境を次のように初期化できます:

virtualenv env

そして、virtualenvディレクトリを取得しますが、実行すると:

env/Scripts/activate

何も起こりません。エラーメッセージはなく、最悪の場合、環境がアクティブ化されたかどうかを示すものは何もありません(つまり、文字列「(env)」がパスの横のターミナルにポップアップ表示されません)。

奇妙なことに、プレーンな古いcmdを使用するとvenvをアクティブ化でき、「(env)」がターミナルに表示されます。 Cmderで実行した場合だけではありません。もう1つの奇妙な点(関連しているとは思わないが、関連している可能性がある)は、通常のcmdでvirtualenvを実行できるようになると、シャットオフしようとしたときに「deactivate」キーワードが認識されないと表示されることです。

StackOverflowでこの投稿(下記)を見つけました。これは似ていますが、実際には答えがなく、PowerShellに関するものであるため、それほど便利ではありません。

https://stackoverflow.com/questions/31769863/cant-activate-python-venv-in-windows-1

何かご意見は?

ありがとうございました。

3
Chaz

この回答は古く、cmder conda/venvをサポートするようになりました として不要になりました。それがあなたのために働いていないならば、あなたのcmderインストールを更新してください。

元の(時代遅れの)回答

Conda envでも同様の問題が発生しました(Vanilla virtualenvでも同じように見えます)。 Cmderは独自のプロンプトを強制し、プロンプトenv変数を無視します。次の内容の[cmder dir]\config [something] .luaというファイルを追加する必要があります。

 -- Code based on https://github.com/cmderdev/cmder/issues/1056
 -- with modifications to make it actually work (https://github.com/cmderdev/cmder/issues/1056#issuecomment-237403714)
---
 -- Find out current conda/virtual envs
 -- @return {false|conda/virtual env name}
---

local clink_path_lua_file = clink.get_env('CMDER_ROOT')..'\\vendor\\clink-completions\\modules\\path.lua'
dofile(clink_path_lua_file)

function get_virtual_env(env_var)
    env_path = clink.get_env(env_var)
    if env_path then
        basen = exports.basename(env_path)
        return basen
    end
    return false
end

---
 -- add conda env name 
---
function conda_Prompt_filter()
    -- add in conda env name
    local conda_env = get_virtual_env('CONDA_DEFAULT_ENV')
    if conda_env then
        clink.Prompt.value = string.gsub(clink.Prompt.value, "λ", "["..conda_env.."] λ")
    end
end

---
 -- add virtual env name 
---
function venv_Prompt_filter()
    -- add in virtual env name
    local venv = get_virtual_env('VIRTUAL_ENV')
    if venv then
        clink.Prompt.value = string.gsub(clink.Prompt.value, "λ", "["..venv.."] λ")
    end
end

clink.Prompt.register_filter(conda_Prompt_filter, 20)
clink.Prompt.register_filter(venv_Prompt_filter, 20)
3
user2856