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 --versionPython 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 --versionpipenv, version 2022.1.8そしたら更に以下コマンドを実行して、pipenv 用のユーザー環境変数を設定する。
setx PIPENV_VENV_IN_PROJECT 1
setx PIPENV_IGNORE_VIRTUALENVS 1PIPENV_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を読み込むことができません」とエラーが表示される時の対処法 | まにゅまるスクリプト。
キリウ君が読まないノート 