Windowsのpython開発で仮想環境(venv)・VSCode向けの設定・.gitignoreをセットアップしてすぐ開発できるようにするスクリプトを書いてみた
最近プライベートで勉強を兼ねてpythonで1つのツールを開発しています。
普段デスクトップで開発をしているのですが、外出先でも開発できるようにノートPCも使うようになりました。
新しい環境で開発を開始するとき、仮想環境と設定といろいろと面倒なことがあったので新しい環境下で利用できるスクリプトを書いてみました。
前提とする環境
- Windows 10
- Python 3.10(下位環境では検証していませんがvenvが動けば動くはず)
- VSCode(Visual Studio Code)
- フォーマッター(flake8 + autopep8)
セットアップの内容
ソースコード
param ([string]$EnvName) <# .SYNOPSIS python開発環境のセットアップ。 .DESCRIPTION - pythonのvenvによる仮想環境を構築する。 - requirements.txtが存在すればプロジェクトに必要なパッケージをインストールする。 - VSCodeの開発用設定ファイルを作成する。 .PARAMETER EnvName 設定する環境名 .EXAMPLE PS> SetupPythonDevEnv.ps1 -EnvName .appenv #> Set-Location -Path $PSScriptRoot if (-not $EnvName) { Write-Host "環境名を設定してください。" exit } $IsFirstRun = -not (Test-Path -Path "$PSScriptRoot\$EnvName") if (-not $IsFirstRun) { Write-Host "指定の環境名フォルダがすでに存在しています。セットアップを中止します。" Write-Host "セットアップを再度実行したい場合は仮想環境フォルダを削除してから再度実行してください。:$EnvName" exit } Write-Host "[venv]環境の作成:$EnvName" python -m venv $EnvName Write-Host "[venv]環境の有効化 $EnvName" & "$EnvName\Scripts\Activate.ps1" Write-Host @" [venv]環境を有効化しました。現在のコマンドを表示します。 - python : $((Get-Command python).Source) - pip : $((Get-Command pip).Source) "@ Write-Host "[pip]pipのアップデート" python -m pip install --upgrade pip if (Test-Path "$PSScriptRoot\requirements.txt") { Write-Host "[pip]パッケージのインストール" pip install -r $PSScriptRoot\requirements.txt } Write-Host "[VSCode]ワークスペース用settings.json作成" $vscodeDir = ".vscode" if (-not (Test-Path $vscodeDir)) { mkdir $vscodeDir } $ScriptRootJson = $PSScriptRoot -replace "\\", "\\" $json = @" { "python.defaultInterpreterPath": "$ScriptRootJson\\$EnvName\\scripts\\python.exe", "python.analysis.extraPaths": [ "$ScriptRootJson\\$EnvName\\Lib\\site-packages" ], "python.autoComplete.extraPaths": [ "$ScriptRootJson\\$EnvName\\Lib\\site-packages" ], "files.watcherExclude": { "**\\$EnvName\\**": true }, "python.linting.enabled": true, "python.linting.flake8Enabled": true, "python.linting.pycodestyleEnabled": false, "python.linting.pylintEnabled": false, "python.formatting.provider": "autopep8", "[python]": { "editor.formatOnSave": true, "editor.formatOnPaste": true } } "@ Set-Content -Path "$vscodeDir\settings.json" -Value $json -Encoding UTF8 # .gitignoreの設定 $GitIgnoreFile = ".gitignore" if (Test-Path $GitIgnoreFile) { $HasEnvName = Get-Content $GitIgnoreFile -Encoding UTF8 ` | Where-Object { $_ -eq $EnvName } if ($HasEnvName) { Write-Host "[git].gitignoreに追加済" } else { $IgnoreDirectory = "`n`n# python venv $EnvName`n$EnvName" Write-Host "[git].gitignoreに仮想環境を追記" Add-Content -Path ".gitignore" -Value $IgnoreDirectory -Encoding UTF8 } }
気になるところ
- すでに .vscode/settings.json が存在したときにマージできない。
- powershellで既存json編集が面倒なので妥協した
- 統一した環境でチーム開発するなら問題ない?
- いくつかの設定を関数化したほうがいい?
以上