こうこく
作 ▸
改 ▸

Windows + VSCode + pipenv でPythonの開発環境を作る

Docker使えない人向け。開発環境というかプロジェクトフォルダ。Pythonのグローバルを汚さないように pipenv で開発ツールをインストールする。

Windows 10Python 3.9.10pipenv 2022.1.8VSCode 1.65.0
もくじ

前提

VisualStudioCodeがインストール済みで、コマンドプロンプトで code コマンドを使用できること。

手順1. Pythonをインストール

公式のダウンロードページからインストーラをダウンロードする。

ここではPython 3.9.10 の Windows installer (64-bit)を使用する。(インストーラではない『Windows embeddable package』もあるけど、以前に試したとき pip をどうしても使えなくて諦めたので、インストーラ版を使うこと。)

パブリックキーを作成
パブリックキーを作成

インストーラを起動したら下部の『Add Python 3.9 to PATH』をチェックONにする。これをするとユーザーの環境変数の PATH に、Pythonのインストールフォルダと、インストールフォルダ直下の Scripts フォルダが追加される。

インストール先はどこでも大丈夫なので、ここでは『Install Now』を選択してデフォルトの場所 (C:\Users\{ユーザー名}\AppData\Local\Programs\Python\Python39) にインストールする。

完了したら、コマンドプロンプトで以下コマンドを実行してインストールが成功したことを確認。

python --version
pip --version
実行結果
Python 3.9.10
pip 21.2.4 from C:\Users\{ユーザー名}\AppData\Local\Programs\Python\Python39\lib\site-packages\pip (python 3.9)

手順2. pipenvをインストール

Pythonに付属しているデフォルトのパッケージ管理システム pip は、Node.jsの npm などと違ってプロジェクトフォルダごとにパッケージを管理できない。そのため pipenv を導入する。

コマンドプロンプトで以下コマンドを実行して pipenv をインストール。

pip install pipenv

以下コマンドを実行してインストールが成功したことを確認。

pipenv --version
実行結果
pipenv, version 2022.1.8

そしたら更に以下コマンドを実行して、pipenv 用のユーザー環境変数を設定する。

setx PIPENV_VENV_IN_PROJECT 1
setx PIPENV_IGNORE_VIRTUALENVS 1
  • PIPENV_VENV_IN_PROJECTpipenv がプロジェクトフォルダ以下に仮想環境を作成するようになる。
  • PIPENV_IGNORE_VIRTUALENVS … 環境変数 VIRTUAL_ENV を無視するようになる。 VIRTUAL_ENV は仮想環境の場所を指定するための環境変数なので、必ずプロジェクトフォルダ以下に仮想環境を作る運用をするなら無視した方が間違いが無い。

成功したら、コマンドプロンプトを閉じてもう一度起動することで、コマンドプロンプトに環境変数を反映する。

手順3. プロジェクトを作成

コマンドプロンプトで以下コマンドを実行し、プロジェクトフォルダを作る。カレントフォルダはどこでもよい。

mkdir .\myproject

続けて以下コマンドを実行し、VSCodeでプロジェクトフォルダを開く。

code myproject

以後はVSCodeのターミナルで操作する。ターミナルを開くには Ctrl + @ キー。

以下コマンドでプロジェクトを初期化。

pipenv --python 3.9

完了すると、プロジェクトフォルダ内にフォルダ .venv とファイル Pipfile が作成される。

さらに以下コマンドで、開発用のパッケージを --dev オプション付きでインストール。

pipenv install --dev black flake8 pyproject-flake8 isort[pyproject] mypy

各パッケージの内容は以下の通り。

  • black … PEP8準拠のフォーマッター。
  • flake8 … 構文チェックを行う。
  • pyproject-flake8flake8 の設定を pyproject.toml で管理できるようにする。
  • isort[pyproject] … PEP8準拠で import 文の順序を修正する (isortpyproject.toml 対応版)。
  • mypy … 静的型チェックを行う。

完了すると Pipfile にパッケージ情報が追記され、インストール済みのパッケージ情報が書かれたファイル Pipfile.lock が作成される。この時点での Pipfile の内容は以下の通り。

Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]
black = "*"
flake8 = "*"
pyproject-flake8 = "*"
isort = {extras = ["pyproject"], version = "*"}
mypy = "*"

[requires]
python_version = "3.9"

そしたらインストールした開発用パッケージの設定ファイルを作る。プロジェクトフォルダ内にファイル pyproject.toml を作成する。

pyproject.toml
[tool.black]
line-length = 120
exclude = '''
(
    .mypy_cache
    | .pytest_cache
    | .venv
)
'''

[tool.flake8]
ignore = "E203,W503,W504"
max-line-length = 150
exclude = "tests/*"
max-complexity = 10

[tool.isort]
profile = "black"

ここまでのプロジェクトフォルダの内容は以下の通り。

 /
  +-- .venv/
  |    +-- Lib/
  |    |    +-- site-packages/
  |    |         +-- (各パッケージ)
  |    |
  |    +-- Scripts/
  |    |    +-- (コマンドで使用可能なバイナリ)
  |    |
  |    +-- (その他)
  |
  +-- Pipfile
  +-- Pipfile.lock
  +-- pyproject.toml

手順4. VSCodeの設定

プロジェクトフォルダ内にフォルダ .vscode を作成し、その中にファイル settings.json を作成する。以下の通りにVSCodeの設定を記載する。

.vscode/settings.json
{
  // PowerShellの実行ポリシーを緩めて仮想環境の起動スクリプトを実行できるようにする
  "terminal.integrated.env.windows": {
    "PSExecutionPolicyPreference": "RemoteSigned"
  },
  // ターミナル起動時に仮想環境も起動する (blackなどパッケージのコマンドを使えるようになります)
  "python.terminal.activateEnvInCurrentTerminal": true,
  // デフォルトのPythonインタープリターを仮想環境のものにする
  "python.defaultInterpreterPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe",
  // 構文チェックを行うようにする
  "python.linting.enabled": true,
  // 保存時に構文チェックを行う
  "python.linting.lintOnSave": true,
  // 構文チェックをpylintで行わないようにする (※規定値がtrueなため)
  "python.linting.pylintEnabled": false,
  // 構文チェックをflake8で行うようにする
  "python.linting.flake8Enabled": true,
  // flake8のパス (※pyproject-flake8を導入している場合はpflake8で上書きする必要があるため)
  "python.linting.flake8Path": "${workspaceFolder}\\.venv\\Scripts\\pflake8.exe",
  // mypyを有効化する
  "python.linting.mypyEnabled": true,
  // フォーマットをblackで行うようにする
  "python.formatting.provider": "black",
  // pythonファイルの設定
  "[python]": {
    // 保存時にimport文のソートなどを行う
    "editor.codeActionsOnSave": {
      "source.organizeImports": true
    },
    // 保存時にフォーマットを行う
    "editor.formatOnSave": true
  }
}

保存したら、一旦VSCodeを終了してもう一度起動する。

その後、ターミナルを開くと ./.venv/Scripts/Activate.ps1 が実行されており、エラーが表示されていなければOK。

また、エディタで適当な .py ファイルを開いて右下を確認すると Python 3.9.10 ('.venv': pipenv) と表示されているはず。これで仮想環境のPythonインタープリターが使用されている。

手順5. .gitignoreの設定

プロジェクトフォルダ内にファイル .gitignore を作成し、内容は以下の通りにする。

.gitignore
/.venv
/.mypy_cache
/**/__pycache__

これでプロジェクトフォルダは作成完了。ここまでの内容は以下の通り。

 /
  +-- .venv/
  |    +-- Lib/
  |    |    +-- site-packages/
  |    |         +-- (各パッケージ)
  |    |
  |    +-- Scripts/
  |    |    +-- (コマンドで使用可能なバイナリ)
  |    |
  |    +-- (その他)
  |
  +-- .vscode/
  |    +-- settings.json
  |
  +-- .gitignore
  +-- Pipfile
  +-- Pipfile.lock
  +-- pyproject.toml

動作確認

プロジェクトフォルダ直下にフォルダ src を作成し、以下のソースコードを作成する。

src/main.py
from sub2 import func3
from sub1 import func2
from datetime import datetime

def func1(arg1: str) -> str:
    return func3(func2(arg1)) + "!"

def get_second() -> int:
    return datetime.now().second

print(func1("xyz"))
print(get_second())
src/sub1.py
def func2(arg1: str) -> str:
    return arg1 + "?"
src/sub2.py
def func3(arg1: str) -> str:
    return arg1 + "*"

VSCodeでファイル src/main.py を開いて保存すると、フォーマッターと import のソートが実行されるはず。

保存後の src/main.py の内容は以下の通り。

src/main.py
from datetime import datetime

from sub1 import func2
from sub2 import func3


def func1(arg1: str) -> str:
    return func3(func2(arg1)) + "!"


def get_second() -> int:
    return datetime.now().second


print(func1("xyz"))
print(get_second())

以上。

参考にさせていただいた記事

Pipenvを使ったPython開発まとめ - Qiita

Windows + Python + PipEnv + Visual Studio Code でPython開発環境 - Qiita

Blackできれいに自動整形!flake8とBlack導入と実行 - Qiita

もうPythonの細かい書き方で議論しない。blackで自動フォーマットしよう - Make組ブログ

2021年Python開発リンター導入のベストプラクティス

Pythonの主要なLint(pep8, pylint, flake8)の設定方法まとめ - Qiita

その設定、pyproject.tomlに全部書けます - Gunosyデータ分析ブログ

flake8の設定をpyproject.tomlに統合する - Qiita

VSCode で Activate 時に「このシステムではスクリプトの実行が無効になっているため、ファイルxxを読み込むことができません」とエラーが表示される時の対処法 | まにゅまるスクリプト。

この記事に何かあればこちらまで (非公開)