⇧ これまた歴史ありですが、溶鉱炉とかで液体になった鉄とか相当に高温だと思うんだけど、その熱した金属を掬う容器が溶けないもんなんですね。
溶鉱炉と言えば、
⇧ 名作「ターミネーター2(監督:ジェームズ・キャメロン)」を思い出しますね。
というわけで、今回はPythonについてです。
レッツトライ~。
Python3.5から型の指定できるらしい
Pythonの公式のドキュメントによりますと、
typing
--- 型ヒントのサポート
バージョン 3.5 で追加
注釈
Python ランタイムは、関数や変数の型アノテーションを強制しません。 型アノテーションは、型チェッカー、IDE、linterなどのサードパーティーツールで使われます。
Pythonは、「動的型付け言語」ってポジションなので、
動的型付け(どうてきかたづけ、英: dynamic typing)とは、プログラミング言語で書かれたプログラムにおいて、変数や、サブルーチンの引数や返り値などの値について、その型を、コンパイル時などそのプログラムの実行よりも前にあらかじめ決めるということをせず、実行時の実際の値による、という型システムの性質のことである。
⇧ ってな感じで、プログラミングが実行されて初めて変数などの「型」がハッキリするっていう特徴がありますと。
一方、Javaのような「静的型付け言語」の場合、
静的型付け(せいてきかたづけ、英: static typing)は、プログラミング言語で書かれたプログラムにおいて、変数や、サブルーチンの引数や返り値などの値について、その型が、コンパイル時など、そのプログラムの実行よりも前にあらかじめ決められている、という型システムの性質のことである。
⇧ ってな感じで、プログラミングの実行前に変数などの「型」がハッキリしますと。
「静的型付け言語」の場合、コーディング時に「型」を明示してあげないといけませんと。つまり、変数やメソッドの引数、戻り値などに「型」っていう制限を設ける必要がありますと。
で、そんな「型」の指定をPythonでもできるようになったそうな、ただし、
ってことみたい。
Pythonってどんな型があるんでしたっけ?
そもそも、これまで「型」を指定する必要がなかったPythonなのですが、どんな「型」があるんでしたっけ?gammasoft.jp
⇧ 上記サイト様がまとめてくださっています。
で、公式のドキュメントを見てみても、結構、カオスな感じなんですよね...
整数として、
- 整数(int)
- ブール値(bool)
の2種類っていう分類は衝撃でしたね、確かに「ブール値」もコンピューター上では「0」か「1」って結果になるから「整数」ってことになるのかもしれないんだけど、
ブール値 (bool
)
真偽値の False と True を表します。False
と True
を表す 2 つのオブジェクトのみがブール値オブジェクトです。ブール型は整数型の派生型であり、ほとんどの状況でそれぞれ 0 と 1 のように振る舞いますが、例外として文字列に変換されたときはそれぞれ "False"
および "True"
という文字列が返されます。
https://docs.python.org/ja/3/reference/datamodel.html#the-standard-type-hierarchy
⇧ って「文字列」返しとるやん...
何か、
新たな型 (有理数や、整数を効率的に記憶する配列、など) の追加は、たいてい標準ライブラリを通して提供されますが、将来のバージョンの Python では、型の階層構造にこのような追加がなされるかもしれません。
https://docs.python.org/ja/3/reference/datamodel.html#the-standard-type-hierarchy
⇧「型」が定まって無いっぽいのね...
Pythonの「型」ってのが曖昧な感じになってるので、
⇧ 上記サイト様でも説明がありますが、Pythonの「配列」って「一次元配列」しか作れないんですって。
しかも、部分切り出しの方法の記述が独特で、
⇧ 初見殺しとしか言いようがない...
説明されないと直感的に分かり辛いよね...
「型」指定でコーディングしてみる
Pythonで開発ってなった場合に、
- PyCharm
- Visual Studio Code
のどっちかを使うことが多いのかとは思いますが、今回は、「Visual Studio Code」を使っていこうかと。
というのも、
⇧「Visual Studio Code」の拡張機能で「Pylance」ってものが利用できるようになったみたいなので。
ちなみに、
⇧「Visual Studio Code」でPythonプログラミングを実施するには、
- Pythonのインストール
※必ず「python.org」のものをインストール - Visual Studio Codeのインストール
- Visual Studio Codeの拡張機能(Python関連)のインストール
は最低限、必要らしいので、まだお済でない方は、上記サイト様を参考にインストールしてみてください。
ちなみに、
⇧ Pythonを複数インストールしてる場合は注意が必要ですかね。
あと、
py.exe ランチャーは、インストールされている中で最も新しいバージョンの Python を自動的に選択します。 py -3.7
などのコマンドを使用して特定のバージョンを選択したり、使用できるバージョンを py --list
を使用して確認したりすることもできます。 ただし、py.exe ランチャーが正しく動作するのは、python.org からインストールしたバージョンの Python を使用している場合だけです。Microsoft Store から Python をインストールする場合、py
コマンドは含まれません。 Linux、macOS、WSL、および Microsoft Store バージョンの Python の場合、python3
(または python3.7
) コマンドを使用する必要があります。
⇧ ってな感じで、正しく動かない場合があるので、必ず「python.org」からインストールする必要がありますと。
ちなみに、自分の環境では「py.exe」は上手く動きませんでした...
まぁ、「py.exe」が上手く動かないのは致し方ないということで、Pythonを試すためのディレクトリを作っときますか。
venv
--- 仮想環境の作成
バージョン 3.3 で追加.
venv
モジュールは、軽量な "仮想環境" の作成のサポートを提供します。仮想環境には、仮想環境ごとの site ディレクトリがあり、これはシステムの site ディレクトリから分離させることができます。それぞれの仮想環境には、それ自身に (この仮想環境を作成するのに使ったバイナリのバージョンに合った) Python バイナリがあり、仮想環境ごとの site ディレクトリに独立した Python パッケージ群をインストールできます。
⇧ ってあるんで、適当な場所にディレクトリを作成します。
今回は「C:\Users\[ユーザー名]\Desktop\soft_work\python_work\typeHintingTest」ってディレクトリを作成しました。
そんでは、用意したディレクトリにPythonの仮想環境を作成しましょう。
⇧ Python仮想環境ができました。
Python仮想環境を有効化するには、「[Python仮想環境のディレクトリ]\Scripts」フォルダに配置されてる「アクティベーション」ファイルを実行しますが、
⇧ プラットフォーム毎に、使用するファイルが異なります。
自分の環境は、Windowsなので、
- コマンドプロンプト使う場合
activate.bat - Powershell使う場合
Activate.ps
を使う感じになるかと。
ちなみに、Pythonの標準でないツールを使う場合、
結局のところ、Python での Poetry + pyenv の組み合わせは、Node.js での npm + nodist といったところでしょうか。引き続き自分にあった構成や環境をいろいろと試していきたいと思います。
⇧「Poetry」「pyenv」といったものを導入する感じですかね。
今回は、Python 3.3から標準ライブラリとなった「venv」のみで基本的な環境を準備するで良しとしました。
ここからは、Visual Studio Codeを使っていきます。Visual Studio Codeの拡張機能の「Pylance」もインストールする必要があるので。
Visual Studio Codeを起動して、「拡張機能」のアイコン をクリックし、検索で「pylance」と入力して該当する拡張機能がヒットしたら「インストール」押下で。
インストールされたら、Pythonの仮想環境であるディレクトリを開きます。
「ファイル(F)」>「フォルダーを開く...」で。
そしたらば、適当に「.py」ファイルを作成してみます。
何か再起動を求められたので、「Yes, and reload」で。
はい、エラー。
どうやら、
⇧ 上記サイト様によりますと、初回起動時に発生する問題らしい。「×」で閉じて、Visual Studio Code自体を再起動すればOKらしい。
で、再起動しても駄目でした...
ただ、Visual Studio Codeのバージョンアップしたら、エラー消えました、う~ん謎過ぎる...。
とりあえず、Pythonで型を指定して変数を宣言してみた。
from typing import List list:List[int] = [0,1,2,3,4,5,6,7,8,9] print(list)
で、実行してみる。
エディターの右上にあるアイコンをクリックすれば、「ターミナル」でPythonファイルの内容が実行されるらしい。
実行されました。
せっかくなので、Python仮想環境を有効化して、Pythonのライブラリをインストールしてみたいと思います。
PowerShellを使ってる場合は、「[Python仮想環境のディレクトリ]\Scripts\Activate.ps1」を実施します。
[Python仮想環境のディレクトリ]\Scripts\Activate.ps1
⇧ Python仮想環境が有効化されました。
機械学習のライブラリをインストールしてみます。今回は「scikit-learn」ってライブラリをインストールしたいと思います。
scikit-learn requires:
- Python (>= 3.6)
- NumPy (>= 1.13.3)
- SciPy (>= 0.19.1)
- joblib (>= 0.11)
- threadpoolctl (>= 2.0.0)
⇧ バージョン 0.23だと、上記のライブラリを事前にインストールする必要があるみたいね。
う~ん、「scikit-learn」とかインストールしたら一緒にインストールされるような感じで依存関係を解決してくれれば良い気はするんだけど、そんな気が利いたことは無理みたいなので、個別にインストールしていくしか無さそうね...
⇧ 上記サイト様によりますと、「requirements.txt」にライブラリを記載すれば一括でライブラリをインストールできるらしい。
⇧ pipenvってものを使えば、自動で「requirements.txt」のようなパッケージをリスト化したファイルが作成されるらしい。
今回は、pipで「requirements.txt」を使ってインストールしてみます。
ちなみに、
promptなどの黒い画面に白い文字でプログラムを打つような画面の場合は、
pip ~~~~~
とそのまま打てばいいのですが、SpyderやJupyterの場合はpipの前にビックリマークを付ける必要があります。
!pip -V
【Python導入編④】pip、import、その他プログラムを走らせる方法 | Python機械学習で実験!データ解析
⇧ っていうわけ分からん仕様になってるので、環境によって注意が必要ですかね。
「requirements.txt」をPythonの仮想環境のディレクトリに作成します。
「」に以下のライブラリを記載して保存で。
###### Requirements with Version Specifiers ###### # scikit-learn NumPy >= 1.13.3 SciPy >= 0.19.1 joblib >= 0.11 threadpoolctl >= 2.0.0
そしたらば、「ターミナル」で以下を実施してライブラリをインストール。
pip install -r requirements.txt
⇧ インストールできたみたいなので、「scikit-learn」をインストールで。
pip install -U scikit-learn
⇧ インストールできました。
「[Python仮想環境のディレクトリ]\Lib\site-packages」にインストールされてるみたいです。
で、残念ながら、Visual Studio Codeを使ってる場合は、Pythonの仮想環境のPythonを使うことをVisual Studio Codeの設定で明示してあげないと、Pythonの仮想環境にインストールしたライブラリを読み込むことができないというね。
Visual Studio Codeのエディタ上のアイコンので実施した場合と、「ターミナル」で実行するPythonが異なってることが原因。
これは、以下のコードを実施してみることで確認できます。(Visual Studio Codeのエディタ上のアイコンので実施した場合と、「ターミナル」で実施した場合で結果を比較します。)
import sys print(sys.version) print(sys.path)
⇧ Visual Studio Codeのエディタ上のアイコンので実施するPythonを、Python仮想環境のPythonにしてあげる必要があります。(じゃないと、コーディング時に、[Python仮想環境のディレクトリ]\Lib\site-packagesにインストールしたライブラリ群がimportできない)
そのためには、Python仮想環境のディレクトリにVisual Studio Codeのワークスペースを作ってあげる必要がありますと。
⇧ 自分の過去記事でまとめてましたかね。ただ、1年ぐらい前なのでVisual Studio CodeのGUIが変わってました、っていうかGUIはあんまり変えて欲しくないな...。
現在、venvを使用する場合は、上記settings.jsonのように記入すれば問題ありません。
⇧ 上記サイト様でも「.vscode」を作成するで問題なさそうって仰っているので大丈夫かと。
では、Visual Studio Codeで「ファイル(F)」>「ユーザー設定」>「設定」を選択。(自分の過去記事を確認したら、旧いバージョンのVisual Studio Codeだと「ユーザー設定」でなく「基本設定」になってるっぽい)
「ワークスペース」タブが選択された状態で、「設定(JSON)を開く」のアイコンをクリック。
で、「.vscode/setting.json」に以下のように設定。「${workspaceRoot}」は、Visual Studio Codeで開いたディレクトリまでのパスらしい。(自分の場合は、Python仮想環境のディレクトリである「C:\Users\Toshinobu\Desktop\soft_work\python_work\typeHintingTest」までのパスってことになります。)
{ "files.eol": "\n", "terminal.integrated.env.windows": { "PATH": "${workspaceRoot}\\Scripts;${env:PATH}" }, "python.pythonPath": "${workspaceRoot}\\Scripts\\python.exe" }
そうすると、Visual Studio Codeのエディター上で使用されるPythonについても、Python仮想環境のものに切り替えられたことが、エディターの左下に表示されてるPythonの情報で確認できます。
見事、Python仮想環境にインストールしたライブラリ(「[Python仮想環境のディレクトリ]\Lib\site-packages」にインストールされてます)が、コーディングの際にimportできるようになります。
ただ、何か「numpy」の読み込みでエラーが起きるというね...
何かWindows環境だと、
⇧「numpy 1.19.4」にバグがあるらしい...。
ワテのバージョンは、はい、「1.19.4」でした
以下を実施で解決できるらしい。
pip uninstall numpy pip install numpy==1.19.3
⇧「numpy 1.19.3」にダウングレードしたところ、
エラーなく実行できました。
「scikit-learn」については、
⇧ 公式にいろいろExampleが用意されてるので、試していきたいところですね。
というわけで、相変わらず、Visual Studio CodeでPython使う場合は、何やかんや設定が必要なんだな~、と思う今日この頃です。
Pythonで開発ってなった場合って実際の現場だと、JetBrainsが提供してるPython向けの「統合開発環境(IDE:Integrated Development Environment)」である「PyCharm」とかを使ってるのかな?
モヤモヤ感しか残りませんな...
まぁ、何が言いたいかと言うと、Python有識者の方には、変数とかに型を指定するコーディングを広めていって欲しいですね。
やっぱりね、型があるのと無いのとだとコードの可読性が変わってくると思うし、型の指定がないコードを読むのは辛過ぎるので...
今回はこのへんで。