Windows+gVim+pipenvでPython開発ことはじめ

# はじめに

Windows+gVim+pipenv環境ではじめてPythonを開発するので、その時に行ったことをまとめました。
gvim上でオムニ補完と静的コード解析ができるまでがゴールです。

# ChocolateyGetインストール
管理者権限のpowershellで下記実行

```
Set-ExecutionPolicy RemoteSigned
install-packageprovider ChocolateyGet
```

# gitインストール
管理者権限のpowershellで下記実行

```
install-package git -providerName ChocolateyGet
```

# Pythonインストール
管理者権限のpowershellで下記実行
※最新のpython(現在では3.7.8)がインストールされる

```powershell

install-package python -providerName ChocolateyGet
```

※3.6も追加でインストールする場合

```
Install-Package -Force -RequiredVersion 3.6.8 -ProviderName ChocolateyGet python
```

# pipenvのインストール
```
pip install --upgrade pip
pip install pipenv
```


# gvimインストール
kaoriya本家からgvimをダウンロードし解凍する。

```
# kaoriya-vimをCドライブ直下に解凍する場合
Invoke-WebRequest -uri https://github.com/koron/vim-kaoriya/releases/download/v8.1.1048-20190325/vim81-kaoriya-win64-8.1.1048-20190325.zip -OutFile $env:temp\gvim.zip
Expand-Archive $env:temp\gvim.zip -DestinationPath C:\
remove-item $env:temp\gvim.zip
```



$VIM(gvim.exeのあるフォルダ)をPATHに追加する
管理者権限で下記powershell実行

```
# kaoriya-vimをCドライブ直下に解凍した場合
$SystemPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
$SystemPath += ";c:\vim81-kaoriya-win64"
[System.Environment]::SetEnvironmentVariable("Path", $SystemPath, "Machine")
```

# gvimプラグインのインストール
下記プラグインを導入する。
https://github.com/davidhalter/jedi-vim
https://github.com/w0rp/ale

※$VIMはgvim.exeのあるフォルダ
※プラグインマネージャを利用している場合はそっちで導入

```
cd $VIM/plugins
git clone --recursive https://github.com/davidhalter/jedi-vim.git
git clone https://github.com/w0rp/ale.git
```


# pythonファイルを開いたときのオムニ補完をjediに設定するようvimrcに追記
```vimscript

autocmd FileType python setlocal omnifunc=jedi#completions
```


# gvim用のembeddedpythonを設置する
kaoriyaのvimはでデフォルトでpython37にリンクされているのでgvim専用にgvimで利用するライブラリを入れたembeddedpythonを設置しておく

```
Invoke-WebRequest -uri https://www.python.org/ftp/python/3.7.3/python-3.7.3-embed-amd64.zip -OutFile $env:temp\embedpython.zip
Expand-Archive $env:temp\embedpython.zip -DestinationPath C:\vim81-kaoriya-win64\python-3.7.3-embed-amd64
remove-item $env:temp\embedpython.zip
cd C:\vim81-kaoriya-win64\python-3.7.3-embed-amd64
expand-archive python37.zip
remove-item python37.zip
Rename-Item python37 -newname python37.zip
Write-Output "import site"|out-file -Append -Encoding ascii "C:\vim81-kaoriya-win64\python-3.7.3-embed-amd64\python37._pth"
wget "https://bootstrap.pypa.io/get-pip.py" -O "get-pip.py"
.\python.exe get-pip.py
.\python.exe -m pip install flake8
```



# gvim用のembeddedpythonをgvimから使えるようvimrcに追記する
```vimscript
let $PATH = $PATH . ";" . $VIM . "\\python-3.7.3-embed-amd64"
let $PATH = $PATH . ";" . $VIM . "\\python-3.7.3-embed-amd64\\Scripts"
```

# プロジェクト作成
※バージョン3.7の環境を作成する場合

```
mkdir newproject
cd newproject
pipenv --python 3.7
```


# プロジェクトに必要なライブラリをインストール
```
pipenv install hogehoge(必要なライブラリ)
```

# pipenvの仮想環境に入る
```
pipenv shell
```
(以後の操作はこの仮想環境内で行う)

# gvim起動
※pipenv仮想環境内で実行

```
gvim main.py
```

# 実行
※pipenv仮想環境内で実行

```
python main.py
```

# 豆知識
WindowsはPythonにPATHを通さなくてもPythonランチャーからPythonやモジュールの実行が可能。
python公式からダウンロードしたインストーラからPATHを通さずインストールしてpythonランチャーからpipenvを利用すると何故かエラーとなる
ChocolateyGetからインストールすると自動でPATHが通るが、PATHが通っていてもいなくてもpythonランチャーからpipenvの起動可能

補完をするモジュールjediはjedi-vimの中にサブモジュールとして含まれているので別途インストールする必要はない

python-language-serverとvim-lspを用いても補完が可能だが、jedi-vimと違いpython-language-serverをシステムにインストールする必要があり、プロジェクトにインストールしたライブラリに対しての補完が効かない(なにかやり方はあるかもしれない)

pythonファイルをgvimで開いたときにそのpythonファイルが含まれるpipenv仮想環境に自動で入ってくれるプラグイン[vim-pipenv](https://github.com/PieterjanMontens/vim-pipenv)があるが、Windowsには未対応である模様