Windowsでなんちゃって仮想環境を作る
本格的な仮想環境作るならDockerいれるとかすればよいのだが、そこまでするほどではないことがままある。
というかDockerはぶっちゃけコンテナイメージとかディスクがよくわからんとこに配置されてしまうので、PCをきれいに保つという意味で逆効果だったりもする。
ということで、なんちゃって仮想環境を作る。ここでのなんちゃってというのは、レジストリ/Program Files/Userディレクトリに変更を加えず、プロジェクトフォルダ内に変更範囲が閉じているということを意味する。
環境変数
プロジェクトフォルダ内にdev_tools\set_env.bat, launch.batを作成する。
dev_tools\sub_dir\binをPATHに追加するなら以下の通り。
set "PATH=%~dp0subdir\bin;%PATH%"
cmd /k "%~dp0dev_tools\set_env.bat"
おまけとして、cmdのログを取るには以下で実施する。
@REM logfile: dev_tools\log\cmd\log_yyyy-mm-dd_hh-mm-ss_XXXXX.txt
set "logfile=00000%RANDOM%"
set "logfile=%logfile:~-5%"
set "logdate=%date:/=-%"
set "logtime=%time::=-%"
set "logtime=%logtime: =0%"
set "logtime=%logtime:~0,8%"
set "logfile=log_%logdate%_%logtime%_%logfile%.txt"
powershell.exe -Command "Start-Transcript -Path '%~dp0dev_tools\log\cmd\%logfile%';cmd /k '%~dp0dev_tools\set_env.bat'"
一時フォルダ
一部のプログラムは一時フォルダを処理に利用するので、これをdev_tools\Tempに変更する。
...
set "TEMP=%~dp0Temp"
set "TMP=%~dp0Temp"
VSCode
VSCodeのインストールはzip経由で行う。展開したディレクトリにdataディレクトリを作成することでPortable modeが有効化され、dataにすべてのユーザーデータが保存されるようになる。
gcloud
インストールはzip経由で行う。環境変数CLOUDSDK_CONFIGを設定することでコンフィグファイルやADCの生成先を変更できる。
例えば、zipをdev_tools以下に展開し、dev_tools\gcloud_configをコンフィグファイルとして用いるには、dev_tools\set_env.batを以下のように記載する。
set "CLOUDSDK_CONFIG=%~dp0gcloud_config"
set "PATH=%~dp0google-cloud-sdk-XX-windows-x86_64-bundled-python\google-cloud-sdk\bin;%PATH%"
インストール後はgcloud init、gcloud components update、gcloud auth login --no-launch-browserなど通常通りのコマンドを実行していけばよい。
Python
Embeddable Pythonを使う。ただし、pipやtkを使えないなどの制約があるので一部解除する必要がある。様々な記事が出ている(例)ので詳細は省略するが、具体的にやる必要があるのは以下。
- 展開したzipにPATHを通す。
- pythonXXX._pthを削除する。(#import siteの#を外す方法もあるのだが、カレントディレクトリが探索されないとかの制約が生まれるので消してしまうほうが早い)
- get-pip.pyをダウンロードし、実行する。
- 展開したzipのScriptsフォルダにPATHを通す。
uv
GitHubのリリースページからWindows用のzipをダウンロードして利用する。
やる必要がある事項は以下の通り。
- 展開したzipにPATHを通す。
- キャッシュフォルダのパスを変更する。
...
set "UV_CACHE_DIR=%~dp0uv-cache"
Node.js
公式でStandalone Binaryが配布されているのでこれを利用する。
やる必要がある事項は以下の通り。
- 展開したzipにPATHを通す。
- キャッシュフォルダのパスを変更する。(
npm configで変更するか、以下のように環境変数から変更するかのいずれか)
...
set "NPM_CONFIG_CACHE=%~dp0npm-cache"
Discussion