Windows 10 上でPyenv + Pipenv 環境を構築してみたのでメモ。
Linux と違ってあれこれ手動でやらなければならないことが多いので、なるべくコマンドラインから実行でできるようにまとめました。
† pyenv-win のインストール
Windows 上で Pyenv を使うためにはpyenv-win を使います。
基本的には Linxux の pyenv と一緒ですが、Python はソースからではなく Windows 用のインストーラで導入されます。
このため、
- インストール中に GUI のインストールボタンを押す必要がある
- アンインストールはコントロールパネルのプログラムと機能から行なう必要がある
ことに注意が必要です。
導入方法はサイトに解説されているとおりで、アップデートを考えると git を使う方が楽ですが、開発用のツールが何も入っていないすっぴんの Windows を対象にする場合には zip で入れるのが一番楽な方法になります。具体的には以下のコマンドを PowerShell で実行すればすんなり導入できるはずです。
# Download/Setup pyenvSet-Location $env:USERPROFILEInvoke-WebRequest -Uri https://github.com/pyenv-win/pyenv-win/archive/master.zip -OutFile master.zipExpand-Archive -Path master.zip -DestinationPath $env:USERPROFILERename-Item -path pyenv-win-master -newName .pyenv# Update pyenv-insatallInvoke-WebRequest -Uri https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/libexec/pyenv-install.vbs -OutFile $env:USERPROFILE\.pyenv\pyenv-win\libexec\pyenv-install.vbs# Add environment variables # (If you add "/M" at the end of line, it will be added to system environment variables.)SETX PYENV "$env:USERPROFILE\.pyenv\pyenv-win"SETX PATH "%PYENV%\bin;%PYENV%\shims;%PATH%;"SETX PIPENV_VENV_IN_PROJECT 1
† Python と pipenv のインストール
続いて Pyton と pipenv を入れていきます。
このあたりは別段、Linux の時と変わりありませんね。
# Install python and pipenvpyenv install 3.7.5-amd64pyenv global 3.7.5-amd64pyenv rehashpython -m pip install --upgrade pippip install pipenvpyenv rehash
† pipenv を使おうとするとエラーが出るので・・・・
Python と pipenv が導入できたので、さっそく使い始めたいところですが、pipenv でプロジェクトを初期化しようとすると、以下のようなエラーが出てしまいます。
・・・・・・・・・・・・・・・・・・・・ File "c:\users\h\.pyenv\pyenv-win\versions\3.7.5-amd64\lib\site-packages\pipenv\vendor\shellingham\nt.py", line 78, in _iter_process info = {'executable': str(pe.szExeFile.decode('utf-8'))}UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 0: invalid start byte
この症状については、どうやら「The Python Dependency Tool · Ka's Blog」の内容と同じようなので、nt.py を以下のように書き換えてやると修正することができます。
info = {'executable': str(pe.szExeFile.decode('utf-8'))}
info = {'executable': str(pe.szExeFile.decode('utf-8', errors='ignore'))}
これもいちいちやるのが面倒なので、PowerShell から以下のコマンドを叩けば nt.py を自動的に探して修正を行なうようにしてみました。
$ntpy = (python -c "import site; from glob import glob; path = '\\pipenv\\vendor\\shellingham\\nt.py'; print(list(map(lambda x: x+path, list(filter(lambda x: glob(x+path), site.getsitepackages()))))[0])")$contents = $(Get-Content $ntpy) -replace "'utf-8'","'utf-8', errors='ignore'"$contents | Out-String | % { [Text.Encoding]::UTF8.GetBytes($_) } | Set-Content -Path $ntpy -Encoding Byte
† ついでに C のコンパイラも入れておく
モジュールによってはコンパイラがないと行けない場合もあるので、Visual Studio 2019 for Windows および Mac のダウンロード からBuild Tools for Visual Studio 2019 をダウンロードして入れておくと良いと思います。
これで、Windows でも Pyenv + Pipenv の快適な環境を満喫できます。