【Python】Python環境構築

コーディングを行うにあたり,個人的に最も重要と考えているのは「開発環境」です

個人的に必須な項目は,

  • インテリセンス
  • コーディング規約(命名規則など)
  • コード整形
  • 静的解析ツール
  • 単体テストツール

です.

プラスαで,「コンテナ(Docker)環境」などが使用できるとより良いと思います.

昔はEmacsでべた書きしてましたが,
今はまともな開発環境なしに作業する気になりません...

目次

Python環境構築

インストール

Python2はすでにサポート終了しているため,Python3を使うべきです.

パッケージ管理(aptやyum)でインストールする場合,Pythonバージョンを明示しない場合(apt install pythonなど)でバージョンがOSに依存するため注意が必要です.

Python3をインストールする場合は,下記のように明示的なバージョンをインストールをします.


apt install python3 python3-pip

ライブラリ管理には,pip(Python Package Index)を使用します.

ここからどのようなライブラリが用意されているか確認できます.


pip --version
pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)

venvの推奨

venvはPythonの仮想環境です.pipをたくさんすると環境依存が複雑になることを防ぎます.コンテナのようなイメージです.


python3 -m venv <env_name>

<env_name>は任意の名前です.この名前のディレクトリが作成されるため,.を先頭に付けて隠しファイルとすると良いでしょう.

仮想環境の開始


source <env_name>/bin/activate

仮想環境の終了


deactivate

VSCode + venv

デフォルトでは,VSCodeでvenv環境を読み込まないため,インテリセンスがインテリセンスやコード解析がうまく動作しません.

下記の設定をsettings.jsonを記述することで,venv環境を読み込むことが可能になります.


"python.python.defaultInterpreterPath": "/path/to/your_venv",

コーディング規約

Pythonのコーディング規約として,PEP8が最も有名です.

必ずしもPEP8を採用する必要はありませんが,なんらかのコーディング規約は制定すべきです.

一例ですが,PEP8では命名規則は下記のように決められています.

対象命名規則
クラス名CapWords
関数名lower_case
変数名lower_case
定数名UPPER_CASE

コード整形

コード整形には,autopep8を使用します.


python3 -m pip install autopep8

静的解析ツール

Linterとして”Pylint”と”Flake8″が有名です.今回はFlake8を使用する方法を示します.

Flake8の導入

flake8が導入済みかどうかを確認します.


pip show flake8
WARNING: Package(s) not found: flake8

pip install flake8でインストールします.


pip install flake8

導入すると下記のように表示されます.


pip show flake8
Name: flake8
Version: 4.0.1
Summary: the modular source code checker: pep8 pyflakes and co
Home-page: https://github.com/pycqa/flake8
Author: Tarek Ziade
Author-email: tarek@ziade.org
License: MIT
Location: /usr/local/lib/python3.9/dist-packages
Requires: mccabe, pyflakes, pycodestyle
Required-by: 

Flake8の設定ファイル

ファイル名は,.flake8setup.cfgtox.iniとし,プロジェクトのルートディレクトリに置きます.

グローバルな設定にしたい場合は,${HOME}/.config/配下に置くこともできます.

https://flake8.pycqa.org/en/latest/user/configuration.html


[flake8]
ignore=E402, D203
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
max-line-length=100
max-complexity=10

Flake8の使い方

適当にコードを用意します.


def main():
    print("test")

if __name__ == '__main__':
    main()

下記コマンドで,Flake8を適用しコードを解析します.

def main()の後に空行が1行しかないため,2行にしなさい」というエラーになりました.これは,PEP8のコーディング規約に則ったものです.


flake8 main.py 
main.py:4:1: E305 expected 2 blank lines after class or function definition, found 1

命名規則

flake8に命名規則のチェックも追加します.


pip install pep8-naming

naming: 0.13.0が追加されます.これで,命名規則のチェックも可能になります.


flake8 --version
4.0.1 (mccabe: 0.6.1, naming: 0.13.0, pycodestyle: 2.8.0, pyflakes: 2.4.0)
CPython 3.7.3 on Linux

VSCodeでFlake8を適用する

まず,上記のようにpipなどでFlake8をインストールします.

設定画面を開き([左下の歯車]> [Settings])検索ボックスにpython.flakeを入力します.

[Python > Linting: Flake8 Enabled]をチェックするとFlake8が適用されます.

ユニットテスト

コードの保守性を確保するために,単体テスト(ユニットテスト)はほぼ必須です.

ユニットテストに関しては,”unittest”モジュールを使用します.

https://docs.python.org/ja/3/library/unittest.html


import unittest


class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)


if __name__ == '__main__':
    unittest.main()

python3  main.py 
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

python3 main.py -v
test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

ライブラリ管理

Pythonのライブラリは,pipにより管理されています.

マシンを変更した場合,どのライブラリがインストール済みかを確認する必要があります.

現在のpip環境をファイルに読み書きすることが可能です.これにより環境依存を簡単に低減することが出来ます.

・pip環境をファイルに書き出し


pip freeze > requirements.txt

・ファイルからpip環境のインストール


pip install -r requirements.txt
よかったらシェアしてね!
目次