📘 hkob-astro-notion-blog

これまではてなブログにて情報発信をしていましたが、令和5年3月22日より、こちらでの情報発信を始めました。2019年以前の古い記事は過去の Middleman 時代のものなので、情報が古いです。記録のためだけに残しています。

hkob_pyimage パッケージの作成と読み込み - Rubyist の Python 学習記録(4)

💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。
パッケージの作成

今回作成するパッケージの名前は hkob_pyimage という名前した.Git で管理する手前,python であることがわかる名前にした.Python のファイルは全て,ホーム直下に python3 というフォルダを作成し,その下で様々な処理をすることにした.これまで作成してきた画像処理クラスを参考に,作成するクラスは MonoImage と ColorImage という二つのクラスにすることにした.まずは,MonoImage を作成してみる.

  • python3/hkob_pyimage フォルダを作成する.
    mkdir -p $HOME/python3/hkob_pyimage; cd $HOME/python3/hkob_pyimage
  • $HOME/python3 フォルダ以下のファイルを import できるように PYTHONPATH を設定する.fish の場合には,.config/fish/config.fish に以下のように記述する.
    # Python
    set -x PYTHONPATH $HOME/python3 $PYTHONPATH
  • tests フォルダを作成する.
    mkdir -p tests
  • パッケージを import する時に実行される __init__.py を作成しておく.ここでは,numpy パッケージと MonoImage クラスを import するように記述しておく.
    import numpy as np
    from .mono_image import MonoImage
テストの設定
  • テストは nose2 を利用するので,pip3 でインストールする.
    $ pip3 install nose2
    Collecting nose2
      Downloading https://files.pythonhosted.org/packages/1b/c5/d5fcd60f5bf8af1e320fde832d7965933581a9b21b0d1b29bbe2208f4403/nose2-0.8.0.tar.gz (142kB)
        100% |████████████████████████████████| 143kB 4.9MB/s
    Requirement already satisfied: six>=1.7 in /usr/local/lib/python3.7/site-packages (from nose2) (1.12.0)
    Collecting coverage>=4.4.1 (from nose2)
      Downloading https://files.pythonhosted.org/packages/be/88/7e5e548329eda1f003b3ff34e57ba6b2b1f8b8983043e99a0ecf58ae0a06/coverage-4.5.2-cp37-cp37m-macosx_10_13_x86_64.whl (180kB)
        100% |████████████████████████████████| 184kB 7.9MB/s
    Building wheels for collected packages: nose2
      Running setup.py bdist_wheel for nose2 ... done
      Stored in directory: /Users/hkob/Library/Caches/pip/wheels/ad/03/66/03584cefa1811dc9bd20060c5db0ba2e6daaee8c91c65df4e5
    Successfully built nose2
    Installing collected packages: coverage, nose2
    Successfully installed coverage-4.5.2 nose2-0.8.0
  • nose2.cfg をこのディレクトリに作成する.
    [unittest]
    plugins = nose2.plugins.layers
  • システムにインストールしていた chokidar-cli でテスト及び実装のウオッチを行う. 参考: chokidar-cliのファイル更新監視が速い
    $ chokidar "**/*.py" -c 'nose2 -v'
    Watching "**/*.py" ..
tests/test_mono_image.py の記述
  • tests/test_mono_image.py に MonoImage の import を記述する.
    from nose2.tools import such
    from hkob_pyimage import MonoImage
  • 保存すると先ほどの chokidar の画面にテスト結果が表示される.mono_image module がないと言われている.
    add:tests/test_mono_image.py
    test_mono_image (nose2.loader.ModuleImportFailure) ... ERROR
    
    ======================================================================
    ERROR: test_mono_image (nose2.loader.ModuleImportFailure)
    ----------------------------------------------------------------------
    ImportError: Failed to import test module: test_mono_image
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/site-packages/nose2/plugins/loader/discovery.py", line 201, in _find_tests_in_file
        module = util.module_from_name(module_name)
      File "/usr/local/lib/python3.7/site-packages/nose2/util.py", line 77, in module_from_name
        __import__(name)
      File "/Users/hkob/python3/hkob_pyimage/tests/test_mono_image.py", line 2, in <module>
        from hkob_pyimage import MonoImage
      File "/Users/hkob/python3/hkob_pyimage/__init__.py", line 2, in <module>
        from .mono_image import MonoImage
    ModuleNotFoundError: No module named 'hkob_pyimage.mono_image'
    
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    FAILED (errors=1)
  • mono_image.py に MonoImage class の記述のみを行う.
    import numpy as np
    
    class MonoImage:
        pass
  • 保存するとテスト結果が更新される.MonoImage が用意されたので,エラーがなくなった.まだテストは書いていないので,0 tests であるが,MonoImage の import までは確認できた.
    add:mono_image.py
    
    ----------------------------------------------------------------------
    Ran 0 tests in 0.000s
    
    OK

長くなったので今日はここまで.