前提
- macOS
- python3 のみでいい
とりあえず最近の Python 開発環境について調査
- よく記事がある
pyenv
やpyenv-virtualenv
は python2 にも対応しているvirtualenv
とpyenv-virtualenv
は別物- pyenv は python のバージョン切り替えツール、システムのバイナリ使う
- virtualenv というのはディレクトリ単位で python 仮想環境のセットをつくれるツール
- pyenv-virtualenv は pyenv の管理単位をバージョン番号じゃなく任意の文字列にできるツール
- virtualenv の後継で python3 のみ対応のが
venv
- いろいろツールあるけど python3 だけ使うなら venv だけ入れればよさげ
参考:
- [Python]pyenvとvirtualenvとpyenv-virtualenv - dackdive’s blog
- Pythonの仮想環境構築 2017.01版 - YAMAGUCHI::weblog
というわけで、
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
うまくいった。