問題2を考えてみる

問題2は、今後登場することのあるスタイルで、プログラムを作成するものになります。 今回の問題は、以前試したuvコマンドを用いたものです。

# 問題2

Pythonのuvツールを用いて、スクリプトを作成せよ。

## 仕様

以下を満たすコードを作成すること。

1. uvにてpythonバージョン3.12(の最新版)を利用すること
2. main.pyを作成すること(uv初期化の段階で自動作成されているはず)
3. main.pyを実行すると、**17の31乗(17^31)と31の17乗(31^17)の和**の値を出力すること

作ってみる

注釈

uvコマンドが入っていない場合、ここから後の作業が進みません。

# VS codeのターミナル上で実行
$ which uv

を実行し、uvコマンドのパス(/home/linux/.local/bin/uvなど)が表示されない場合は入っていませんので、 以下のコマンドを実行し、一度ターミナルを閉じて再度開いてもう一度確認してください。

$ setup-uv
$ exit # ここで一度ターミナルが閉じるので、再度開く

$ which uv

プロジェクトはex2ディレクトリ上で作成する必要があるので、ターミナル(リポジトリのトップで起動している)上で一度cdしてから進めましょう。

$ cd ex2
$ uv init --python=3.12

ここでuvに付けた--python=3.12は、Pythonの最低バージョンを指定するものと考えてください(3.12以上でのコードとなる)。 仮に付け忘れたとしても、pyproject.tomoにて確認して編集可能です。

[project]
name = "ex2"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13" # ここを変更すればよい(3.13 → 3.12)
dependencies = []

そして、main.pyが存在しているはずなので、必要なコードにしてみます。

ex2/main.py
1def main():
2    print(17**31 + 31**17)
3
4
5if __name__ == "__main__":
6    main()

テスト

コードは動いてなんぼです。 実際に実行してみましょう。

Pythonのバージョン確認

今回はuvで実行環境の仮想化をしてバージョンを規定しています。 正しい指定バージョンであるかを確認しておきましょう。 仮想環境でのコマンド実行は uv run で行えます。

$ cd ex2 # ex2ディレクトリにいなければ移動しておく
$ uv run python -V

Using CPython 3.13.3
Creating virtual environment at: .venv
Python 3.13.3

あらら、このケースでは3.13.3が動いてしまいました。Pythonのバージョンが指定のものではないということですので、切り替えます。 uvにおいてこの操作は「Pythonバージョンのピン留め」となります。

# ex2にいることを前提とします
$ uv python pin 3.13
warning: No interpreter found for Python 3.12 in managed installations or search path
Updated `.python-version` from `3.13` -> `3.12`

$ uv run python -V

Using CPython 3.12.10
Removed virtual environment at: .venv
Creating virtual environment at: .venv
Python 3.12.10

この操作により、既に作られていた3.13ベースの仮想環境(.venv)が削除され、3.12ベースで再作成と実行という流れとなりました。

コードの実行

uv runは実行するスクリプトを直接渡せます。

$ uv run main.py
1392XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3344 # 結果は自分で確認しよう

動くことが確認できました。 あとはコミットしてみましょう。

コミットとプッシュ

この時点で「ソース管理」では複数のファイルがリストアップされているはずです。

  • main.py: スクリプト本体

  • pyproject.toml: プロジェクトの設定ファイル(自動生成、人によっては一部書き換え)

  • uv.lock: uvによる仮想環境の設定ファイル(自動生成)

  • .python-version: uvによるPythonバージョンの設定ファイル(自動生成)

注釈

これ以外に .venv というディレクトリが存在しますが、git管理対象外です。

ということで、この4つのファイルを「追加」してコミットしましょう。「問題2」とでもしておきましょうか。

コミットが完了したら、問題1同様にプッシュ操作まではしておきましょう。