こんにちはpythonistaの皆さん、PowerShellで virtualenv を使用すると問題が発生するようです。
PowerShellなどで環境をアクティブ化しようとすると、.
> env/scripts/activate
.. 何も起こりません。 (シェルプロンプトとPATH環境変数が変更されているはずです。)
問題は、PowerShellが新しいコマンドを生成することだと思います。 activate.batを実行するためだけのプロセス。つまり、変更をレンダリングすると、完了後にactivate.batはシェルを無効にします。
この問題の回避策はありますか? (私は今のところcmd.exeを使い続けています)
更新:以下の回答は古くなっています。さて、activate.ps1
(のではなく activate.bat
)Powershell環境からアクティベートします。
ここ は、環境変数を永続的に変更するバッチファイルを実行できるようにするPowershellスクリプトを含む投稿です。スクリプトは、環境変数の変更を呼び出し側のPowerShell環境に反映します。
virtualenvの最新バージョン は、PowerShellをそのまま使用できます。
ただ実行することを確認してください:
Scripts\activate.ps1
の代わりに
Scripts\activate
後者はactivate.bat
を実行しますが、PowerShellでは機能しません。
簡単な回避策は、cmdを呼び出してから、cmdセッション内からactivate.batを実行することです。例えば:
PS C:\my_cool_env\Scripts> cmd
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\my_cool_env\Scripts>activate.bat
(my_cool_env) C:\my_cool_env\Scripts>
仮想環境フォルダーのScriptsディレクトリ内には、コマンドを実行している場所に応じて使用できるいくつかのアクティベーションスクリプトがあります。 Windows PowerShellから仮想環境をアクティブ化しようとしている場合は、次のコマンドを使用してみてください。
. .\env\Scripts\activate.ps1
システムで無効化されているアクティベーションスクリプトに関するエラーを受け取った場合、まずシステムで実行ポリシーの変更を呼び出す必要があります。これは、管理者として行う必要があります。
これを行うには:
1)PowerShellアプリケーションを右クリックし、[管理者として実行]を選択します。
2)次のコマンドを実行します:Set-ExecutionPolicy Unrestricted
3)アクティベーションコマンドを再実行します:. .\env\Scripts\activate.ps1
これを試して: . .\env\Scripts\activate.ps1
ドットとスペースを見る
このエラーは、ユーザーが承認しないとシステムでスクリプトを実行できないセキュリティ対策が原因で発生します。これを行うには、管理者権限を持つPowerShellを開き(メインメニューでPowerShellを検索し、コンテキストメニューから[管理者として実行]を選択します)、次のように入力します。
set-executionpolicy remotesigned
詳細: http://www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/
それをアクティブにするための小さなスクリプトを書きました。
# Don't forget to change execution policies
# Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
# More info https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.core/about/about_execution_policies?view=powershell-7
if (Test-Path env:VIRTUAL_ENV) {
deactivate
}
$env = .\venv\Scripts\activate.ps1
# use $env to set variables, for instance $env:FLASK_APP = "main.py"
PowerShell拡張子.ps1
を付けてファイルを保存することを忘れないでください。
私もその問題がありました!そして最後に、ウィンドウで何をすべきかを見つけました...
次の手順に従ってください。
1)ウィンドウの検索バーに「powershell」と入力して右クリックし、[管理者として実行]を選択します
(そのチェックに問題がある場合 this )
2)PowerShellで次のコマンドを実行します:Set-ExecutionPolicy Unrestricted
3)アクティベーションコマンドを再実行します。.\\env\Scripts\activate.ps1
(正確なコマンドを実行してください!環境の名前に注意してください。)
以上です!:)
同様の問題がありました。いろいろな方法を試しました。実行ポリシーも変更されました。何もうまくいきませんでした。問題は、Activate.ps1へのパスを囲む二重引用符を削除する必要があったことです。
Windows PowerShellでは、env/Scriptsフォルダーから入力する必要があります。
. ./activate
Windowsユーザー
Powershellの場合:
set-executionpolicy remotesigned
最後に、実行
your_virtualenv_name\Scripts\activate.ps1
の代わりに
your_virtualenv_name\Scripts\activate.bat
CMDで実行:
your_virtualenv_name\Scripts\activate.bat
開発サーバーのアクティブ化と起動を処理するために、この短いスクリプトを書きました。
$ep = Get-ExecutionPolicy
if ($ep -eq 'RemoteSigned') {
$root = "C:\Users\ALeven\OneDrive\!code_projects\!Django_projects\"
$test = Read-Host -Prompt 'Would you like to activate the python environment? y/n'
if ($test -eq 'y') {
$activatestr = ($root + "\work_venv\Scripts\Activate.ps1")
& $activatestr
}
$test = Read-Host -Prompt 'Would you like to run the python server? y/n'
if ($test -eq 'y') {
$whichserver = Read-Host -Prompt 'Enter the name of the project.'
$path = ($root + $whichserver)
$runserverstr = ($path + "\manage.py")
python.exe $runserverstr runserver
}
} else {
Write-Host "Execution Policy does not allow this script to run properly"
Write-Host "If you have the proper permissions,"
Write-Host "Please close powershell,"
Write-Host "then right click the powershell icon and run as administrator"
Write-Host "Once in the powershell environment, execute the following:"
Write-Host "Set-ExecutionPolicy RemoteSigned -Force"
}
楽しい。
最初に実行するだけ
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
その後
./env/Scripts/activate.sp1
それで全部です