2023年10月29日日曜日

徒然じゃない日々(26)

農家として目の前の物理と向き合っていると、PC1台でどこでも働くことができるリモートワークみたいなものにちょっと憧れます。

……というわけで、せっかくのやりたいことはやってみよう!と思いまして、最近、隙間の時間を活用してフリーのプログラマーとして働き始めました。

幸いなことにご依頼もいただくことができ、自作スマート農業でも使っている GAS や Python でいろいろと作っています。強制的にスキルアップもしていくので、とても楽しいです。

これをまた自作スマート農業の開発に還元していければと思います。

***


話は変わりまして、先日、農業や農村に関する会議に出席する機会がありました。

若干思うところがあったので、ちょっと記録しておこうと思います。

人口減少・高齢化が進む中で、今ある農地を全部守っていくのは不可能。これは、おそらく多くの関係者が感じているところではないかと思います。

農林水産省が公開している「地域計画策定マニュアル(Ver.3.2)」でも協議事項「農業上の利⽤が⾏われる農⽤地等の区域」として言及がされており、どうしても農業利用できない土地は、より省力的で簡易な方法で保全等行っていきましょう、ということになっています。

市の基本計画では、担い手への農地の集積や遊休農地の削減が項目としてありますが、こことのすり合わせが、今後、非常に重要になっていきそうです。

また、いざ農地利用をやめた際に、「省力的で簡易な方法」による管理にスムーズに移行できるものなのか、というのは個人的にとても疑問で、また次の課題になっていきそうな気がしています。

***


そんなこんなで、日々あれこれありますが、地道にコツコツやっていくしかないですね。頑張っていきましょう。



2023年10月28日土曜日

Pyinstaller で Python スクリプトを実行ファイルに変換(exe 化)する

Pyinstaller を用いて Python スクリプトを実行ファイルに変換(exe 化)する機会があったので、いつものごとく備忘録です。Python を実行するための環境を整えなくてもいいというのは、本当に便利ですね。

今回は、venv モジュールで仮想環境の構築を行い、その上で PyInstaller を用いて Python スクリプト を実行ファイルへ変換(exe 化)します。

PyInstaller のデメリットとして、ファイルサイズが大きくなることが挙げられます。必要なパッケージのみをインストールした仮想環境上で実行ファイルを作成することで、ファイルの肥大化を抑えます。

尚、PyInstaller の実行環境は Windows 11 Pro 22H2、Python 3.11.0 です。PyInstaller で作成した実行ファイルの互換性は同一 OS に限られるため、Windows で作成したものは、Windows 上でしか動きません。


▼ venv モジュールによる仮想環境の構築・有効化


プロジェクト用のフォルダを作成・移動。
$ mkdir project
$ cd project

仮想環境の作成。
$ python -m venv 仮想環境名

プロジェクト用フォルダ内に、仮想環境名のフォルダが作成されます。仮想環境名には一般的に venv や env が使われるそうです。

pip が最新の状態でインストールする場合は以下のコマンド。(たぶん、基本的にはこっちで作っておいた方が便利)
$ python -m venv --upgrade-deps 仮想環境名

仮想環境の有効化。
$ venv\Scripts\activate


ちなみに、仮想環境は初期化(インストールしたパッケージ等のクリア)も可能。以下の通り deactivate で仮想環境を終了した上で、クリアを実行。
$ deactivate
$ python -m venv --clear 仮想環境名

また、仮想環境名のフォルダをまるごと削除することで、仮想環境自体の削除ができます。


▼ PyInstaller で実行ファイルへ変換(exe 化)


以下、仮想環境下での操作となります。

PyInstallar をインストール。
$ pip install pyinstaller

Python ファイルを実行ファイルに変換(exe 化)。
$ pyinstaller sample.py --onefile --noconsole

関連ファイルをひとつにまとめる「--onefile」と、実行時にコンソール画面を表示させない「--noconsole」は付けておいた方がいいみたいです。


プロジェクト用のフォルダ内に「build」「dist」という2つのフォルダと spec ファイルが作成されます。実行ファイル(exe)は「dist」フォルダ内にあります。


ということで、とりあえず動くものが作れました。


独習Python
独習Python

by SimpleImageLink


・追記(2023-10-30)

PyInstaller で作成した実行ファイルは、Windows Defender 等のセキュリティソフトによってウィルス判定されることが多々あるようです。(「ファイルにウイルスまたは望ましくない可能性のあるソフトウェアが含まれているため、操作は正常に完了しませんでした。」等のメッセージが出る)

その際は、以下のページで紹介されているような対策があるようです。



これでもダメな場合は、ひとまずセキュリティソフト側で除外設定等するしかないんですかね、たぶん。


大あくび

2023年10月22日日曜日

再生産可能な価格を維持していく

今年は、社会環境や天候の振れが激しいですね。

変化の方向性としては、概ねかねてから言われていたもののように思う一方で、こんなにも劇的に、一気に変わるものなのか、という驚きが強いです。

後々振り返った時に、2023年がターニングポイントだったね、となりそうな気がします。

また、農業経営の形態としても、家業的なものから企業的なものへと主流が移りつつある(ような雰囲気が漂う)なかで、ここにどう向き合っていくのかということは考えなければなりません。


しかし、環境や形がどのように変化しようと、継続という視点において最も大切なことは、再生産可能な価格を維持していくことだと思っています。

ここさえクリアできていれば、何はともあれ生き残っていくことはできるのかなと……。


原木椎茸に関しまして、今シーズンより、およそ10年ぶりに価格を上げさせていただきました。

価格に見合った品質の原木椎茸を提供できるように、しっかり栽培していきます。

どうぞ宜しくお願い致します。


原木椎茸

2023年10月10日火曜日

Selenium と BeautifulSoup でブラウザ経由のスクレイピングを試みる

-----
・追記 2023-10-24

Driver を自動的にバージョンアップしてくれる Webdriver Manager を使用する方法に変更しました。
-----

Selenium と BeautifulSoup を使い、ブラウザ経由のスクレイピングをする機会があったので、備忘録を残しておこうと思います。

Requests からではデータを取得できないウェブページであっても、この方法であれば可能になります。例えば、Amazon 某大手通販サイトとかですね。(スクレイピングは利用規約を守り、サーバーに負担をかけないように配慮の上で行う必要があります)


独習Python
独習Python

by SimpleImageLink


今回は、ローカルマシンではなく、GCE(Google Compute Engine)上の Ubuntu 22.04 LTS で動かす想定です。

Python や pip 等のパッケージはインストールされているものとしています。

ブラウザは Chrome を使用します。


まずは、selenium と BeautifulSoup をインストール。
$ sudo pip install selenium
$ sudo pip install beautifulsoup4

Chrome をインストール。
$ sudo apt -y update
$ sudo apt install -y wget
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo apt install -y ./google-chrome-stable_current_amd64.deb
$ sudo apt install -y -f

Webdriver Manager をインストール。
$ sudo pip install webdriver_manager

これで、下準備が整いましたので、Selenium と BeautifulSoup によるスクレイピングができるようになりました。


以下、簡単な例として、このブログのタイトルを取得するためのコードになります。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import WebDriverException
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

# Seleniumの設定を行います
options = Options()
options.add_argument("--headless")  # ブラウザを表示しない設定(バックグラウンドで実行)
options.add_argument("--ignore-certificate-errors")  # SSL証明書のエラーを無視

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

# ウェブページにアクセスします
url = "https://www.nakakamado.com/"
driver.get(url)

# ウェブページの読み込みが完了するまで待機します(最大10秒)
driver.implicitly_wait(10)

# ウェブページの内容をBeautiful Soupで解析します
soup = BeautifulSoup(driver.page_source, "html.parser")

# タイトルを取得します
title = soup.find("title")

# タイトルを出力します
print(title.text)

# ブラウザを閉じます
driver.quit()


ということで、Selenium と BeautifulSoup でブラウザ経由のスクレイピングでした。


ちなみに、コードは ChatGPT に書いてもらいました(ちょっと修正)。

もう少し大きめなコードだったり、知らないライブラリを利用する際にも、最初の骨格部分を書いてもらい、そこから都度エラーの解説をしてもらいつつ作ると、とても捗ります。勉強にもなります。


足利フラワーパークの睡蓮