Python3関連のことを調べてみた2022年02月22日

Python3関連のことを調べてみた2022年02月22日

pyenv-winで対応していないバージョンのPythonをインストールする方法

# 1. はじめに
急な話ですが、2021年10月にPython3.10がリリースされましたね!(今更感がありますが…)
個人的には新機能の構造的パターンマッチング(C言語でいうswitch文みたいなやつ)が気になっており触ってみたいと思っていました。
私はWindows環境でPythonを使用する際はpyenv-winを使っているので、さっそく pyenv install -l コマンドでバージョンの一覧を確認!
※今回の記事では、pyenvの基本操作の説明はスキップします。ご了承ください…m(_ _)m

“`python
# まずはpyenvのバージョンを確認!!
> pyenv –version
pyenv 2.64.11

# pyenv install -l を実行
> pyenv install -l
3.10.0a1-win32 # Python3.10は、ここから
3.10.0a1 # ↑
… # |
3.10.0b2-win32

元記事を表示

Python マルチスレッドで同一サイトにHTTPリクエストするときのスクレイピングTip

# はじめに

マルチスレッドでスクレイピング処理をしているときに、同一サイトで短時間多重リクエストしでかしそうになったので予防方法をメモする(別スレッドでリクエストするとスリープの意味をなさないので)

# 方法

リクエスト前後でスレッドをロックする

ロッククラスは以下の通りなので別スレッドから自由にロック、アンロックできる
>プリミティブロック (primitive lock) オブジェクトを実装しているクラスです。スレッドが一度ロックを獲得すると、それ以後のロック獲得の試みはロックが解放されるまでブロックします。どのスレッドでもロックを解放できます。

https://docs.python.org/ja/3/library/threading.html#threading.Lock

“`python
import time
import threading
import requests

lock = threading.Lock()

def http_req(url):
global lock
lock.aquire()
res =

元記事を表示

stop-processコマンドがプロセスが止まっていた原因だった話

Windows環境でクロームが重いのでPowerShellで時々

“`
ps -Name *chrome* | stop-process
“`
をよくやる。そしてPythonでも

“`
os.system(‘powershell -Command “ps -Name *chrome* | stop-process”‘)
“`

“`
subprocess.Popen(‘powershell -Command “ps -Name *chrome* | stop-process”‘)
“`

を使っていた。
ところがある日、自動処理が止まっていることを発見。
原因がこのコマンドであることにやっと気付いた。ハマった状況の蓋を開けてみると

“`
次の項目に対して Stop-Process 操作を実行しますか
“`
という確認が出て応答待ち、ペンディング状態だったのだ。

-Forceをつけたコマンドなら待たない。

“`
powershell -Command “ps -Name *chrome* | stop-process -Force”
“`
解決した。

元記事を表示

TRPGログをmarkdownにするプログラムをつくった

# こんなものを作りました

https://github.com/msattova/trpgLOG2md

やってることは非常にシンプルです。ざっくり説明するとこんな感じ。

1. HTMLファイルを読み込む

1. `

`タグの内側の文字列(HTMLタグ込み)を検索して全部取得
1. 取得した文字列から``タグの内側の文字列(HTMLタグを含まない)を取得
1. それぞれの文字列を適宜markdownの文法で装飾したりしなかったりの処理をする
1. 処理した文字列をoutputディレクトリ内に.mdファイルとして出力

# なんでこんなものを?

私はHUGOで生成した静的サイト上でTRPGのログを公開しようと考えていました。
[この記事](https://qiita.com/msattova/items/8695ac914d2ee2638e38)にその時やった試行錯誤が書いてあります。

その記事を書いていたときはHTMLファイルの状態で公開しようと考えていたのですが、既存のログコンバーターではあまり満足できず、かと言って自作するのもデザインや機能面での悩みが多く

元記事を表示

Effective Pythonまとめ 1. Pythonic Thinking (Item1~Item10)

Pythonのコーディング力を引き上げるために、[Effective Python Second Edition(英語版)](https://www.amazon.co.jp/dp/B07ZG18BH3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)を用いて学習しています。
(日本語版は訳が機械的でわかりづらいというレビューが多かったので、英語版を利用することにしました。)
今回は、第一章のPythonic Thinking (Item1~Item10まで)について、学習の備忘も兼ねて要点をメモしていきます。

:::note warn
個人的に解釈した内容を記述しているため、本の内容と厳密には一致しない表現が含まれることにご注意ください。
:::

# Item1: Know which version of Python You’re Using
pythonのバージョンを確認する方法は2種類ある。

### `–version`フラグによる確認

“`
$ python –version
Python 2.7.16

$ pyt

元記事を表示

エクセル在庫管理やめたいのでpythonでブラウザ用在庫管理ウェブアプリを作ってみる1

##エクセルで在庫管理やめたい!

親の会社が大阪、東京、兵庫、通販の4つの場所で商売展開することになった。
在庫管理はエクセルでやってドロップボックスで同期させてたけど毎回手動でファイルの複製をしたり、ファイルの破損とかでだるいのでリアルタイム同期する必要が発生。お金はないので業者に頼むなら勉強も兼ねてまず俺がやってみたら良くね?タダだから失敗してもいいし何より暇なので。

ということでブラウザで在庫管理したい!

始めた時はおもちゃ算数プログラミングしかしたことないのでインターネット何も分からないンゴ。状態です。
ググっても「在庫管理システムはムズイ」とかばっかで、なんか、「ああ、業者が高い金巻き上げてるから企業秘密的な?誰も情報出さんのかな」と思った。知らんけど。そんな気がする。

##これが使えたらうれしい人はどんな人?
これを使えたらうれしいのは4人以上で在庫管理する人全員です。エクセル在庫管理は3人以下単拠点でメリットがある(証明略)のでそれ以外の人はエクセルをやめましょう。

##使う言語、ライブラリと理由
使うのはpython3,flask,sqlite3,jinja2

元記事を表示

PyPika の Query、Table の基本的な使い方

# PyPika とは
[kayak/pypika](https://github.com/kayak/pypika) は、 Python の SQL クエリビルダーです。本記事ではこのライブラリの中心となる Query、 Table の使い方について紹介します。

# 環境
公式に記載のサポートされている Python のバージョンは `3.6` 以上。今回使用している Python のバージョンは `3.9.10` です。 PyPika のバージョンは、`0.48.8` を使用しています。

#1. Query
名前の通り `Query` クラスを使用して SQLクエリを組み立てることができます。
以下は、 `SELECT` 文の例です。[from_](https://github.com/kayak/pypika/blob/a7b01dac790f4c6e93a961b0be26a9645fe7cf5c/pypika/queries.py#L361) メソッドを使用して組み立てることができます。実態は [QueryBuilder](https://github.com/kayak

元記事を表示

GfGa

専用計算機のメモ

# pyenv

普段のpyenvの設定(https://qiita.com/KoheiQiita/items/3fa3251046132246169a)
に、以下を加えるとうまくいく。

“`
$ echo ‘eval “$(pyenv init –path)”‘ >> ~/.bashrc
“`

参考 https://blog.serverworks.co.jp/2021/05/12/233520

# conda 周辺の試行錯誤

“`
$ nano /home/nbody06/.pyenv/pyenv.d/exec/pip-rehash/conda
“`

/home/nbody06/.pyenv/bin

“`
$ nano ~/.pyenv/shims/conda
“`
これらを編集すると、以下のエラーが出る。

“`
$ conda info –envs
File “/home/nbody06/.pyenv/pyenv.d/exec/pip-rehash/conda”, line 7
[ -n “$PYENV_DEBU

元記事を表示

Python で COVID-19 のコロプレス図を作成する

# はじめに
簡単なコロプレス図を作りたいと思ったときに、いろいろと調べたので備忘録代わりに記録しておく。コロプレス図のカラーバーをつけるのに少し工夫が必要だった。もしもっと簡単にできる方法をご存じの方が居ましたら是非コメント下さい。以下、参考サイト。

– cartopy の使い方
– [cartopy official document](https://scitools.org.uk/cartopy/docs/latest/index.html)
– [Cartopyで地理データを可視化する1](https://metpost.hatenablog.com/entry/2015/11/05/180006)
– コロプレス図の作成方法について
– [14.6. Manipulating geospatial data with Cartopy](https://ipython-books.github.io/146-manipulating-geospatial-data-with-cartopy/)
– カラーバーの作成方法について
– [matplotlibでカラーバー

元記事を表示

[Django / python3] ZoneInfoNotFoundErrorの対策

# 概要

Djangoの管理画面を開こうとしたら、以下のエラーが発生した。

“`bash
backports.zoneinfo._common.ZoneInfoNotFoundError: ‘No time zone found with key Asia/Tokyo’
“`

むむむ、今までは発生してなかったんだが~( ˘·ω·˘ ).。oஇ

# 環境

||type / version|
|:-|-:|
|OS|wsl2 (Ubuntu)|
|Python|3.8.9|
|Django|4.0.2|
|backports.zoneinfo|0.2.1|

# 対策

pip moduleの`tzdata`をインストールした上で、Djangoアプリケーションを再起動してあげれば大丈夫でした。

# 原因について

エラーの発生原因になっている[zoneinfoの公式ドキュメント](https://docs.python.org/3/library/zoneinfo.html#data-sources)によると、zoneinfoは、データベースかもしくは`tzdata`からt

元記事を表示

sklearn.feature_extraction.textのvectorizerで日本語の単語ngramを生成する

# 概要
`sklearn.feature_extraction.text`のvectorizerで日本語の単語ngramを生成しようとして苦戦したのでメモ。

結論としては、vectorizerの引数で、`tokenizer=lambda x: mecab.parse(x).strip().split()`(mecabはMeCabの分かち書きTaggerオブジェクト)としたうえで、`ngram_range=(3,3)`などと指定すればよい。分かち書き関数を`analyzer`ではなく`tokenizer`に指定するのがポイント。

“`Python
from sklearn.feature_extraction.text import TfidfVectorizer
import MeCab
mecab = MeCab.Tagger(“-Owakati”)

vectorizer = TfidfVectorizer(
tokenizer=lambda x: mecab.parse(x).strip().split(),
ngram_range=(3,3)
)

# 確認
d

元記事を表示

Python3: GraphQL サーバーにアクセスする方法

こちらで作成した Graph QL サーバーにアクセスする方法です。
[Apollo Server の使い方](https://qiita.com/ekzemplaro/items/98aa688d329e526db516)

“`py:graphql_client.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# graphql_client.py
#
# Feb/20/2022
#
# ——————————————————————
import sys
import requests
# ——————————————————————
def file_to_str_proc(file_in):
str_out = “”
try:
fp_in = open(file_in,encoding=’utf-8′)
str_out = f

元記事を表示

[LightGBM] Optuna 最適化

# 概要
LightGBMをOptunaを使用して最適化する方法をまとめた記事です。
この記事はTunerやTunerCVなどの違いなどを一つのコードにまとめており、それぞれの結果を比較できます。
Optunaの使用方法の日本語の記事が少ないと感じたため、まとめてみました。
しかしながら、一度公式ドキュメントを一読することを強く推奨します。

また、optunaで最適化した後に再度学習を回さなければいけないのか?
という疑問があったので、それについても検証しています。
(実際には検証データを学習データに追加してスコアを上げることが多いので、基本的に再度学習させますが、、、)

この記事はPython APIを使用しています。

# 動作環境
* MacBook Pro (M1)
* optuna: 2.9.1
* lightgbm: 3.3.2
* scikit-learn: 1.0.2

# ソースコード
“`
“””
公式githubから一部引用しています。
ソースコード引用元: https://github.com/optuna/optuna-examples/tree/

元記事を表示

[Flask] ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’ への対処

FlaskをCloud Runにデプロイしたら、「 **ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’** 」 が発生したときの対処。

原因特定までできていないのですが、
フロントを色々直して、デプロイしたら、発生して、
ブラウザから接続すると、 service unavailable に……

“`requirements.txt
-Flask==1.1.4
+Flask==2.0.1
“`

Flaskのバージョンを上げたら、解決した。

元記事を表示

【Lightsail】Flaskアプリケーションをデプロイ

# 1. はじめに

Lightsailのコンテナサービスを利用します。

Flaskアプリケーションの作成に関しては、前回の記事で記述しました(https://qiita.com/shiv76e2/items/cbb8e553ecd6c6846672)

ディレクトリ構成
“`
Containers/
├ nginx/
│ ├ Dockerfile
│ └ nginx.conf
└ uwsgi/
├ app.py
├ Dockerfile
├ requirements.txt
└ uwsgi.ini
“`
# 1. LightsailにContainerService作成
AWSの公式チュートリアルをご参照ください(https://youtu.be/eOqlLa6paCI)

# 2. Nginxイメージの作成
ReverseProxyとして、ユーザーからのリクエストを受け取って、uWSGIサーバーへ返す役割をします。

“`Dockerfile:Dockerfile
FROM nginx

元記事を表示

Django ランダムかつ有効期限のあるURLを生成し、上位者に承認してもらいアカウントを発行する

## 環境
Windows 11 Home
Python 3.10.2
Django 4.0.2
venv利用あり
(PyPI)
APScheduler==3.8.1 (第2回、第3回で使用。今回は使用しない)

## 関連記事
Django 第1回:[Django Custom User Model の作成](https://qiita.com/startours777/items/706d38e712b0c737a16a)
Django 第2回:[Django 初回ログイン時にパスワード変更を強制する](https://qiita.com/startours777/items/28db625a9bb81a36d4ad)
Django 第3回:[Django 一定期間パスワードを変更していないユーザにパスワード変更を強制する](https://qiita.com/startours777/items/d550ca9b67cea4408a44)
Django 第4回:[Django ランダムかつ有効期限のあるURLを生成し、上位者に承認してもらいアカウントを発行する](https://

元記事を表示

Python3: Cognito から Access Token を取得

AWS の Cognito から JWT Access Token を取得する方法です。
AuthFlow は ADMIN_USER_PASSWORD_AUTH です。
次のページを参考にしました。
[PythonでAWS Cognito認証](https://qiita.com/jp_ibis/items/4fffb3c924504f0ce6fb)

“`py:get_token.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
# get_token.py
#
# Feb/19/2022
#
# ——————————————————————
import sys
import os
import boto3
from dotenv import load_dotenv
# ——————————————————————
def cognito_auth(p

元記事を表示

kivyMDチュートリアル其の肆什玖 Behaviors – Touch篇

ハロー、Qiita!いかがお過ごしでしょうか。

今週は特に技術的なニュースはあまりなかった気がしていますが、オリンピックが
世間を賑わせていますね。そうなのか?ということ仰られる方もいるかと思いますが、
否定はしなく、どちらかというと私もそのような思いが近いです(どっちだ)。

冬のスポーツはあまり馴染みがないので、ニュースだけを見ていますが、みなさん
の推しのスポーツはありますでしょうか。

話はKivyMDに戻り、とうとう今週でエピソード1は終わりにしたいと思います。(なんそれ)
一旦はエピソード1はBehaviors章を区切りにしたいと思います。ver.1.0ももう
そろそろ出るじゃないかと思いますが、エピソード2は1.0が出たときに始動したい
と思います。どんなことやるかはまとめに書こうかなと。

今日については先週からの続きで、Touch篇となります。

ではさっそくですが、今日も元気にレッツラゴ。

## Touch

なにやら冒頭に以下のような記載がありますね。

> Provides easy access to events.

なにやらおぉ、と言ってしまいそうな英

元記事を表示

【Flask】Hello World(uWSGI + Ubuntu)

# はじめに
勉強でflaskを触ったときの、hello worldまでの手順をまとめました。
* WSL2環境を汚したくなかった&勉強のためvenvを利用
* この記事のfile/folderはすべて同じディレクトリ

venv: 同じシステム上で、独立した複数のpython実行環境を生成するためのツール
uWSGI: Pythonを実行するためのアプリケーションサーバー。Flaskにも組み込みのアプリケーションサーバーがあるが、そちらはSingleThreadなので一度に一つのrequestしか捌けないため、ローカルで開発する際もuWSGIを使ったほうが好ましい。

参考にしたサイト
https://riptutorial.com/flask/example/16286/using-uwsgi-to-run-a-flask-application

# 1. venvで仮想Python環境構築
“`
$sudo apt update
$sudo apt upgrade
“`

必要なpackageのinstall
“`
$sudo apt install python3-

元記事を表示

テスト1

“`
import openpyxl
from datetime import datetime as dt

”’
エクセルのシート名にテーブル名を設定
ヘッダ列にカラム名を設定
ファイル名は任意
”’

def calc(ex):
if isinstance(ex, int):
return str(ex)
elif (ex is None) or (ex == ”):
return “””
elif ex in func_str_list:
return str(ex)
else:
return “‘” + str(ex) + “‘”

func_str_list = [‘CURRENT_TIMESTAMP’, ‘NULL’]
# TODO 適宜修正
file_path = ‘input_xlsx_path’
output_path = ‘output_sql_path’
wb = openpyxl.load_workbook(filename=file_path)
ta

元記事を表示

OTHERカテゴリの最新記事