==================================================== Python をとりあえず動かしてみる ==================================================== Python の入門部分の文書は Python チュートリアル [Etut]_ およびその日本語版 [Jtut]_ を 参考にしています.詳しく調べたい場合は,これらの文書を参考にしてください. 教材としては前述のものを使います. まだ,リポジトリを展開していない人は - Python一回り https://classroom.github.com/a/l-bZ9CRg - 課題用レポジトリ https://classroom.github.com/a/h_4DBr2a を踏んで,資料を自分の github リポジトリを作成し, その自分のリポジトリを `git clone` コマンドを使って自分が作業するフォルダへ取り込んでください. Python プログラムの実行方法 =========================== Python プログラムを動かすには,方法が幾つかあります. 大きく分けると, 1. テキストエディタを使ってプログラムを作成し,コマンドラインで python コマンドに渡す 2. インタープリタ (python, jupyter notebook) を使って,1行づつ書きながら動かしていく 1. のやり方は,今までのプログラミングスタイルと非常によく似ています. コンパイル ( `cc` コマンドや `javac` コマンドを用いる作業) が無いだけです. デバッグも今までどおりファイルを修正するというやり方になります. 新しいのは 2. のやり方です.python のコマンドインタープリタは, 1行づつの *逐次に実行* が可能です.(詳細は後で). 1行うって,ちゃんと動くかどうかを確かめながら実行していけるので, 自分が *間違っているかどうか* をテストしながら実行していける のは非常に利点ですし,なんにせよ楽です. 次では,まず最初に 2. のやり方を行なってから, 1. のやり方をやってみることを考えてみましょう. 最初の一歩 ==================================== コマンドラインインタープリタを使う ---------------------------------- まずは,コマンドラインインタープリタ使って見るところからです. コマンドライン上から python と打ち込むと python インタープリタの プロンプト (`>>>`) が出てきます. .. code-block:: console $ python ここで,いわゆる "Hello World" を表示するという命令を実行してみましょう. print "Hello World" と打ち込んでみてください .. code-block:: pycon :linenos: >>> print("Hello World") Hello World "Hello World" というメッセージがコンソールで実行されるはずです. もう少し例題を打ち込んでみましょう: .. code-block:: pycon :linenos: >>> a = 3 >>> b = 2 * a >>> print(b) 6 >>> type( b ) これは a という変数に 3 を代入し,b に対して a を2倍したものを代入する操作になります. 最後の行は b がどのようなデータ型かを提示させています. C 言語などのコンパイラ型の言語と違うことは, *変数宣言を必要としない* ことで, 手軽に計算を実行できるというところが違います.(コンパイル作業も必要ありません) さらに続けて実行させます.文字列を使って遊んでみます. ちなみに,プログラミング言語を修得することにおいて,思いついたことで *試してみること* は重要です. 失敗しても,それを修正しようとすることで,発想が生まれます. どんどん試して, *どんどん失敗して* ,どんどんスキルを上げましょう. (コードを書く上で,いろいろ試行錯誤し失敗することは悪いことではありません,経験値が上がります) .. code-block:: pycon :linenos: >>> b = 'hello' >>> type(b) >>> b + b 'hellohello' >>> 3 * b 'hellohellohello' 変数 b が今度は文字列 (str) というデータ型になります.つまり本当にどんな型のデータを 代入してもよいのです.さらに 'b+b' や '3*b' といった演算は文字列を結合するような 関数として実現されていることにも着目しておいてください. ファイルから実行してみる ------------------------ 次にファイルから実行してみます.以下のようなファイルを *hello.py* という名前で 保存してみてください. .. sourcecode:: python :linenos: b = 'Hello ' a = 'World' print b + a 次に,このファイルを実行するには .. code-block:: console $ python hello.py のように python コマンドの第1引数にファイルを指定してやればOKです. このような python の命令を順番に書き連ねたファイルを *スクリプト* などと呼びます. また,python3 以降のインタープリタから,スクリプトファイルを実行したい場合は python3.x の場合は下記のようになります(面倒..) .. code-block:: pycon >>> exec(open('hello.py').read()) ここらへんのファイルの実行は jupyter/ipython の方が便利です. なので,講義ではそちらを使っていくことにします. .. note:: python のコードを書いたファイルは, *.py* という拡張子を持つファイル名で保存してください. .. note:: スクリプトはテキストファイルに書きますが, テキストエディタは好みのものを使って構いません. Emacs でも Visual Studio Code でも vim でも,Python に付随している IDLE でも構いません. 最近のエディタだと,Visual Studio Code なんかが使いやすいです. (Python 特化であれば PyCharm なんかも使いやすそうですが) いずれにせよ,Python 用の構文ハイライト機能があるものがいいような気がします. Jupyter Notebook/Ipython 上での実行 ------------------------------------------------------------------------------ コマンドラインインタープリタとして Python ではなく,Jupyter Notebook または IPython を使うと, スクリプトの対話的実行や,ファイルからの実行がもっと楽にできます. 普段はこれを使うのが一番楽です. 立ち上げ方は,簡単で,端末上で, ``python`` コマンドの代わりに ``jupyter`` コマンドを使うだけです(web ブラウザ上で立ち上上がります). .. code-block:: sh $ jupyter としてください.Web のインターフェースが立ち上がります. (多分,一般には,これが使いやすい) すると python の `>>>` といったプロンプトではなく .. sourcecode:: ipython In [1]: のようなプロンプトが出てくると思います.あとは python インタープリタの時と 同じ使い方ができます. 実行結果は,ipython notebook という形で保存されます. このファイルは Google の Collaboratory https://colab.research.google.com/ とかでも使えます.(なので IED で作業しなくとも開発は可能になるという) python3 の新しい notebook を作成することで,実行結果とドキュメントを同時保存することが できます.こちらも,ipython と同様のプロンプトになります. 一方,ストイックに端末を使う(端末しか使えない状況を含む)場合は, ``ipython`` コマンドを使ってください. .. code-block:: sh $ ipython と打ってください.端末上で,上記プロンプトがでて,ほぼ同じ使い方ができるようになります. (ただし,ipython の方が Jupyter Notebook よりも機能が少ないし,記録もヒストリのみなので, Jupyter Notebook を使うことをお勧めします) .. note:: 自前の環境をもっている人は,python のインタプリタは, Jupyter Notebook (もしくは ipython) を使っていくようにしましょう. そっちがスタンダードですし,使いやすいので また Jupyter/IPython では,スクリプトの実行ができます. .. sourcecode:: ipython In [1]: run スクリプトファイル名 とすれば動きます.Jupyter notebook の場合は % を使って .. sourcecode:: ipython %run スクリプトファイル名 で実行可能です.同一ディレクトリ内のスクリプトはファイル名のみで動かすことが可能です. スクリプトの格納されているディレクトリが判っているのであれば, 絶対パスや相対パスで指定しても動きます. .. sourcecode:: ipython In [1]: run hello.py Hello World In [2]: a Out[2]: 'World' スクリプトが実行されるとスクリプト内の変数が定義されるので, 実行後に変数などを参照したりすることもできます.(デバッグとかにも使える) IPython では,履歴を簡単に調べることができます.例えば,上矢印キーを打てば, 一つ前の実行コマンドが出てきます.出てきたら,左右の矢印キーを動かして編集することも可能です. (bash や zsh のヒストリ機能と一緒です) .. note:: IPython では履歴をファイルに落とすこともできます. .. sourcecode:: ipython In[1]: history a = 'Hello' b = 'World' print a + b といったように history コマンドを使えば,今まで打ち込んだコマンドが提示されるので, これをコピー&ペーストしてファイル編集を行えばプログラムが楽に作成できます. 環境設定 ============ この実験では,自分でプロジェクトやモジュールを ``python`` で書くということを視野に入れています. このため,自分の書いたソースコードを ``python`` 側に認識させる必要があります.これを実行するには - IED 環境の場合: .. code-block:: sh $ cd <プロジェクト(リポジトリ)のルート> $ pip install -e . --no-build-isolation` 上記の``pip`` コマンドは,``python`` のパッケージ管理を行ってくれます. `-e .` は editable install とよばれ,フォルダ指定された(カレントディレクトリ'.')をパッケージとしてみなす指示になります. これを行うことで,自分のパッケージが ``jupyter notebook`` などで ``import`` できるようになります. なお, ``-no-build-isolation`` オプションは,IED 固有の理由で設定に失敗する(なぜか隔離環境で `pip` を見失う)ために,付けてあります. - 自宅や個人PCの場合 こちらは,環境によって変わります.いままで ``python`` 使いで仮想環境 ``venv`` を使っていた場合は, .. code-block:: sh $ cd <プロジェクト(リポジトリ)のルート> $ python -m venv .venv $ source .venv/bin/activate $ pip install --upgrade pip $ pip install -e ".[dev]" を使うか,もう少しモダンな ``uv`` パッケージマネージャ (https://github.com/astral-sh/uv) を使う場合は .. code-block:: sh $ cd <プロジェクト(リポジトリ)のルート> $ uv venv --python 3.12 $ source .venv/bin/activate $ uv pip install -e ".[dev]" のように ``python`` ごと突っ込むみたいなやり方ができます. 引用元 ============ .. [Etut] 英語版 Python チュートリアル http://docs.python.org/tutorial/datastructures.html .. [Jtut] 日本語版 Python チュートリアル http://www.python.jp/doc/release/tutorial/datastructures.html .. [uv] UV github リポジトリ https://github.com/astral-sh/uv