Python
Windows
pylint
virtualenvwrapper
VisualStudioCode

Pythonの開発環境をプロジェクト単位にWindows環境で用意する(VSCode+virtualEnvWrapper+Pylint)

More than 1 year has passed since last update.

はじめに

本記事では1つの開発環境に複数のプロジェクトを共存させる方法について説明します.

開発や保守など複数のプロジェクトを掛け持ちする場合,複数の環境が混在します.
環境を分離しないと,あるプロジェクトの開発環境が,他のプロジェクトで用意したライブラリに暗黙で依存することがあります.
このライブラリへの暗黙の依存により,開発環境で動いたコードが実行環境で動かない問題を防ぐため,プロジェクト単位にライブラリを分離する仮想環境(virtualEnvWrapper)を導入します.

ライブラリを分離したプロジェクト上で実装を効率的に行うため,構文の誤りをリアルタイムに指摘してくれるlinter(Pylint)を導入します.
実装したコードの実行操作をタスクとして登録し,実装〜動作確認を全てVisual Stuide Code(VSCode)上で済ませます.

前提

この記事ではWindowsを使った以下の環境を前提とし,以下は全てインストールされているものとします.

  • Windows 7
  • Python 3.5.1
  • VSCode 1.0.0

linterは全ての開発環境で共通に利用するため,システムのPython環境にインストールします.

仮想環境の準備

Python仮想実行環境(virtualenvwrapper)

virtualEnvWrapperは,Pythonで利用するライブラリのインストール環境を,並列に用意できるツールです.
導入した仮想環境のイメージはVirtualenv and virtualenvwrapper for Pythonの"VirtualEnv environments"に載っています.
OS上のPythonに複数の仮想的なプロジェクトを作成して,その中で任意のライブラリをインストールする構成を取ります.

仮想環境を用意する前に,仮想環境を問わずに利用するPylintもインストールします.

コマンドプロンプト
> pip install virtualenvwrapper-win
> pip install pylint

仮想実行環境の作成

次に,プロジェクトを用意します.
<virtualEnvName>に仮想環境名を与えて,作成します.

作成に成功するとプロンプトに仮想環境の名前が表示されます.

コマンドプロンプト
>mkvirtualenv <virtualEnvName>
(<virtualEnvName>)>

仮想環境はC:\\Users\<username>\Envs\に生成され,
<virtualEnvName>というフォルダが生成されます.

複数の環境を用意した場合は並列に存在することになります.

Pylint

Pythonの設定

VSCodeで基本設定->ユーザ設定から,LinterにpyLintを指定します.

{
...
    //-------- Python configuration --------

...
    // The linter to use
    "python.linter": "pyLint",
...
}

Pylintの設定

プロジェクトを作成したいフォルダでpylintの設定ファイル.pylintrcをプロジェクト直下に生成します.

>pylint --generate-rcfile > .pylintrc

pylintに仮想環境のライブラリが存在するパスを指定します.
pylintコマンドのヘルプにも説明があります.

--init-hook=<code>  Python code to execute, usually for sys.path
                        manipulation such as pygtk.require().

説明の通り,init-hook中にPythonのコードを記述します.

init-hook="import sys; sys.path.append('module') ; sys.path.append('C:\\Users\<username>\\Envs\\<virtualEnvName>\\Lib\\site-packages')"

<username>にはWindowsのアカウント名,<virtulEnvName>は前述の仮想環境名を入れます.
sys.path.append('C:\\Users\<username>\\Envs\\<virtualEnvName>\\Lib\\site-packages')でパスを指定しています.

追加した設定で動作するかはpylint <filename>.pyで確認できます.
pylintが通ったら,Visual Studio Codeを起動して,構文誤りが指摘されるかを確認します.

VSCode

タスクを設定する

開発中のウィンドウ切り替えを極力なくすために
実装や実行を全てVSCodeで行えるようにします.

ここでは,実行タスクをVSCodeに登録します.
タスクの説明は公式のIntegrate with External Tools via Tasksを参照してください.

Ctrl+Shift+p->タスクランナーの構成でtasks.jsonを起動します.
仮想環境上で実行するためのタスクを以下の通り記述します.

tasks.json
{
    "version": "0.1.0",

    // The command is tsc. Assumes that tsc has been installed using npm install -g typescript
    "command": "cmd",

    // The command is a shell script
    "isShellCommand": true,

    // Show the output window only if unrecognized errors occur.
    "showOutput": "always",

    // args is the HelloWorld program to compile.
    "args": ["/c"],

    // use the standard tsc problem matcher to find compile problems
    // in the output.
    // "problemMatcher": "$tsc",
    "tasks":    [
        {
            "taskName"  :   "run",
            "suppressTaskName": true,
            "isBuildCommand":  true,
            "args"      :   ["workon <virtualEnvName> & python ${file}"]
        }
    ]
}

設定の意図は次の通りです.

  • ビルドコマンドのショートカットであるCtrl+Shift+bで起動
  • cmd /Cでコマンドプロンプトを実行のたびに起動
  • tasksで実行するコマンドを&で連結し,同一タスク上で実行
    • 仮想化環境<virtualEnvName>を起動
    • ${file}でカレントファイルのPythonコードを実行

タスクの実行

以下のサンプルプログラムを作成して,Ctrl+Shift+bで実行してみます.
出力欄に"Hello world!"と表示できたら完了です.

hello.py
print("Hello world!")

これで,開発はVSCode上で完結するようになりました.

おまけ

キーバインドの割当を設定する

File->Preferences->Keyboard shortcutsをを選択し.
左ペインにデフォルトのキーバインド,右ペインにユーザが設定可能な空のキーバインドが表示されます.

空のキーバインドに以下を登録することで,タスクを起動できます.

[
    {
        "key": "ctrl+shift+r",
        "command": "workbench.action.tasks.runTask"
    }
]

実行はctrl+shift+rでコマンドパレット起動->"run"で行います.
"run"は、tasks.jsonで登録した"taskName"のこと.