Windows + VSCode + pipenv でPythonの開発環境を作る
Docker使えない人向け。開発環境というかプロジェクトフォルダ。Pythonのグローバルを汚さないように pipenv
で開発ツールをインストールする。
前提
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_PROJECT
…pipenv
がプロジェクトフォルダ以下に仮想環境を作成するようになる。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-flake8
…flake8
の設定をpyproject.toml
で管理できるようにする。isort[pyproject]
… PEP8準拠でimport
文の順序を修正する (isort
のpyproject.toml
対応版)。mypy
… 静的型チェックを行う。
完了すると Pipfile
にパッケージ情報が追記され、インストール済みのパッケージ情報が書かれたファイル Pipfile.lock
が作成される。この時点での 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
を作成する。
[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の設定を記載する。
{
// 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
を作成し、内容は以下の通りにする。
/.venv
/.mypy_cache
/**/__pycache__
これでプロジェクトフォルダは作成完了。ここまでの内容は以下の通り。
/
+-- .venv/
| +-- Lib/
| | +-- site-packages/
| | +-- (各パッケージ)
| |
| +-- Scripts/
| | +-- (コマンドで使用可能なバイナリ)
| |
| +-- (その他)
|
+-- .vscode/
| +-- settings.json
|
+-- .gitignore
+-- Pipfile
+-- Pipfile.lock
+-- pyproject.toml
動作確認
プロジェクトフォルダ直下にフォルダ src
を作成し、以下のソースコードを作成する。
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())
def func2(arg1: str) -> str:
return arg1 + "?"
def func3(arg1: str) -> str:
return arg1 + "*"
VSCodeでファイル src/main.py
を開いて保存すると、フォーマッターと import
のソートが実行されるはず。
保存後の 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())
以上。
参考にさせていただいた記事
Windows + Python + PipEnv + Visual Studio Code でPython開発環境 - Qiita
Blackできれいに自動整形!flake8とBlack導入と実行 - Qiita
もうPythonの細かい書き方で議論しない。blackで自動フォーマットしよう - Make組ブログ
Pythonの主要なLint(pep8, pylint, flake8)の設定方法まとめ - Qiita
その設定、pyproject.tomlに全部書けます - Gunosyデータ分析ブログ
flake8の設定をpyproject.tomlに統合する - Qiita
VSCode で Activate 時に「このシステムではスクリプトの実行が無効になっているため、ファイルxxを読み込むことができません」とエラーが表示される時の対処法 | まにゅまるスクリプト。