LoginSignup
8
9

More than 5 years have passed since last update.

Python3 + venv + VSCode + macOS な開発環境の構築

Last updated at Posted at 2017-06-05

目的

表題のような開発環境を構築することと、その環境を移行しやすくする。

環境

  • 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 を一旦削除して再設定するといい

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9