#目的
表題のような開発環境を構築することと、その環境を移行しやすくする。
#環境
- macOS Sierra
- なんらかの方法でPython3.6インストール済み(
brew install python3
が一番簡単?) - VSCodeの
code
コマンドをインストール済み
#要件
- Python3でしか開発しない
- VSCodeを使いたい
- VSCodeでIntelliSense、Linting、Formattingしてほしい
-
pip
でインストールしたパッケージ一覧を保存して、他の環境で再構築したい - グローバルな
pip
でグローバルな環境を汚したくない
#ツール
という要件を満たすようなツールを作った。
https://gist.github.com/KoheiKanagu/b3ba2bb68d36509b6cee054e077bd415
$ python3 pset.py -h
usage: pset.py [-h] [--init] [-i] [-s] [-j] [-c]
This script deitals : http://qiita.com/KoheiKanagu/items/752c64aeeb154970d22e
optional arguments:
-h, --help show this help message and exit
--init Initialize Python virtual environment
-i, --install Install packages from "requirements.txt"
-s, --sync Sync packages using of pip-compile and pip-sync
-c, --code Open VSCode at virtual environment
##それぞれのargumentsの動き
###--initすると
-
python3 -m venv
を使って、 .env という名前の仮想環境を作る。 - pip-toolsをインストールする
- requirements.inが無ければ作り、pip-toolsと書き込んでおく。
###--installすると
- installすると同ディレクトリに requirements.txt があれば
pip install -r requirements.txt
でパッケージ達をインストールする。
###--syncすると
- requirements.in をpip-compileして、pip-syncする
###--codeすると
-
source .env/bin/activate && code ./
して仮想環境を引き継いだVSCodeを起動する。
#備考
##Formatting
グローバルな環境に autopep8 かなんかをインストールしておけば良い。
後述するLintingのように、formatterは仮想環境の中にあるパッケージなどは見る必要がないので、グローバルにインストールしててもちゃんとFormattingしてくれる。
##Linting
例えば pylint を使うとなると、グローバルにインストールしておいても、仮想環境でインストールしたパッケージ達を見てくれないので、IntelliSenseできない。
そこで、仮想環境に pylint をインストールすれば、仮想環境内でのパッケージ達を見てくれるので、IntelliSenseできる。
jupyterも同様に仮想環境にインストールしたものでないとパッケージ達を見つけられない
##VSCodeの状態
ツールを使うと、
source .env/bin/activate && code ./
という風にVSCodeを起動する。
そのため、VSCodeの端末で pip freeze
などをしてもらうと分かるが、VSCodeは仮想環境を引き継いでいる。
そのため、プログラムを実行する場合にその端末から実行すると、仮想環境で実行される。
また、Code Runner を使っても同じく仮想環境で実行することができる。
###エクスプローラーの表示
VSCodeの画面左のエクスプローラーに .env が出てくるため、その中身が検索に引っかかるし、中にあるhtmlとかcssなどのいろいろなファイルに対してLinterがブチギレるので、以下のように files.exclude
に追記する。
すると無視されてエクスプローラーには表示されないし、Linterも怒らなくなる。
もちろん仮想環境的には問題ない
"files.exclude": {
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true,
"**/.env/**": true
}
##パッケージのインストール
source .env/bin/activate
してからpip install
する。
ただし、pip-compileとpip-syncの利用を想定しているので、requirements.in に必要なパッケージを書いて、python3 pset.py --sync
した方が楽
requirements.in に何も書いてない状態で--syncしてしまうと、pip-syncの機能によってインストール済みのパッケージが全部消えるので注意
##tips
###Python2.7への対応
pyenv などと連携すればできるとは思うが、個人的に2.7は必要ないので試してはいない。
###ディレクトリ名の変更時の注意
こんな ~/MyProject/.env/*
ディレクトリ名内で仮想環境を作った時、 ~/MyProject2/.env/*
という風に名前を変えてしまうと、 source ~/MyProject2/.env/bin/activate
しても仮想環境に移行できなくなる。
その時は .env
を一旦削除して再設定するといい