mac に Python 環境構築

2017/02/01   #Python 
このエントリーをはてなブックマークに追加

前提

  • macOS
  • python3 のみでいい

とりあえず最近の Python 開発環境について調査

  • よく記事がある pyenvpyenv-virtualenv は python2 にも対応している
    • virtualenvpyenv-virtualenv は別物
    • pyenv は python のバージョン切り替えツール、システムのバイナリ使う
    • virtualenv というのはディレクトリ単位で python 仮想環境のセットをつくれるツール
    • pyenv-virtualenv は pyenv の管理単位をバージョン番号じゃなく任意の文字列にできるツール
  • virtualenv の後継で python3 のみ対応のが venv
    • いろいろツールあるけど python3 だけ使うなら venv だけ入れればよさげ

参考:

というわけで、
venvを使ったmacOSのPython開発環境2016 - Qiita
に沿って環境構築した。

作業ログ

$ brew install python3

:
Pip, setuptools, and wheel have been installed. To update them
  pip3 install --upgrade pip setuptools wheel

You can install Python packages with
  pip3 install <package>

They will install into the site-package directory
  /usr/local/lib/python3.6/site-packages

See: http://docs.brew.sh/Homebrew-and-Python.html
==> Summary
🍺  /usr/local/Cellar/python3/3.6.0: 7,952 files, 109.7M, built in 2 minutes 11 seconds

言われるがまま upgrade する。

$ pip3 install --upgrade pip setuptools wheel

lint だけはグローバルに pip3 する。
flake8 というのが最強らしいのでそれを入れる

$ pip3 install flake8

参考: vim で python 開発するとき pyflakes + PEP8 = flake8 が便利 - 憧れ駆動開発

venv で仮想環境をつくる。

$ python3 -m venv dirname
$ source dirname/bin/activate
(dirname) $ python --version
Python 3.6.0

プロンプトの先頭に環境名が出るようになったし、
python3 じゃなくて python でも 3.6.0 が出るようになったので成功。

flask を入れる。

$ source dirname/bin/activate
(dirname) $ pip install flask
(dirname) $ pip freeze
click==6.7
Flask==0.12
itsdangerous==0.24
Jinja2==2.9.5
MarkupSafe==0.23
Werkzeug==0.11.15

トラブルシューティング

flask アプリ起動時に locale がどうのこうの言われる

どうやら環境変数としてロケール情報が必要な模様。

$ FLASK_APP=run.py FLASK_DEBUG=1 flask run
Traceback (most recent call last):
  File "/path/to/flaskapp/venv/bin/flask", line 11, in <module>
    sys.exit(main())
  File "/path/to/flaskapp/venv/lib/python3.6/site-packages/flask/cli.py", line 513, in main
    cli.main(args=args, prog_name=name)
  File "/path/to/flaskapp/venv/lib/python3.6/site-packages/flask/cli.py", line 380, in main
    return AppGroup.main(self, *args, **kwargs)
  File "/path/to/flaskapp/venv/lib/python3.6/site-packages/click/core.py", line 676, in main
    _verify_python3_env()
  File "/path/to/flaskapp/venv/lib/python3.6/site-packages/click/_unicodefun.py", line 118, in _verify_python3_env
    'for mitigation steps.' + extra)
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment.  Consult http://click.pocoo.org/python3/for mitigation steps.

This system lists a couple of UTF-8 supporting locales that
you can pick from.  The following suitable locales where
discovered: af_ZA.UTF-8, am_ET.UTF-8, be_BY.UTF-8, bg_BG.UTF-8, ca_ES.UTF-8, cs_CZ.UTF-8, da_DK.UTF-8, de_AT.UTF-8, de_CH.UTF-8, de_DE.UTF-8, el_GR.UTF-8, en_AU.UTF-8, en_CA.UTF-8, en_GB.UTF-8, en_IE.UTF-8, en_NZ.UTF-8, en_US.UTF-8, es_ES.UTF-8, et_EE.UTF-8, eu_ES.UTF-8, fi_FI.UTF-8, fr_BE.UTF-8, fr_CA.UTF-8, fr_CH.UTF-8, fr_FR.UTF-8, he_IL.UTF-8, hr_HR.UTF-8, hu_HU.UTF-8, hy_AM.UTF-8, is_IS.UTF-8, it_CH.UTF-8, it_IT.UTF-8, ja_JP.UTF-8, kk_KZ.UTF-8, ko_KR.UTF-8, lt_LT.UTF-8, nl_BE.UTF-8, nl_NL.UTF-8, no_NO.UTF-8, pl_PL.UTF-8, pt_BR.UTF-8, pt_PT.UTF-8, ro_RO.UTF-8, ru_RU.UTF-8, sk_SK.UTF-8, sl_SI.UTF-8, sr_YU.UTF-8, sv_SE.UTF-8, tr_TR.UTF-8, uk_UA.UTF-8, zh_CN.UTF-8, zh_HK.UTF-8, zh_TW.UTF-8

環境変数を確認してみる。

(venv) $ env | grep LC

何もなし。

環境変数 LC_ALL をセットしてみる。

(venv) $ export LC_ALL=ja_JP.UTF-8

再び起動してみる。

(venv) $ FLASK_APP=run.py FLASK_DEBUG=1 flask run
 * Serving Flask app "run"
 * Forcing debug mode on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 484-657-999

うまくいった。