Skip to content

Python

2to3 で Python2 コードを Python3 コードへ変換する

2to3 を使うと Python2 ベースのコードを Python3 へ変換することが出来ます。 とは言え、2to3 も万能なわけではありませんので、2to3 が修正してくれなかった部分は手動で修正していく必要があります。 2to3 は pip でインストールすることが出来ます。

1
python3 -m pip install 2to3

DockerHub へイメージを登録する

DockerHub にイメージをアップロードするには GitHub と連携させるのが簡単です。 ですが、Changes to Docker Hub Autobuilds で下記のように書かれている通り、2021 年 6 月 18 日から DockerHub の無料アカウントでは GitHub 連携が出来なくなっています。

As many of you are aware, it has been a difficult period for companies offering free cloud compute [1]. Unfortunately, Docker’s Autobuild service has been targeted by the same bad actors, so today we are disappointed to announce that we will be discontinuing Autobuilds on the free tier starting from June 18, 2021.

GitBucket 4.40.0 の Docker コンテナを作成する

GitBucket 4.40.0 がリリースされていました。 4.40.0 - 22 Oct 2023 付の ChangeLog によると変更箇所は下記だそうです。

4.40.0 - 22 Oct 2023

  • Configurable default branch name
  • Support custom fields of issues and pull requests in search condition
  • Create pull request from default branch of forked repositories
  • News feed shows activities of all visible repositories
  • Drop Java 8 support
  • Improve git push performance

GitBucket のコンテナイメージは gitbucket/gitbucket で提供されているようです。 ですが、実際に起動してみるとバージョン 4.38.4 (2 Nov 2022) とやや古いように見えました。 その為、今回は最新のバージョン 4.40.0 をコンテナイメージ化してみます。 尚、作成したコンテナは DockerHub 内の下記 URL で公開しています。

hyperfine でコマンドのベンチマークを実行する

hyperfine を使うとコマンドのベンチマークを実行出来ます。 類似のツールに benchpoop があります。 poop は高機能なようですが、私の環境では動作させることが出来ませんでした。 今回は hyperfine を起動する手順まで、メモしておきます。 今回は Ubuntu 24.04 環境でテストしました。

CiscoConfParse 初期化時の INFO 表示を抑制する

以前に CiscoConfParse でインターフェイス情報を抽出する というメモを書きました。 CiscoConfParse は「Cisco 機器のコンフィグを構造的に扱うことが出来る」便利なライブラリです。 但し、ネット上にある古いサンプルの書き方では実行時に INFO が表示されることがあります。 今回はそれを抑制する方法をメモしておきます。

Python でデコレータを利用する

Python のデコレータ (decorator) は 公式ドキュメントの用語集 で以下のように定義されています。

Note

(デコレータ) 別の関数を返す関数で、通常、 @wrapper 構文で関数変換として適用されます。デコレータの一般的な利用例は、 classmethod() と staticmethod() です。

デコレータの文法はシンタックスシュガーです。次の2つの関数定義は意味的に同じものです:

def f(arg):
    ...
f = staticmethod(f)

@staticmethod
def f(arg):
    ...

同じ概念がクラスにも存在しますが、あまり使われません。デコレータについて詳しくは、 関数定義 および クラス定義 のドキュメントを参照してください。

つまり、デコレータの実態は「関数を受け取り、関数を返す関数」と言えます。 もう少し分かりやすく噛み砕くと「関数の処理内容を変更せず、関数に機能を追加出来る仕組み」とも言えます。