Python2環境からPython3.7 環境に移行する。

（ご指摘に基づき、意味が明快になるようにタイトルを変更しました。）


### Python3.7環境に移行するのが必須の状況だ

- [NumpyがPython2のサポートを終了するらしい](https://plant-raspberrypi3.hatenablog.com/entry/2017/11/17/075432)

- [Windows では2020年を待たずに Python 2.7 が使い物にならなくなっていく](https://methane.hatenablog.jp/entry/mysqlclient-python-no-2)


- Scipy.org [Plan for dropping Python 2.7 support](https://docs.scipy.org/doc/numpy-1.14.1/neps/dropping-python2.7-proposal.html)


- 2018年の記事[Pandas will No Longer Support Python 2 Next Year](https://www.analyticsvidhya.com/blog/2018/04/pandas-will-drop-all-support-for-python-2-next-year/)

- matplotlib [Drop support for python 2 #9404](https://github.com/matplotlib/matplotlib/issues/9404/)


-  Python Packaging Authority[Dropping support for older Python versions](https://packaging.python.org/guides/dropping-older-python-versions/)


- [Python 2 から Python 3 への移植](https://docs.python.org/ja/3/howto/pyporting.html)

- [C拡張と共に乗り切るPython 2→3移行術](https://logmi.jp/tech/articles/315777)
    - この記事ではC拡張モジュールをPython2.7からPython3に移行するための方法が実例をあげて紹介している。
- [ついにMacでPython3がデフォルトに?! - Python2と3のどちらを使えば良い？](https://news.mynavi.jp/article/zeropython-24/)



### scikit-learn [Warning Version 0.20 is the last version of scikit-learn to support Python 2.7 and Python 3.4. Scikit-learn 0.21 will require Python 3.5 or higher. ](https://scikit-learn.org/dev/whats_new.html#version-0-20-0)

### サポート打ち切りに達した(達する)ライブラリ

|library | version | release date | |
|--- | --- | --- | --- |
| numpy  |      | January 1, 2019 | |
| pandas  |      | January 1, 2019 | |
|sckit-learn | 0.21.0 | | |
|sckit-image |  | | numpy を利用しています |
|OpenCV | | | numpy を利用しています |
|matplotlib | | |numpy を利用しています |
|Cython | | | numpy と関連があります |




### venv を使う

python 3.7を使う環境を作る方法の１つはvenvだ。

```
$ python3 -m venv [newenvname]
$ source [newenvname]/bin/activate
$ pip install [package name]
```

- [venv: Python 仮想環境管理](https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e)


### Pathlibを使う

自分たちの書くコードもPython3.7 だけをサポートすることを宣言すると、使うべきライブラリが簡単になる。
os.walk()やglob.glob()を使ったり、os.path.basename()やos.path.splitext()などを使ったりするよりも
はるかに簡潔にコードを書けるようになる。

- https://docs.python.jp/3/library/pathlib.html


- [Python3.4以降ならos.pathはさっさと捨ててpathlibを使うべき](https://qiita.com/tag1216/items/29bf3b9c3c4b563ff0fe)

- [Pythonでのファイル操作をosとpathlibで比較](https://qiita.com/hasoya/items/9bfbcc973b131a7f69dc)

glob.glob()の場合の欠点はglobですべてを探索し尽くさないと、次の処理に移行しないというものである。


### 関数アノテーションと型ヒント

Python3.7を前提とすれば、関数アノテーションと型ヒントを使えるようになる。コードの可読性が、はるかに向上する。人によって異なるドキュメンテーションコメントではなく、python3.7 の文法の中で用いられている関数アノテーションと型ヒントを使えば、品質の安定につながる。
javadoc スタイルのドキュメンテーションコメントを書いて、その中に@param[in] と書いてもコンパイラには何の役にも立たない。けれどもC++のパラメータにconst属性をつけると品質の向上につながる。それと同じようなものだ。


- [Pythonの関数アノテーションと型ヒント、typingモジュール](https://note.nkmk.me/python-function-annotations-typing/)

- [Pythonではじまる、型のある世界](https://qiita.com/icoxfog417/items/c17eb042f4735b7924a3)

- [Python と型アノテーション ](https://www.slideshare.net/quintia/python-76118249)

###`@dataclass` を使う
https://docs.python.org/ja/3.7/library/dataclasses.html

[Python3.7からは「Data Classes」がクラス定義のスタンダードになるかもしれない](https://qiita.com/tag1216/items/13b032348c893667862a)

### PyCharm Community Edition を使う

https://www.jetbrains.com/pycharm/download/#section=linux

- [最強のPython統合開発環境PyCharm](https://qiita.com/yamionp/items/f88d50da8d6b548fc44c)
- [PyCharm の便利な使い方](https://pythondatascience.plavox.info/python%e3%81%ae%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83/pycharm%e3%81%ae%e4%be%bf%e5%88%a9%e3%81%aa%e4%bd%bf%e3%81%84%e6%96%b9)


### click を使う
https://blog.amedama.jp/entry/2015/10/14/232045
https://qiita.com/shiimaxx/items/654763a9d7481f3c0188

---

### Python3.7に引っ越す前に
Python2.7のうちに

```
from __future__ import print_function
```

してprintを関数にしておこう。

3/2 == 1
を期待したいのなら

3//2 == 1
を期待するように、手元のコードを書きなおしておこう。



[2系を使いながらも3系のノリでコーディングする方法!!](https://kiwamiden.com/about-the-__future__-module)

docs.python.jp [Python 2 から Python 3 への移植](https://docs.python.jp/3/howto/pyporting.html)

[Python 3 で has_key 相当のことをする](https://sscrisk.hatenablog.com/entry/20100502/1272784776)