いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。最近Go言語勉強中。

Pythonメモ-104 (GithubでTravis-CIを設定)(Python 3.7を使用, pipでwxPythonをインストール)

概要

すぐ忘れてしまいそうなので、自分用にメモ。

自分用のサンプルリポジトリに Travis-CI を導入しようとしていろいろハマったので。。。

Travis CI のサインアップ

travis-ci.com

なにはともあれ、サインアップしておかないと使えない。github アカウントで サインアップできます。

ログインしたら、対象となるリポジトリにフックを設定してもらいます。

追記:どうも最近は travis-ci.comの方でpublicもprivateも管理出来るようになってるみたいですね。私は travis-ci.org です。。

blog.travis-ci.com

travis-ci.comtravis-ci.org の違いについてはここを参考にしました。

devops.stackexchange.com

travisの設定ファイル作る

YAML形式で、.travis.yml というファイルを作ります。

今回対象とするリポジトリは python 3.7 を対象なので、ここでちょっと注意が必要です。

そのまま

language: python
python:
  - "3.7"

ってすると、エラーになります。python 3.7 の環境でやりたい場合は

dist: xenial
language: python
python:
  - "3.7"

ってしないといけない。

最終的に .travis.yml は私の場合以下のようにしました。

# ------------------------------------------------------
# Travis-CI Setting file.
#
# REFENRECES:: http://bit.ly/2Hs0r1H
# ------------------------------------------------------
dist: xenial
language: python
python:
  - "3.7"
install:
  - pip install -r requirements_travis.txt
script:
  - pytest

wxPython が pip で入らない。。

んで、無事環境できたーってなって、プルリクとかを上げてみて、様子を見ているとエラーになってました・・・。

原因は、wxPython がちゃんと pip で入ってくれてなくてエラーになっている。

情報を集めてみると、どうも

wxPython の サイトに 各ディストリ用に ビルド済みバイナリ があるのでそれを指定したら入る

ってところにたどり着きました。

以下にあります。

extras.wxpython.org

この下に GTK のバージョン毎のディストリ毎にディレクトリがあります。

で、travis 用の requirements ファイルをこうしました。

#########################################
# try-python requirements file (CI Environment)
# https://pip.pypa.io/en/stable/reference/pip_install/#example-requirements-file
#########################################
#---------------------------------------
# Runtime
#---------------------------------------
-r requirements.txt

#---------------------------------------
# Extra links
#---------------------------------------
-f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04/

#---------------------------------------
# Travis-CI
#---------------------------------------
wxPython; sys_platform == 'linux'
pytest

.travis.ymlxenial を指定しているので、バージョンは 16.04 で。

最初に読み込んでいる、requirements.txt の方に wxPython の行はあるのですが

wxpython; sys_platform != 'linux'

って形で一旦無効化しておいて、travis用のrequirements側でリンク設定と install 行を設定。

なんか、これでうまくいったので、とりあえず私の環境ではオッケイ。

今回の設定は、以下のリポジトリで行いました。

github.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

Pythonメモ-103 (round関数の丸め戦略)(python3から変更, 最近接偶数丸め, round ties to even)

概要

知らなかったので忘れないうちにメモメモ。組み込み関数 round() の丸め方が python3 から変更されていたのですね。

docs.python.org

stackoverflow.com

最近接偶数丸めに変更となっています。

ja.wikipedia.org

python2 の環境が今無いので試していませんが、たしか前は普通の四捨五入だったような記憶がします。

なので、頭が四捨五入の状態で round(2.5) の結果を予想すると 3 なのに

Python 3.7.2 (default, Feb 12 2019, 08:16:38) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: round(2.5)                                                                                                                          
Out[1]: 2

って出て焦ります(ました

丸める対象の値が、ど真ん中(tie)の場合に最近接偶数に丸めるという戦略なので、確かに 2 になりますね。

サンプル

"""
組み込み関数 round() のサンプルです.

python3 から round の丸め方について変更されているので、そのサンプルです。

REFERENCERS:: http://bit.ly/2H4CBZT
              http://bit.ly/2H69SUB
              http://bit.ly/2H4CE81
              http://bit.ly/2GZBz12
"""
from trypython.common.commoncls import SampleBase
from trypython.common.commonfunc import pr


class Sample(SampleBase):
    def exec(self):
        # --------------------------------------------------------------------
        # 組み込み関数 round() は、Python3 にて丸め方が変更となっている.
        # Python3 からは
        #   「最近接偶数への丸め」
        #      - round half to even
        #      - round ties to even
        # に変わった。
        #
        # これは、丸め対象の値が tie つまり、ど真ん中の場合に
        # 最も近い偶数の方に丸めるという方式。
        #
        # なので、round(2.5) は、tie であるので、最近接偶数 が適用されて 2 となる。
        # --------------------------------------------------------------------
        pr('round(0.5)', round(0.5))  # 最近接偶数 は 0
        pr('round(1.5)', round(1.5))  # 最近接偶数 は 2
        pr('round(2.5)', round(2.5))  # 最近接偶数 は 2
        pr('round(3.5)', round(3.5))  # 最近接偶数 は 4
        pr('round(1.3)', round(1.3))  # ど真ん中 (tie) ではないので、通常の丸めで 1
        pr('round(1.7)', round(1.7))  # ど真ん中 (tie) ではないので、通常の丸めで 2


def go():
    obj = Sample()
    obj.exec()


if __name__ == '__main__':
    go()

実行すると以下のようになります。

round(0.5)=0
round(1.5)=2
round(2.5)=2
round(3.5)=4
round(1.3)=1
round(1.7)=2

過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

Pythonメモ-102 (特殊メソッドのリスト)(Special Method, Dunder Method, Double Underscore)

概要

特殊メソッドのリストが記載されているページを忘れないようにメモメモ。たまに見返さないと忘れる・・・。

最も個人的に見やすいのは、やっぱり Dive into Python3

diveintopython3-ja.rdy.jp

公式ドキュメントでは、ライブラリの中の3.データモデル の中に記載があります。

docs.python.org

ついでに、collections.abc モジュールのところにもリストがあります。これもとても有用。

docs.python.org


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com