NumPy:【versionコマンド】を詳しく説明


サマリ

  • np.version
    • NumPyのバージョンが確認できる
    • .full_version、.short_version、.version、.git_revisionの4つのメソッドがある
  • バージョン情報表示元のプログラムを説明
    • version.py
    • _version.py
    • get_versions()

前提

  • 特になし

サンプルコード

各種バージョン取得コマンド実行例

import numpy as np
print(np.version.full_version)
print(np.version.short_version)
print(np.version.version)
print(np.version.git_revision)
1.21.2
1.21.2
1.21.2
2fe48d2d98a85c8ea3f3d5caffd952ea69e99335
  • 表示結果は上記の通り
  • 少し考察した
    • 環境ごとにバージョンは異なる
    • 現在のバージョンを何かから読み取って表示している
    • Pythonの動作を次項で確認する

動作の仕組みを調べてみた

指定できる引数は何がある?

引数なしで実行したら…

np.version
<module 'numpy.version' from '/home/futa/miniconda3/lib/python3.9/site-packages/numpy/version.py'>
  • /home/futa/miniconda3/lib/python3.9/site-packages/numpy/version.py
    • version.pyにあるらしい
    • 直接見てみよう

version.pyを直接開く

cat /home/futa/miniconda3/lib/python3.9/site-packages/numpy/version.py

#Windowsならファイル名を指定して実行
#c:\users\futa4\anaconda3\lib\site-packages\numpy\version.py
from ._version import get_versions

__ALL__ = ['version', 'full_version', 'git_revision', 'release']

vinfo = get_versions()
version: str = vinfo["version"]
full_version: str = vinfo['version']
git_revision: str = vinfo['full-revisionid']
release = 'dev0' not in version and '+' not in version
short_version: str = vinfo['version'].split("+")[0]

del get_versions, vinfo
###windowsのipythonの結果###
# THIS FILE IS GENERATED FROM NUMPY SETUP.PY
#
# To compare versions robustly, use `numpy.lib.NumpyVersion`
short_version = '1.19.5'
version = '1.19.5'
full_version = '1.19.5'
git_revision = '8f4b73a0d04f7bebb06a154b43e5ef5b5980052f'
release = True

if not release:
    version = full_version
  • 使える引数はこの4つみたい
    • version
    • full_version
    • git_revision
    • short_version
  • ここ気になるな…
    • from ._version import get_versions
    • 調べよう

get_versionsを調べたら

概要

  • _version.pyで定義されている関数(def)
  • version.pyで読み込んで使用されている
    • from ._version import get_versions
    • vinfo = get_versions()

_version.pyを直接開く

cat /home/futa/miniconda3/lib/python3.9/site-packages/numpy/_version.py
# This file was generated by 'versioneer.py' (0.19) from
# revision-control system data, or from the parent directory name of an
# unpacked source archive. Distribution tarballs contain a pre-generated copy
# of this file.

import json

version_json = '''
{
 "date": "2021-08-15T12:15:47-0600",
 "dirty": false,
 "error": null,
 "full-revisionid": "2fe48d2d98a85c8ea3f3d5caffd952ea69e99335",
 "version": "1.21.2"
}
'''  # END VERSION_JSON


def get_versions():
    return json.loads(version_json)

ipythonでget_versionsをimportしたログ

import sys, os
sys.path.append('/home/futa/miniconda3/lib/python3.9/site-packages/numpy/')
from _version import get_versions
vinfo = get_versions()
#タイプ確認
print(type(vinfo))
#内容確認
print(vinfo)
#バージョン取り出し
print(vinfo['version'])
#outに出力
vinfo
<class 'dict'>
{'date': '2021-08-15T12:15:47-0600', 'dirty': False, 'error': None, 'full-revisionid': '2fe48d2d98a85c8ea3f3d5caffd952ea69e99335', 'version': '1.21.2'}
1.21.2
Out[]:
{'date': '2021-08-15T12:15:47-0600',
 'dirty': False,
 'error': None,
 'full-revisionid': '2fe48d2d98a85c8ea3f3d5caffd952ea69e99335',
 'version': '1.21.2'}
  • sys.path.appendでパスに追加
  • vinfoに入力した結果が取得できている


Posted by futa