windows11でPythonを使っていくための準備をします(WSLは使わないです)
pyenv-winでPythonのバージョン管理と、Poetryを使ってPythonパッケージのインストールをします

Chocolatey

まずは、 MacやLinuxでは、Homebrewというパッケージ管理システムがありますが
Windowsでは、Chocolateyというパッケージ管理システムがあります。

便利なので入れておくとよいと思います
インストール方法は、過去記事参照

pyenv-winのインストール

pyenvは、複数のPythonのバージョンを管理し、プロジェクトごとに切り替えて使うための仕組みです

windowsだと pyenv-win がそれに該当します

Chocolateyでインストールするので、PowerShell(管理者)を実行し、インストール

choco install pyenv-win

インストールできたかは、PowerShell(管理者)を起動しなおしてバージョンの確認を行う

pyenv --version
pyenv 3.1.1

pyenvの使い方

# pyenvのバージョン
pyenv --version

# インストール
pyenv install <バージョン>

# インストール可能なバージョン一覧
pyenv versions

# Pythonのバージョン切替
pyenv global <バージョン>

pyenv local <バージョン>

pyenv local は、実行するとカレントディレクトリに .python-versionファイルが作成され、その中フォルダで実行すると指定したバージョンのPythonで実行できる。

poetryのインストール

引き続き、PowerShellで下記コマンドを実行

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

参考: https://python-poetry.org/docs/#installing-with-the-official-installer

実行すると以下メッセージが表示されます

Retrieving Poetry metadata

# Welcome to Poetry!

This will download and install the latest version of Poetry,
a dependency and package manager for Python.

It will add the `poetry` command to Poetry's bin directory, located at:

C:\Users\{ユーザー名}\AppData\Roaming\Python\Scripts

You can uninstall at any time by executing this script with the --uninstall option,
and these changes will be reverted.

Installing Poetry (2.1.2)
Installing Poetry (2.1.2): Creating environment
Installing Poetry (2.1.2): Installing Poetry
Installing Poetry (2.1.2): Creating script
Installing Poetry (2.1.2): Done

Poetry (2.1.2) is installed now. Great!

To get started you need Poetry's bin directory (C:\Users\{ユーザー名}\AppData\Roaming\Python\Scripts) in your `PATH`
environment variable.

You can choose and execute one of the following commands in PowerShell:

A. Append the bin directory to your user environment variable `PATH`:

```
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\Users\{ユーザー名}\AppData\Roaming\Python\Scripts", "User")
```

B. Try to append the bin directory to PATH every when you run PowerShell (>=6 recommended):

```
echo 'if (-not (Get-Command poetry -ErrorAction Ignore)) { $env:Path += ";C:\Users\{ユーザー名}\AppData\Roaming\Python\Scripts" }' | Out-File -Append $PROFILE
```

Alternatively, you can call Poetry explicitly with `C:\Users\{ユーザー名}\AppData\Roaming\Python\Scripts\poetry`.

You can test that everything is set up by executing:

`poetry --version`

このパスにインストールされていて
C:\Users{ユーザー名}\AppData\Roaming\Python\Scripts

削除したい場合は、 --uninstal オプションで実行すればよいとのこと

環境変数にこのパスを追加してね とも書いてありますね。
ご丁寧にパス追加のコマンドまで書かれているのでそれを実行します

PowerShellを再起動して poetry --versionを実行すると
Poetry (version 2.1.2)
のようにバージョンが表示されればOKです

使い方の流れ

プロジェクトを作成
poetry new

追加するパッケージがあれば追加します
poetry add

特定のバージョンを追加したい場合
poetry add @

開発で使用するパッケージを追加したい場合
poetry add --dev

パッケージのインストール(仮想環境の作成)
poetry install

パッケージのアップデート
poetry update

事前に何が変更されるか確認したい場合は、
poetry update --dry-run

不要なパッケージの削除
poetry remove

特定のPythonバージョンで実行したい場合
pyenv local <バージョン>

仮想環境で実行
poetry run python

仮想環境に移動して実行
poetry shell
python

参考: 生成AIさん、開発で追加すると便利なパッケージってなーにー?

  1. テスト関連
    pytest: テストフレームワーク。シンプルな構文でユニットテストを記述可能。 pytest-cov: テストカバレッジ計測ツール。コードのテスト範囲を可視化。 requests-mock: HTTPリクエストのモック作成。APIテスト時に外部依存を排除。

  2. コード品質管理 flake8: コードスタイルチェック(PEP8準拠)。 black: 自動コードフォーマッター。一貫したスタイルを強制。 mypy: 静的型チェッカー。型アノテーションの誤りを検出。

  3. ドキュメンテーション Sphinx: プロフェッショナルなドキュメント生成。Python公式ドキュメントも採用。 mkdocs: Markdownベースの軽量ドキュメントツール。

  4. 開発支援ツール ipython: 対話型シェル。デバッグやプロトタイピングに便利。 jupyter: ノートブック環境。データ分析や可視化の実験用。

  5. 環境構築・デプロイ twine: PyPIへのパッケージアップロード用。 docker-compose: コンテナ環境の管理(Docker連携)。

  6. その他 pre-commit: Gitコミット前の自動チェック(テスト、リントなど)を実行。 bandit: セキュリティ脆弱性スキャン。

投稿日時: 2025-04-12 06:01:12
更新日時: 2025-04-13 05:20:13

forループでループを抜けきったらelseに入ることを利用して
elseでcontinueしておけば、内側のループがすべて実行されたことになり
breakで抜けた場合はelseを通過しないのでその先のbreakでぬけることで
ループをぬけれる。
下記は、各要素の合計が30を超えるのであれば抜ける処理

dataList = [
        [2, 4, 5, 6],
        [6, 4, 1, 5],
        [3, 1, 3, 1]
    ]

sum = 0
for rowData in dataList:
    for value in rowData:
        print("Next", value)
        if 30 < sum + value: 
            break
        sum += value
        print(sum)
    else:
        continue
    break;
投稿日時: 2024-07-13 12:53:13

Pythonは普段触らないのでメモ。

四則演算
print(f"10 +  3 = {10 +  3}") # 13
print(f"10 -  3 = {10 -  3}") # 7
print(f"10 *  3 = {10 *  3}") # 30
print(f"10 /  3 = {10 /  3}") # 3.33333333
print(f"10 // 3 = {10 // 3}") # 3
print(f"10 %  3 = {10 %  3}") # 1
print(f"10 ** 3 = {10 ** 3}") # 1000
文字列のメソッド ・大文字、小文字変換
print("Python".upper()) # PYTHON
print("Python".lower()) # puthon
・含む文字の数
s = "G" + ("o" *10) + "gle"

print(s.count("o")) # 10 print(s.count("oo")) # 5 print(s.count("ooo")) # 3

print(s.count('o', 5)) # 6 Goooo ooooole print(s.count('o', 5, 8)) # 3 Goooo ooo oole

・文字列の位置を取得

s = "abcdefgabcdefg"

print(s.find("a"))      # 0
print(s.find("a", 3))   # 7
print(s.find("a", 10))  # -1 該当なし

# 後ろから探す
print(s.rfind("a"))     # 7

・トリム

s = "   \tabc\t"
print(f"|{s}|")
print(f"|{s.lstrip()}|") #左側をトリムする
print(f"|{s.strip()}|")  #左右トリムする
print(f"|{s.rstrip()}|") #右側をトリムする

・フォーマット

from datetime import datetime, timedelta

date_start = datetime.now()
date_end = date_start + timedelta(days=7)

# 文字列に直接埋め込むと…メソッド形式だと長すぎて可読性が悪い
print(f"開始:{date_start.strftime('%Y-%m-%d')} - 終了:{date_end.strftime('%Y-%m-%d')}")

# だからといって直接埋め込むために変数に設定しなおすべきか・・・
date_start_str = date_start.strftime("%Y-%m-%d")
date_end_str =date_end.strftime("%Y-%m-%d")
print(f"開始:{date_start_str} - 終了:{date_end_str}")

# 埋め込みたいものが長い場合はformatのほうが読みやすいかも
print("開始:{} - 終了:{}".format(date_start.strftime('%Y-%m-%d'), date_end.strftime('%Y-%m-%d')))
複数データ
data_list = [1, 2, 3] 
print(data_list)  # [1, 2, 3]

data_tuple = (1, 2, 3) print(data_tuple) # (1, 2, 3)

data_set = {1, 2, 3, 1, 2, 3} print(data_set) # {1, 2, 3}

data_disc = {"a" : 1, "b" : 2, "c" : 3} print(data_disc) # {'a': 1, 'b': 2, 'c': 3}

文字列に変数埋め込み

f"…{変数名}…"

from datetime import datetime

now = datetime.now().strftime("%H:%M:%S")
print(f"現在の時間:{now}")

num = 10
print(f"数値は{num}")
条件分岐/繰り返し ・if文 (インデントで
val = input("1:xxx, 2:xxx, 3:xxx\n選択してください。")

if val == "1": print("1:xxx を選択しました") elif val == "2": print("2:xxx を選択しました") elif val == "3": print("3:xxx を選択しました") else: print("選択外です")

if文の中 or 外はインデントで決まる。

・and, or &&, || ではなく and, or
ちなみに、2 <= val and val <= 10 は 2 <= and <= 10 ともかけるとのこと。

・notでtrueとみなすもの(falsyな値) False / None / 0 / 空(文字列、シーケンス、コレクションなど)

・while文

while True:
    val = input("1-3の数値を入力してください")
    
    if not val.isdigit():
        print("整数値じゃありません")
        continue
    elif val == "1":
        print("1を選択しました")
    elif val == "2":
        print("2を選択しました")
    elif val == "3":
        print("3を選択しました")
    else:
        print("1-3以外が選択されました。終了します。")
        break

print("終了します")

while 条件:
else:
whileのelseは条件が偽となったときにだけ実行される。
breakで終了となったときは、実行されない

・for文

sum = 0
for i in range(1, 11): #1から10までの値 
    sum += i
    print(sum)

data = [1, 3, 5, 7, 11, 13] #
for n in data:
    print(n)
例外
import sys

try:
    value = 1/0

except:
    ex_type, ex_value, ex_traceback = sys.exc_info()

    print(f"Type:{ex_type}")   #Type:<class 'ZeroDivisionError'>
    print(f"Value:{ex_value}") #Value:division by zero

finally:
    print("後処理")
投稿日時: 2024-07-12 13:28:12
更新日時: 2024-07-13 13:12:13

最近の投稿

最近のコメント

タグ

アーカイブ

その他