Python関連のことを調べてみた2023年07月23日

Python関連のことを調べてみた2023年07月23日

Poetryを使ってディープラーニング環境を構築する

# はじめに
Pythonでパッケージ管理や環境構築が手間になることがあります。リモートリポジトリをクローンして動かそうとしたら依存関係の問題で動かなかった…というのはよくある話です。
「パッケージを推奨バージョンに合わせたいけど、ローカル環境は汚したくない…」
そんなときに役立つツールがPoetryです。

ここでは、Poetryを使用して、ディープラーニング用の環境を構築する方法について解説します。
GPU版のPytorchを使えるようにします。

# Poetryを使えるようにする
homebrewを使ってインストールするのが一番楽です。
[このリンク](https://brew.sh/index_ja)からhomebrewのページに飛んで、指示に従ってインストールしてください。
homebrewのインストールができたら、Poetryは以下のコマンドでインストールできます。
“`bash
brew install poetry
“`

# プロジェクトの作成
新規の場合:
“`bash
poetry new project_name
“`
既存のプロジェクトをpo

元記事を表示

音源データ「.mp3」をcolabで「MIDI」へ変換する方法

・導入

私は現在、ピアノを学習している。
ただ楽譜などは読めないので、synthesiaというツールを用い、勉強中である。

自分の好きな楽曲をsynthesiaで練習するためには「MIDI」というデータを用意しなければなりません。しかし、販売されている音源は「.m4a.」というデータ形式であるので「.m4a.」→「MIDI」へ変換することが必要である。

「.m4a.」「MIDI」へ変換することができるソフトウェアは見つからなかったのだが、「.mp3」「MIDI」へ変換するものは発見したのでそれを利用しようとしたのだが、いかんせん正体不明のソフトウェアを自身のパソコンにインストールするというのは嫌なものなので、今回はGoogle Colaboratoryを使用し、音源データである「.mp3」をsynthesiaで利用できる「MIDI」へ変換する方法を解説する。

※「.m4a.」→「.mp3」への変換の仕方は省略する(iTunesを使用)

【Python】クラスで簡単なデコレータを作成してみる

## 内容
関数実行時に以下の内容を出力するデコレータをクラスで定義する
– 関数開始メッセージ
– 関数実行時の引数
– 関数終了メッセージ
– 関数実行にかかった時間

## 実装
“` python
from time import *

class logger:
def __init__(self, func):
self.func = func
def __call__(self, *args):
# 関数開始メッセージ
print(f”— {self.func.__name__} start —“)
# 関数実行時の引数
print(f”— args: {args} —“)
start = time()
ret = self.func(*args)
difftime = time() – start
# 関数終了メッセージ
print(f”— {self.func.__nam

ABC 311 備忘録

## 概要
 今回はABC311(2023年7月23日(土)21:00~22:40)についてポイントと自分の実装について書いていきたいと思う。
## A問題
https://atcoder.jp/contests/abc311/tasks/abc311_a
### ポイント
– ‘A’, ‘B’, ‘C’ について文字数のカウントをそれぞれ行う
### 自分の実装
“`Python:ABC_311_A.py
N = int(input())

S = input()

ans = 0

count_ABC = [0, 0, 0]

for i in range(N):
ans += 1
if S[i] == ‘A’:
count_ABC[0] += 1
elif S[i] == ‘B’:
count_ABC[1] += 1
else:
count_ABC[2] += 1
if count_ABC[0] >= 1 and count_ABC[1] >= 1 and count_ABC[2] >=

ABC311回答メモ

0.はじめに
 トヨタコンテストなので、難易度高いのかなーと思ったらやっぱり高かったです。
 Bあたりから難易度高めでCは諦めかけましたが何とかクリア。
 D以降は時間的にも気力的にも難易度的にも手が付けられませんでした。。

1.A – First ABC
 リストで、ABCそれぞれに、文字列内に出現したかフラグを持ち
 文字列を先頭からチェック。
 ABCどれかが発生したらフラグを立て、フラグのリスト合計が1になったら
 アドレスを出力して終了としてACでした。

 https://atcoder.jp/contests/abc311/submissions/43830264

2.B – Vacation Together
 N、Dの最大がそれぞれ100だし、B問題なのでTLEは意識しないで行けそうと判断。
 最初にna(現在チェック中の日の範囲で連続o日数を保持)とans(最大連続o日数)を0で初期化
 一日目から、全員がoの日をチェックしていき、全員oの場合、naに+1
 全員がoでない日が出てきたら、ansとnaのうち大きい方をansに保持しnaをクリア
 という感じで実

自作したChatGPT規格のプラグインをFunction callingを使って呼び出す方法

# まえがき

前回、ChatGPT規格のプラグイン開発に触れてみました。
プラグインの呼び出し元である**AIオーケストレーション**にはLangchainを採用して色々と試していましたが、エラーになる確率の方が高かったです、、。

https://qiita.com/sakue_103/items/30a6d170285327d6f73d

Microsoftが掲げる**Copilot stack × Plugins**の全体像に対して、前回行った内容を当てはめると以下のようなイメージでしょうか。

– 自作のプラグインを作成
– Langchainから自作のプラグインを呼び出す
– プラグイン連携はOpenAPI仕様に基づく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393221/bc61db29-7cb0-0883-6c7d-d5eb855c518b.png)

もう少し具体的な図で示すと以下のようなイメージです。
![image.png](https://qiita-im

HackTheBox Socket WriteUp

今回は、HackTheBoxのMediumマシン「Socket」のWriteUpです!
名前からして、最近多いあれかな?という気がしていますが、そうだった場合私はあまり得意ではないので心配です。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/4b8f20a3-9855-6055-54a9-ad1cfaca273c.png)

グラフはいつものMediumという感じですね。
苦戦する予感がしますが、攻略目指して頑張ります!

HackTheBoxってなに?という方はこちらの記事を見てみてください!一緒にハッキングしましょう~。

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!

https://qiita.com/Perplex/items/30f949fe261f56af7476

## S

python-note(:基本)

# 概要
Pythonノート基本系 ※自分用メモ (or cheat sheet)

# 基本

## 文・式
基本的にインタープリタなので1文ずつ解釈して動作

改行が文の区切りになる
“`
print(“Hello”)
print(“Goodbye”)
“`

コロンで区切っても良い
“`
>>> print(“Hello”); print(“Goodbye”)
Hello
Goodbyeprint(“Hello”); print(“Goodbye”)
“`

## コメント

`#`で始まる行はコメントとして扱われる
“`
# comment xxxx
“`

# 制御構文

## インデント

制御構文のブロックは一般的に括弧{ …… }で表すことが多いが、pythonはインデントによってブロックを表現する

## if文

“`
if a is b:
print(“a is equal to b”)
else:
print(“a is not equal to b”)
“`

## while文

`while condition:`

SwiftUI × FastAPI 環境構築

# はじめに
普段はWebエンジニアをしているのですが、
ネイティブアプリ化を想定しているNext製WebアプリがありXcodeに手を染めました。

その時の備忘についてまとめたのが今回の内容です。

# 完成系
![スクリーンショット 2023-07-23 0.57.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568351/efc566e0-f964-dcbc-ec8e-21f9035a4e06.png)

– DBに登録されているデータをAPIで受け取って表示します
– ボトムバーのナビゲーションを利用してページ切り替えができます
– 画面上部のソートと検索ボタンは飾りです

# バックエンド(FastAPI)
Dockerを使用して環境構築します。
FastAPIの経験がある方は、ざっとモデルを確認して合わせていただくだけで大丈夫です。

## プロジェクトディレクトリ作成
“`
mkdir serverside
“`

以降、serversideディレクトリをルートしてファイルのパス

ABC311をPythonで解いてみたよ。(A~E問題)

[AtCoder Beginners Contest 311 (ABC311)](https://atcoder.jp/contests/abc311) をPythonで解きました。
見やすいコードを書く練習も兼ねてます。

TwitterとPayPayリンクをまとめたリトリンを下に貼ってあります。
Twitterのフォローお待ちしてます!(DMでなにか一言いただけるとたすかります…!)
この記事が役に立ったなと思ったら、PayPayのご支援もよろしくお願いします┏○ペコッ

https://lit.link/mer6177999

# A – First ABC

## 問題ページ
https://atcoder.jp/contests/abc311/tasks/abc311_a

## 考察
文字 ‘A’ について、文字列Sの左から順番に見ていって、はじめて ‘A’ が出てきたインデックスを記録します。
文字 ‘B’ と ‘C’ についても同じようにインデックスを記録します。
この3つのインデックスの中で、最も大きな値が答えです。
左から見ていってはじめて出てくる文字を探すの

python と JupyterLab でボルケーノ

# はじめに
ボルケーノプロットを作成することになり、[Pythonで作るVolcano plot](https://qiita.com/insilicomab/items/c382f10208e8bd2482b5) を参考にさせてもらい、無事描画できたのだが、途中ライブラリのバージョンアップ等のため苦戦したのでメモっておく。

# 試した環境
インストールすることができたバージョンの組み合わせは、こんな感じ。
– Ubuntu 20.X
– miniconda
– python 3.11
– jupyterlab 4.0.3
– bioifonkit 1.0.8
– matpltolib 3.7
– pandas 2.0.3
– seaborn 0.12.2
– matplotlib-venn 0.11
– adjustText 0.7.3
– tabulate 0.9.0
– scikit-learn 1.3.0
– textwrap3 0.9.2

# 構築手順
こんな感じ。
“` sh
conda create -n jupyter
conda activate jupyt

venv環境内でpipがFatal errorで動かなくなったときの対処法

# エラー内容

“`
C:\work\sample> pip list
Fatal error in launcher: Unable to create
process using'”C:\work\example\venv\Scripts\python.exe”
“C:\work\sample\venv\Scripts\pip.exe” ‘: ??????????????????
“`

# 原因
pipを生成した際にpythonへの絶対パスをファイル内に保存している
そのため、ディレクトリの変更があるとpipがpythonを見つけられずエラーを起こす

# 対処法
実行時に`py -m pip list`のように、pathを指定してあげれば動きはするが、毎回打つのはめんどくさい

pipをバージョンアップ、もしくは再インストールすれば解決する

### pipが最新でなくアップグレードできる場合
“`powershell
.\venv\Scripts\activate.ps1
py -m pip -U pip
“`
実行できた場合は`deactivate`して

【公開】Discord のリアクションに反応し通知する Bot 「リアクション通知くん」

## はじめに
以前、Discord の返信や応答などに使われるリアクションに気づかないことがあり不便なため、リアクションに反応して通知してくれる Bot を作りました。ユーザがリアクションすると Bot がメッセージ主にメンションする流れになっています。動作に関しては以下記事を参考にして下さい。この度、この Bot を公開させて頂くことにしました(需要があるかは知りませんが…)。ぜひ使ってみて下さい。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1115291/54a2de5e-a96a-3964-c84e-80a5daf9b0b7.png)

https://qiita.com/Pumila/items/cf447c24538e13994a38

以下、ソースコードになります。

https://github.com/Pumi1a/ReactionDetect

## 注意点
エラー報告は開発者の [Twitter](https://twitter.com/Pumi1a) か [g

SQlite3のDB作成、閲覧、CSVインポート、出力できるGUIアプリを作成してみた!

PythonとTKinterを使い、SQlite 3のDDB作成、閲覧、CSVインポート、出力(エクスポート)、テーブルの内容確認ができるGUIアプリを作ってみました。

## アプリの目的

パソコン初心者でも簡単にデータベースを作成し、使えるようにする。

そのために、機能を4つにしぼり、4つのボタンだけで操作できるようにする。

## アプリの機能

アプリのコードを実行することで、GUIアプリが自動で起動します。

### MAKE

MAKEボタンを押すことで、データが何も入っていない空のデータベースファイル「NEW.db」を作成します。

また、MAKEボタンを押すことで、データベースの中身(テーブル名)を確認できます(ターミナルに表示)。

### INPUT

INPUTボタンを押すことで、データベース「NEW.db」にCSVファイルをテーブルとして保存できます。

CSVファイルは入力ダイアログで選択できます。

保存先のテーブル名(「N1、N2、N3、N4」のいずれか)は、コンボボックスから選択できます。

### OUTPUT

OUTPUTボタンを押すことで、作

Llama2とlangchainでpdf読み込んでchatbotの例

好きなモデルとPDFを入れてください。質問すればチャットボットが答えます。
私は下記のモデルをダウンロードしました。
https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/blob/main/llama-2-7b-chat.ggmlv3.q8_0.bin

“`ptyhon.py
import os
from langchain.document_loaders import PyPDFLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains.question_answering import load_qa_chain
from langchain.chains import ConversationalRetrievalChain
import logging
import sys

from langchain.chains import Ret

TkinterのTextウィジェットで日本語入力中にレインボーカーソルになるのは仕様か

# 本稿で扱う情報
Python
Tkinter

# 環境
Mac OS
M1 MacBook Air
M1Pro MacBook Pro

# 症状
Textウィジェット、おそらくもしくはEntryで日本語入力中にレインボーカーソル(フリーズ)になる
強制終了しないといけない
エラーログは出ていない

# 症状分析
タイピングが早すぎる→Airだとあんまり関係なかったが、M1Proにしたところ多少改善。メモリ16GBモデルなので、もしかすると32GB以上のモデルだとより発生しにくい?
改行含むガチャガチャ入力だとM1Proでもほぼ発生。普通に入力するくらいなら大丈夫。
Airは普通の入力でも発生。

# 対策
スペックを上げる、OSを変える(未検証)、常識的な入力をする(Airは諦める)

# 雑結論
仕様というかスペックの問題か。
テキスト入力を伴うデスクトップアプリをMacで動かす方は注意。

pip install で発生する Cannot uninstall エラーの解決

# はじめに

pip install <パッケージ名> でパッケージのインストールや更新を行う際、以下のように「アンインストールできない」という旨のエラーが表示される。

“`
$ pip install paddlepaddle

Cannot uninstall ‘blinker’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
“`

# 環境
OS: Windows10

Dockerで以下の環境を作成。
Ubuntu: 22.04
Python: 3.7.1

# 原因
パッケージ依存のライブラリが対象となっていた、もしくはバージョンが古い。原因がどちらか特定することはできなかった。
エラー文の内容としては、「\をアンインストールできない。 これは distutils がインストールされているプロジェクトであ

Django環境構築

Pythonのフレームワーク、Djangoの環境構築をしたのでメモ変わりとして記事にしました!
使用する実機はWindowsを想定しております。

# Miniconda3のインストール
https://qiita.com/kawada2017/items/626a80ed5bbfdc2576a5

上記の記事を参考にMiniconda3をインストールして下さい。

MinicondaはPythonの仮想環境を管理するためのツールの1つです。
ほかにもAnacondaなどがありますが、Anacondaと比べて軽量でなどでこちらを使用しています。

# 起動
minicondaのプロンプトを起動
![スクリーンショット (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2515728/ac496da6-a649-ba49-9a0a-274e39f5bb01.png)

# 仮想環境にDjangoをインストール
インストールは「pip」というコマンドを使い、コマンドを実行します。

“`termin

pythonのbeautifulsoup4で、XPATHからhtml要素を取得する

# 結論
`lxml`モジュールを使用します。beautifulsoup4でパースしたデータを一度`lxml.html.HtmlElement`に変換することでXPATHからhtml要素を取得することができます。

# 前提
beautifulsoup4だけでなく、`lxml`もインストールする必要があります。`pip`などでインストールします。
“`
pip install lxml
“`

# サンプルコード
サンプルコード作成のために、下記ののページをご使用させていただきました。

https://scraping-for-beginner.herokuapp.com/ranking/

上記のページの各観光地の総合評価を取得しています。

“`.py
from lxml import html
import requests
from bs4 import BeautifulSoup

def main():
response = requests.get(“https://scraping-for-beginner.herokuapp.com/ranking/”

JUMAN++をWindows環境で動かしてみる

### はじめに
京大の研究室が公開しているBARTの日本語Pretrainedモデルの利用を検討しています。
JUMAN++で形態素解析した結果を渡す必要があるため、まずはJUMAN++を導入してみます。

https://nlp.ist.i.kyoto-u.ac.jp/?BART%E6%97%A5%E6%9C%AC%E8%AA%9EPretrained%E3%83%A2%E3%83%87%E3%83%AB

### インストーラを取得する
“jumanpp-2.0.0-rc3.tar.xz“ をダウンロードします。

https://github.com/ku-nlp/jumanpp/releases/tag/v2.0.0-rc3

### Visual Studio Community をインストールする

ダウンロードした資材をビルドするために、Visual Studio 2022をインストールします。

https://visualstudio.microsoft.com/ja/vs/community/

インストール時に、以下の2つの項目を選択してください。
– 「ワ