PR

コアサーバーV2でPython 3.12をインストールしGeminiと連携する方法

コアサーバーV2 Python 3.12インストール & Gemini連携と書かれた画像 ノウハウ
記事内に広告が含まれています。

もともとコアサーバーv2にはPythonが入っています。ですが、そのもともと入っているPythonのバージョンが古く(バージョン3.6.8)、Python上で使用したかった機能(Gemini連携)が使えませんでした。

ですのでPythonのバージョンをあげてみようって話です。

Python3.11.8の導入は既にしたので、今回は3.12.13を入れてみようかと思います。

3.11.8の導入のときは、必死すぎて記録に残っていないです。AIが提示したコード全部実行したので状況も不明。

コアサーバーV2にバージョン3.6.8よりも新しいバージョンのPythonのインストール方法は、インターネットで調べてAIと相談しながらなんとかインストールしました。

CORESERVER V2 Python インストール で調べてヒットした内容で導入済みです。

Python: 3.11.8(~/.local/bin/python3)が存在しています。

新しいバージョンを入れたいのでGeminiに質問しながら導入していきます。

この記事にあるコマンド・コードはすべてAIが教えてくれた内容です。投稿者本人の知識はゼロです。

Pythonのインストール

まずはSSH接続してコマンドを入力していきます。

コマンドを入力
cd ~
コマンドを入力
wget https://www.python.org/ftp/python/3.12.13/Python-3.12.13.tgz
コマンドを入力
tar xzf Python-3.12.13.tgz
コマンドを入力
cd Python-3.12.13

cd ~を実行したのでホームディレクトリにいます。ホームディレクトリにPython-3.12.13フォルダができました。

ホームディレクトリにPython-3.12.13フォルダを作る予定なかった。(AIの提示したコードそのままコピペのため失敗)

今 Python-3.12.13 フォルダの中にいるはずなので、一旦外に出ます。

コマンドを入力
cd ..

フォルダを .local/tmp の中へ移動

コマンドを入力
mv Python-3.12.13 ~/.local/tmp/

作業場所へ移動

コマンドを入力
cd ~/.local/tmp/Python-3.12.13

libffiを認識させつつ、インストール先を .local に指定

コマンドを入力
./configure --enable-optimizations --with-system-ffi --prefix=$HOME/.local
コマンドを入力
make -j$(nproc)

最後にこんなエラーメッセージが出ました。

make[2]: Leaving directory '/home/(ユーザー名)/.local/tmp/Python-3.12.13'
make[1]: *** [Makefile:799: profile-gen-stamp] Error 2
make[1]: Leaving directory '/home/(ユーザー名)/.local/tmp/Python-3.12.13'
make: *** [Makefile:811: profile-run-stamp] Error 2

Geminiにすぐ相談

そのエラーは、–enable-optimizations を有効にした際に行われる PGO(Profile Guided Optimization) というプロセスで発生しています。

これは、Pythonを実際に一度動かして動作速度を最適化しようとするステップなのですが、CoreServerのような制限のある共有環境では、テスト実行時にリソース不足や環境の細かな違いで「Error 2」となって止まってしまうことがよくあります。

この最適化を外せば、ビルドはスムーズに通ります。以下の手順でやり直してみてください。

解決手順:最適化を外して再ビルド
一度失敗した情報をクリアしてから、設定を変更してやり直します。

なぜエラーになったのか?

–enable-optimizations は「実際にPythonを動かして性能を測る」工程を含むため、共有サーバーの制限に引っかかりやすい。

・・・なんだかよくわからないけどコアサーバーだから出たみたいです。Geminiに言われた通りのコマンドを実行します。

ビルド情報のクリーンアップ

コマンドを入力
make clean

再度設定(–enable-optimizations を外す)
インストール先などは .local で完結させる設定を維持します。

コマンドを入力
./configure --prefix=$HOME/.local --with-system-ffi

最後のメッセージがこんな感じになりました。

...
configure: creating Makefile
configure:

If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations

すぐにGeminiに報告。

そのメッセージが表示されれば、./configure(設定)は無事に成功しています!

そのメッセージは「もっと速く動かしたいなら、PGO(最適化)を有効にしてね」という親切なアドバイスですが、先ほど試した通り、CoreServer環境ではその最適化がエラーの原因になってしまうため、今回はあえて無視して進めるのが正解です。

らしいのでこのまま続けます。

コマンドを入力
make -j$(nproc)

最後に出てきたメッセージが以下です。

...
./python -E -S -m sysconfig --generate-posix-vars ;\
if test $? -ne 0 ; then \
echo "generate-posix-vars failed" ; \
rm -f ./pybuilddir.txt ; \
exit 1 ; \
fi
./python -E -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform

心配性なのでGeminiに尋ねます。

エラーメッセージ(generate-posix-vars failed など)が出ていなければ、処理は正常に進んでいます。

うまくいってるっぽい。

既存のPython3.11とコマンドが衝突しないようaltinstallを使います。

コマンドを入力
make altinstall

なぜinstallではなくaltinstallなのかGeminiにきいたところ、

コアサーバーのような共有サーバーで sudo 権限がない、あるいはOSを壊したくない場合は、必ず altinstall を使うのが作法である

もし今回も make install を選んでいたら、~/.local/bin/python3 という名前が 3.12 に書き換えられて(上書きされて)しまっていました。

らしいです。


インストール後に出てきたメッセージ

Looking in links: /tmp/tmp4ikahb9w
Processing /tmp/tmp4ikahb9w/pip-25.0.1-py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-25.0.1

うまくいったみたいですが念のためGeminiに共有します。

おめでとうございます!インストール成功です!

そのログ(Successfully installed pip-25.0.1)は、Python本体だけでなく、パッケージ管理ツールの pip も無事に 3.12用 としてインストールされたことを意味しています。

これで .local 完結型の Python 3.12.13 環境 が整いました。

バージョンの確認をします。

コマンドを入力
~/.local/bin/python3.12 -V

Python 3.12.13

コマンドを入力
~/.local/bin/python3 -V

Python 3.11.8

どっちも確認できました。うまくいっているみたいです。やったー

反省

最初はホーム直下にフォルダを作ってしまいました。Geminiの提案を何の疑問も思わず実行してしまったのがよくありませんでした。コマンドの意味もGeminiに聞きながら作業しましょう。

Geminiをインストール

Python3.12の方にもGeminiをインストールします。

コマンドを入力
python3.12 -m pip install -U google-generativeai

最後に出てきたメッセージ

[notice] A new release of pip is available: 25.0.1 -> 26.0.1
[notice] To update, run: pip install --upgrade pip

Gemini教えて!

そのメッセージ、つい癖で pip install –upgrade pip と打ってしまいそうになりますが、「複数のPythonを共存させている環境」では少しだけ注意が必要です。

単に pip と打つと、どのPythonのpipが動くか曖昧になることがあるため、確実に Python 3.12用のpip をアップデートするために以下のコマンドを実行しましょう。

Python 3.12 用の pip をアップデートする

コマンドを入力
python3.12 -m pip install --upgrade pip

なぜ python3.12 -m を付けるのか?
混線を防ぐ: 今の環境には 3.11 と 3.12(そしてシステム標準の 3.6)の pip が同居しています。

確実性: -m pip と書くことで、「Python 3.12さん、あなたの持っている pip を更新してください」と直接指名できるので、他の環境を壊す心配がありません。

ついでに 3.11 側も確認してみる?
もし 3.11 側の pip も最新にしておきたい場合は、同様にこちらを叩けばOKです。

python3 -m pip install --upgrade pip

これで Gemini 関連のライブラリを入れる準備も完璧に整いました。

Geminiがそう言うなら確認しようかな。

コマンドを入力
python3 -m pip install --upgrade pip

最後に出てきたメッセージ

Requirement already satisfied: pip in /home/(ユーザー名)/.local/lib/python3.11/site-packages (26.0.1)

今 python3(3.11.8)として動かしている環境の pip は、すでに最新の 26.0.1 にアップデート済みであるということを示しています。

アップデート済みでした。よかった。

Geminiにバージョンを聞いてみる

コマンドを入力
python3.12 -c "import google.generativeai as genai; print(genai.version)"

エラーメッセージっぽいのがでたのかな。

:1: FutureWarning:

All support for the google.generativeai package has ended. It will no longer be receiving
updates or bug fixes. Please switch to the google.genai package as soon as possible.
See README for more details:

https://github.com/google-gemini/deprecated-generative-ai-python/blob/main/README.md

0.8.6

Geminiに聞きます。

おっと、重要な警告(FutureWarning)が出ましたね!
Python 3.12 という新しい環境を入れたタイミングで、ちょうどGoogle側のライブラリも「世代交代」の時期に重なったようです。

警告の内容を要約すると:

「これまでの google-generativeai パッケージはサポートを終了しました。今後は新しい google-genai パッケージに切り替えてください」

とのことです。せっかく新しい 3.12 環境を作ったので、ライブラリも「非推奨」のものではなく、最新の推奨版に乗り換えてしまいましょう!

これじゃなかったみたいです。

新しいライブラリ(google-genai)の導入

以下のコマンドで、新しい推奨パッケージをインストールします。

コマンドを入力
python3.12 -m pip install google-genai

手ごたえあり。このようなメッセージが出てきました。

Using cached anyio-4.13.0-py3-none-any.whl (114 kB)
Using cached distro-1.9.0-py3-none-any.whl (20 kB)
Using cached httpx-0.28.1-py3-none-any.whl (73 kB)
Using cached httpcore-1.0.9-py3-none-any.whl (78 kB)
Using cached tenacity-9.1.4-py3-none-any.whl (28 kB)
Downloading websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (184 kB)
Using cached h11-0.16.0-py3-none-any.whl (37 kB)
Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Installing collected packages: websockets, tenacity, sniffio, h11, distro, anyio, httpcore, httpx, google-genai
Successfully installed anyio-4.13.0 distro-1.9.0 google-genai-1.73.1 h11-0.16.0 httpcore-1.0.9 httpx-0.28.1 sniffio-1.3.1 tenacity-9.1.4 websockets-16.0

Geminiの動作確認

新しいライブラリでGeminiに聞いてみようのためのコマンドは以下です。

コマンドを入力
python3.12 -c "from google import genai; client = genai.Client(api_key='YOUR_API_KEY'); response = client.models.generate_content(model='gemini-2.0-flash', contents='Python 3.12からこんにちは'); print(response.text)"

YOUR_API_KEYは自分のAPIキーを入れてください。

APIキーはGoogle AI Studioから取得できます。取得にはGoogleアカウントが必要です。APIは無料枠があります。

ちなみに3.11を入れたときもGeminiをインストールしています。.envにGEMINI_API_KEYが入っています。ですのでそれ使いたいですとGeminiに投げかける。

.env ファイルに API キーを保存しているのは、セキュリティの観点からも非常に素晴らしい管理方法ですね!

褒められたけど.envを使うこの方法は全部AIに聞きました。言われたとおりにしただけなのに。

必要なライブラリの導入

.env ファイルを読み込むための python-dotenv も、3.12 側に入れておきましょう。

コマンドを入力
python3.12 -m pip install python-dotenv

最後にこんなメッセージがでました。

Collecting python-dotenv
Using cached python_dotenv-1.2.2-py3-none-any.whl.metadata (27 kB)
Using cached python_dotenv-1.2.2-py3-none-any.whl (22 kB)
Installing collected packages: python-dotenv
Successfully installed python-dotenv-1.2.2

うまくいったっぽいです。

test.pyを実行してGeminiを確認する

こちらのコードをtest.pyという名前を付けて保存します。

コードの中に日本語がありますので文字コードはUTF-8にして保存しましょう。

test.pyを作成
import os
from dotenv import load_dotenv
from google import genai

# .envファイルを読み込む
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")

# クライアントの初期化(新しいライブラリの書き方)
client = genai.Client(api_key=api_key)

# 実行テスト
response = client.models.generate_content(
    model="gemini-2.0-flash", 
    contents="Python 3.12と.envの連携テストです。応答してください。"
)

print(response.text)

test.pyを適当なところにアップロードして実行。

GEMINI_API_KEYは.envファイルの内容にあわせてください。

コマンドを入力
python3.12 test.py

429エラー。

raise ClientError(status_code, response_json, response)
google.genai.errors.ClientError: 429 RESOURCE_EXHAUSTED. {'error': {'code': 429, 'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. \n* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_input_token_count, limit: 0, model: gemini-2.0-flash\n* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 0, model: gemini-2.0-flash\n* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 0, model: gemini-2.0-flash\nPlease retry in 12.414996802s.', 'status': 'RESOURCE_EXHAUSTED', 'details': [{'@type': 'type.googleapis.com/google.rpc.Help', 'links': [{'description': 'Learn more about Gemini API quotas', 'url': 'https://ai.google.dev/gemini-api/docs/rate-limits'}]}, {'@type': 'type.googleapis.com/google.rpc.QuotaFailure', 'violations': [{'quotaMetric': 'generativelanguage.googleapis.com/generate_content_free_tier_input_token_count', 'quotaId': 'GenerateContentInputTokensPerModelPerMinute-FreeTier', 'quotaDimensions': {'model': 'gemini-2.0-flash', 'location': 'global'}}, {'quotaMetric': 'generativelanguage.googleapis.com/generate_content_free_tier_requests', 'quotaId': 'GenerateRequestsPerMinutePerProjectPerModel-FreeTier', 'quotaDimensions': {'model': 'gemini-2.0-flash', 'location': 'global'}}, {'quotaMetric': 'generativelanguage.googleapis.com/generate_content_free_tier_requests', 'quotaId': 'GenerateRequestsPerDayPerProjectPerModel-FreeTier', 'quotaDimensions': {'model': 'gemini-2.0-flash', 'location': 'global'}}]}, {'@type': 'type.googleapis.com/google.rpc.RetryInfo', 'retryDelay': '12s'}]}}

model="gemini-2.0-flash",だと動作しないみたいです。

test.pyのコードをmodel="gemini-2.5-flash",に変えて再実行。

test.pyを編集
import os
from dotenv import load_dotenv
from google import genai

# .envファイルを読み込む
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")

# クライアントの初期化(新しいライブラリの書き方)
client = genai.Client(api_key=api_key)

# 実行テスト
response = client.models.generate_content(
    model="gemini-2.5-flash", 
    contents="Python 3.12と.envの連携テストです。応答してください。"
)

print(response.text)

はい、承知いたしました。Python 3.12と.envファイルの連携テストについてご案内します。

.envファイルは、アプリケーションの設定情報(データベース接続情報、APIキー、デ バッグフラグなど)をコードから分離し、環境変数として管理するための一般的な方法です。これにより、機密情報をバージョン管理システムに含めずに済み、異なる環境(開発、ステージング、本番)で異なる設定を簡単に切り替えることができます。

(中略)

まとめとベストプラクティス

  • 機密情報の管理: .envファイルは、APIキー、データベース認証情報などの機 密情報を安全に管理するための優れた方法です。
  • .gitignoreへの追加: .envファイルは絶対にバージョン管理システムにコミットしないでください。必ず.gitignoreに追加してください。
  • 環境ごとの設定: 開発環境、ステージング環境、本番環境などで異なる.envファイルを使い分けることで、アプリケーションのデプロイが容易になります。
  • 型変換: os.getenv()で取得される値は常に文字列です。数値やブール値とし て利用する場合は、明示的に型変換を行う必要があります。
  • 本番環境での利用: 本番環境では、アプリケーションを起動する環境に直接OSの環境変数を設定することが推奨されます。python-dotenvは開発中の利便性を高めます が、本番環境ではサーバーの設定やCI/CDパイプラインを通じて環境変数を注入するのが より一般的かつセキュアです。load_dotenv()はOSに設定された環境変数があればそれ を優先します。

これで、Python 3.12アプリケーションが.envファイルから環境変数を安全かつ簡単に 読み込むことができるようになりました。

なんかすごい長文が返ってきたのでGeminiの連携ができたみたいです。

タイトルとURLをコピーしました