Xserverにryeでpython環境を整備する手順

本記事ではXserverのレンタルサーバにpython実行環境を整備する手順について述べます。最新今時のpython環境管理ライブラリ rye をインストールします。これで私たちのXserverから借りてるLinuxマシンはpythonマシーンとなるのです。なのです。

枕詞

XserverにWordpressを配置したら、普通のブログですと、Wordpressのwp-adminにブラウザからアクセスしてデザインを設定したり記事を投稿したりします。しかし、「記事を定期で自動更新したい」、などの「ちょっと凝ったこと」をしようと思うと、ブラウザからの設定以外に仕込みが必要です。

例えば、本サイトでは、pythonプログラムでsp500とNASDAQ100の最新情報を取得して毎日表示します。

そのためには、

(1) Xserverさんにpythonプログラムを配置する、
(2) pythonプログラムをXserverさんのcronで定期実行するよう設定する、
(3) プログラムがcronでスケジュール通りに実行されてサイトが更新される

みたいな仕込みが必要です。コンピュータをぽちぽちと設定する必要があるのです。

本記事では、pythonプログラムを動かすための設定方法(環境構築方法)を解説します。pythonプログラムの書き方ではなくて、pythonプログラムを動作させるための環境設定の記事になります。

Xserverさんにはpythonが最初から入っていないの?

Xserverさんにはpythoプログラムを動作させるインタプリタがインストールされています。でも、versionがちょい古かったり(2024年末現在 3.6.8、3.6.8はサポートおわてるよ)、自分が使いたいライブラリを好きにインストールできなかったりして、少々使い勝手が悪いです(ライブラリを使わない場合は十分だと思いますが)。そこで、自分のホームディレクトリに自分のpython環境を設定したいと思います。

pythonのバージョン管理ソフト rye

python環境の構築には色々の方法があります。python のインストーラを自分のホームにインストールする、みたいなシンプルな方法も可能ですが、2024年現在のpython界隈では、バージョン管理ソフトでpythonのバージョンやライブラリを管理することが一般的な方法となっています。pythonのバージョン管理プログラムを使う利点は「動作が確認できたpythonのバージョンやライブラリの設定を保存できる」「うまく動いた環境をいじることなく新しいpython環境を立ち上げて新しくライブラリを試すことができる」、などあります。pythonのバージョンが新しくなるたびにインストールし直してライブラリを直接pythonのインタプリタをホームディレクトリにインストールするとか、そういうのやってらんないのです。

pythonバージョン管理ソフト として、今回はryeを使います。ryeは、お手軽、と評判です。”Rye is a one-stop-shop tool”です。ryeの詳細については以下の公式サイトをご参照ください。

https://rye.astral.sh/guide/

これまでのpythonのバージョン管理は、python本体のインストールはpyenvでやって、ライブラリのセットアップの切り分けはvirtualやpoetryでやる、といった風に、色々なソフトをインストールしなければなりませんでした。Pythonのバージョン管理、仮想環境の生成、依存ライブラリの管理など、プロジェクト管理に必要な機能を全て網羅しています。これまでは、pyenv、venv、pipといった複数のツールを使い分ける必要がありましたが、ryeを使うことでそれらを一元化できます(Geminiさん、談)。

rye の ダウンロード&インストール

Xserverにログインして以下のコマンドを叩くとryeの設定ファイルがダウンロードされ → 設定ファイルの内容をLinux付属のスクリプト言語であるbashで実施しています。

$ curl -sSf https://rye-up.com/get | bash

curlコマンド は、様々なネットワークプロトコルを使って、データの送受信を行うことができるコマンドラインツールです。特に、Webページの取得 や APIとの通信 によく利用されます(Geminiさん、談)。XserverはLinuxの一種であるRocky LinuxというOSで動いており、bashが使えます。「|」はUnix系OSのパイプラインという仕組みで、コマンドの連鎖を行うときに前のコマンドと後のコマンドを繋げるために使っています。上記のコマンドでは、curlコマンドでhttps://rye-up.com/get の内容をネットワーク経由で取得して、そのgetの内容をbashのインタプリタで実行します。https://rye-up.com/getの設定ファイルでは(詳細には触れませんが)macやLinuxでのインストール先環境のOS、CPUの判定や、ryeの実体をgithubから取得して配置したりしています。

ryeの実行プログラムが ~/.rye/shims/rye に配置されました。

ryeの配置場所を環境変数に加える

ダウンロードした段階ですと、ryeを実行するのに毎回 「~/.rye/shims/rye」のコマンドを叩く必要があります。「rye」とキータイプしただけでアクセスしたいです。そこで、~/.bashrc に以下の文言を追加します。.bashrcはbashでスクリプト(Linuxシステムを操作する手順を記したもの)を操作する際の設定ファイルです。以下の文言はターミナルを起動した際にホームディレクトリの隠しディレクトリ.rye下のenvファイルを実行するようにしています。

# User specific aliases and functions
source "$HOME/.rye/env"


~/.bashrcの編集にはviなどのエディタが必要です。エディタが使いこなせない場合は、以下のようにechoコマンドで文言を .bashrcファイルに書き込みます。sourceコマンド は、シェルスクリプト(または設定ファイル)に記述された一連のコマンドを、現在のシェル で実行するコマンドです。いわば、そのファイルの内容を現在のシェルに「取り込む」ようなイメージです(Geminiさん、談)。

$ echo 'source "$HOME/.rye/env"' >> ~/.bashrc

すると、以下のようにryeとコマンドを叩くだけで、ryeを呼び出せルようになります。以下の例ではryeをversionオプション付きで呼び出していて、インストールしたryeのバージョンを表示しています。


[m5probserver@svhogehoge ~]$ rye –version
rye 0.38.0
commit: 0.38.0 (3e3c8540f 2024-08-02)
platform: linux (x86_64)
self-python: cpython@3.12.4
symlink support: true
uv enabled: false

ryeによるpythonのインストール

rye経由で Xserverの自分のディレクトリに pythonをインストールすることができます。ダウンロードできるpythonのversionを調べる。

$ rye toolchain list --include-downloadable

cpythonの3.12.1をダウンロード

$ rye toolchain fetch cpython@3.12.4

ryeにインストールしたpythonをシステムのpythonとして使用する場合に設定します。

$ rye config --set-bool behavior.global-python=true

rye pin とすれば、.python-versionにpythonのバージョンが上書きされて、pythonのバージョンを切り替えることができます。

$ rye pin 3.12.4
   pinned 3.12.4 in /home/m5probserver/.python-version
$ python --version
   Python 3.12.4

pythonの3.12.4のがインストールされてホームディレクトリから使えるようになっています。

rye による プロジェクトごとのpythonライブラリ管理

pythonのバージョン管理を行う動機はpythonプログラムごとに使用するpip ライブラリ(pythonプログラムから呼び出されるOSSなどのライセンスで公開されたpythonライブラリ)を管理したいからです。ryeでpythonプログラムのライブラリなどの環境を管理したい場合は、以下のコマンドでプロジェクトを作成します。

$ rye init <任意のpython_projectの名前>

プロジェクトを作成すると、<任意のpython_projectの名前>のディレクトリができます。このディレクトリにryeでpython環境を管理するための各種ファイルが作成されています。ディレクトリに移動すると、pyproject.toml がありますが、このファイルがプロジェクトの設定ファイルとなります。他、プロジェクトのpythonのバージョンを指定する.python-versionファイルも作成されています(隠しファイルなので ls -a で表示すると見えます)。

このディレクトリでプロジェクトで利用するpythonのpip ライブラリをrye add コマンドで指定します。add後にsyncすることでライブラリがpyproject.tomlに記載され、プロジェクト内のpythonコードから利用できるようになるのです。

$ rye add beautifulsoup4
$ rye sync

rye add コマンド で追加したpipライブラリはプロジェクトディレクトリの.venv下にインストールされます。このプロジェクトの仮想環境のpipライブラリとしてインストールされ、このプロジェクトのpythonコードからimportして呼ぶことができるようになります。なお、rye installなるコマンドもあるのですが、こちらはグローバルツールのインストールに使うようです。例えば、isortというpythonコードの静的解析ツール(pythonコードの整っているかどうかをチェックしてくれます)のインストールに使います。

Xserverでのcronを介したpythonコードの呼び出し方

cronはLinux環境でのスケジューラでして、時刻指定でプログラムやツールを実行してくれます。cronで以下のようにpythonコマンドを叩くように設定しています(cronの設定はXserverのサーバーパネルで実行できます。いつか記事にします)。

( source /home/m5probserver/.bashrc && source /home/m5probserver/.rye/env && cd /home/m5probserver/m5pr-observer.com/public_html/python/m5percentrule && /home/m5probserver/.rye/shims/python download_stock_info.py && /home/m5probserver/.rye/shims/python gogo_update_wordpress_index_page.py ) >> /home/m5probserver/log/cronjob.log 2>&1

実は「.bashrc」でenvを呼ぶので2回目のenvは蛇足なのです(めんどくさいので直してません)。

このcron設定の肝は「cd /home/m5probserver/m5pr-observer.com/public_html/python/m5percentrule」とryeで作ったプロジェクトのディレクトリに移動していることです。移動することで、ryeで作ったpyproject.tomlに基づいてpythonを起動します。これで自分がaddしたライブラリも使えます。

pythonの呼び出しはフルパスを指定していますが、cronの御作法だったと思います。でも、フルパスを指定する必要があるのかは検証していません。

とはいえ、ワタクシのXserverさんではこれでエラーを出力することなくpythonプログラムが動作しているのです。download_stock_info.py でSP500とNASDAQ100の情報を取得してDBを更新し、gogo_update_wordpress_index_page.py で DBの情報からWordpressのホームページを更新するという流れです。

これにてワタクシはXserver上で自分が望んだライブラリをインストールしてpythonプログラムを実行できるようになりました。pythonのプログラムを書けばブログの更新も自動化できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です