はじめに
Python案件に入ることになった。
PHPエンジニアとして数年やってきたけど、Pythonはほぼ未経験。
とりあえず環境構築からやってみたので、詰まったところを中心にメモしておく。同じようにPHPからPythonに移る人の参考になれば。
環境構築 — まずpyenvを入れた
PHPだとphpenvやbrewで複数バージョン管理するのが定番だけど、Pythonも同じようにバージョン管理ツールがある。
よく名前が挙がるのが pyenv。phpenvとほぼ同じ概念なので、ここは比較的すんなり入れた。
# Homebrewで入れる(Mac)
brew install pyenv
# .zshrcに追記
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# バージョン確認
pyenv install --list | grep "3\."
# 最新安定版を入れる
pyenv install 3.12.3
# グローバルに設定
pyenv global 3.12.3
python --version
# Python 3.12.3
ここまでは問題なかった。
最初の壁 — venvって何?
PHPだとcomposerが依存関係をvendor/に突っ込んでくれる。プロジェクトごとにcomposer.jsonがあれば管理できる。
Pythonもpipでパッケージを入れるんだけど、何も考えずにpip installするとグローバルに入る。
# これをやると全プロジェクトに影響する(最初やらかした)
pip install requests
PHPのcomposerはデフォルトでプロジェクトローカルに入るのに、pipはそうじゃないのか……と最初混乱した。
そこで出てくるのが venv(仮想環境)。
# プロジェクトルートで
python -m venv .venv
# 仮想環境を有効化(Mac/Linux)
source .venv/bin/activate
# Windowsの場合
.venv\Scripts\activate
# 有効化されるとプロンプトが変わる
# (.venv) $
有効化した状態でpip installすれば、.venv/の中だけにパッケージが入る。
pip install requests
# プロジェクトの依存を記録(composer.jsonのrequireに相当)
pip freeze > requirements.txt
# requirements.txt
certifi==2026.4.9
charset-normalizer==3.3.2
idna==3.7
requests==2.31.0
urllib3==2.2.1
他の環境に再現するときは:
pip install -r requirements.txt
composerとpipの対応関係
整理するとこんな感じ。
| PHP(composer) | Python(pip + venv) |
|---|---|
composer.json |
requirements.txt |
vendor/ |
.venv/ |
composer install |
pip install -r requirements.txt |
composer require foo |
pip install foo |
composer.lock |
requirements.txt(freezeで固定) |
厳密にはrequirements.txtはlockファイルではないので、再現性をちゃんと担保したいなら Poetry を使うのが今どきの流儀らしい。とりあえず今はpip + venvで覚えることにした。
もう一つの壁 — python2とpython3問題
インターネットで調べると古い記事だとpython2のコードが出てくる。
# python2
print "Hello"
# python3
print("Hello")
pythonコマンドがpython2を指している環境も残っているので、python3やpython --versionで確認する習慣をつけた。pyenvで3系を入れていれば基本大丈夫だけど、一応。
.venvをGitignoreに追加するのを忘れない
地味に大事。
# .gitignore
.venv/
__pycache__/
*.pyc
.env
__pycache__はPythonが自動生成するキャッシュフォルダ。PHPだとあまり意識しないけど、Pythonだと普通に出てくる。これもignoreしておく。
使ったエディタ
VS Codeに Pylance と Ruff を入れた。
- Pylance — 型チェック・補完。PHPIntelliSenseの感覚で使える
- Ruff — リンター+フォーマッター。めちゃくちゃ速い。PHPのPHP CS Fixerに相当
// settings.json
{
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
}
}
今回やったこと まとめ
- pyenvでPythonのバージョン管理
- venvでプロジェクトごとに仮想環境を作る
- pipで依存パッケージを管理、
requirements.txtに記録する - VS Code + Pylance + Ruffで開発環境を整えた
環境構築だけで結構な分量になってしまったが、ここを曖昧にすると後でパッケージ関連のトラブルで詰まるので丁寧にやってよかったと思う。
次は変数・型・スコープあたりのPHPとの違いを整理していく予定。