はじめに
Ansibleで構成管理を変更する際には事前に動作確認をします。実際に運用されている環境に合わせて検証するために、手元の環境を運用環境に合わせます。PythonやAnsibleのバージョンで異なる組み合わせを用意する場合、venvではなくpyenv1を利用します。また、pyenv-virtualenv2プラグインで特定のPythonバージョンを元にAnsible実行環境を用意します。
今回は、Ansibleの開発環境を用意するために自分のメモ用として残しつつ、他の方にもためになるようならば嬉しい限りです。
環境構築
pyenvのインストール
早速、pyenvをインストールしていきます。
手順は、GitHubのREADME3に記載されていますので、そちらも確認してみてください。
$ cd $HOME $ curl -fsSL https://pyenv.run | bash
pyenv用にシェル環境を設定します。
一部のシステムでは手順が異なるようですので、ご注意ください。
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc $ echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc
シェルの再起動をします。
$ exec "$SHELL"
pyenvのwiki4を参照し、Pythonのビルド依存関係をインストールします。
Python3.14 以降では、"libzstd-dev"もインストールする必要があるそうです。
$ sudo apt update; sudo apt install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl git \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
インストールしたpyenvのバージョンを確認をします。
$ pyenv --version pyenv 2.6.12
pyenvの動作確認
実際に、pyenvがどのように動くのかを見てみます。
以下のコマンドでpyenvにインストール可能なリストを表示します。出力結果が多いため一部省略しています。
$ pyenv install --list 3.11.12 3.11.13 #<--インストール対象 3.11.14 3.12.10 3.12.11 3.12.12 #<--インストール対象
例として、Python 3.11.13とPython 3.12.12をインストールします。手元の環境に合わせて必要なパッケージをインストールしてください。
$ pyenv install 3.11.13 Downloading Python-3.11.13.tar.xz... -> https://www.python.org/ftp/python/3.11.13/Python-3.11.13.tar.xz Installing Python-3.11.13... Installed Python-3.11.13 to /home/username/.pyenv/versions/3.11.13 $ pyenv install 3.12.12 Downloading Python-3.12.12.tar.xz... -> https://www.python.org/ftp/python/3.12.12/Python-3.12.12.tar.xz Installing Python-3.12.12... Installed Python-3.12.12 to /home/username/.pyenv/versions/3.12.12
作業フォルダを作成します。
フォルダ名は任意で大丈夫です。
$ cd $HOME $ mkdir pyenv-test
準備ができましたので、pyenvでPythonのバージョンがどのように変化するかを確認していきます。
まずは、グローバルのPythonバージョンを確認します。特に指定をしなければ、グローバルのバージョンが適用されることになります。
環境によってはPythonのバージョンが異なるかもしれませんが、以下の出力と異なる場合であっても問題ありません。
$ cd $HOME $ python3 --version Python 3.10.12
次は先ほどインストールしたPython 3.11.13に切り替えてみます。バージョンを切り替える際は、作業ディレクトリに移動してから実施します。
$ cd pyenv-test $ pyenv local 3.11.13 $ python3 --version Python 3.11.13
では、作業ディレクトリはそのままに、次はPython 3.12.12に切り替えてみます。
$ pyenv local 3.12.12 $ python3 --version Python 3.12.12
pyenv-virtualenvでAnsible用環境を用意
Pythonのバージョンの切替が確認できたところで、次は特定のPythonのバージョンでAnsible専用環境を用意します。今回は、Python 3.11.13とansible [core 2.17.6]で環境を作成します。必要なコレクションがあればそちらもインストールしてください。リモートリポジトリにプロジェクトが存在する場合は、クローンすることで作業準備完了となります。
$ cd $HOME ### コマンドは、「pyenv virtualenv <インストールしたPythonのバージョン> <任意の名前>」で実行 $ pyenv virtualenv 3.11.13 ansible_pj_env_3-11 $ pyenv versions * system (set by /home/username/.pyenv/version) 3.11.13 3.11.13/envs/ansible_pj_env_3-11 3.12.12 ansible_pj_env_3-11 --> /home/username/.pyenv/versions/3.11.13/envs/ansible_pj_env_3-11 $ cd pyenv-test $ pyenv local ansible_pj_env_3-11 $ python3 --version Python 3.11.13 $ python -m pip install --upgrade pip $ pip install ansible-core==2.17.6 $ ansible --version ansible [core 2.17.6] config file = None configured module search path = ['/home/username/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/username/.pyenv/versions/3.11.13/envs/ansible_pj_env_3-11/lib/python3.11/site-packages/ansible ansible collection location = /home/username/.ansible/collections:/usr/share/ansible/collections executable location = /home/username/.pyenv/versions/ansible_pj_env_3-11/bin/ansible python version = 3.11.13 (main, Nov 1 2025, 18:59:08) [GCC 11.4.0] (/home/username/.pyenv/versions/3.11.13/envs/ansible_pj_env_3-11/bin/python) jinja version = 3.1.6 libyaml = True ### 必要なコレクションをインストール ### git clone でブランチをダウンロード
ansible-core をインストールした環境(ansible_pj_env_3-11)からpyenv local --unsetで抜けてから、別環境に切り替えます。
すると、ansible-core がインストールされていない環境になったので、ansibleコマンドが見つかりませんと表示されました。ansible_pj_env_3-11にはansibleコマンドが存在することも記載されてますね。
このように、環境を汚さずに、バージョンによって環境を簡単に切替られるのはとても便利ですね。
$ pyenv local --unset
$ python3 --version
Python 3.10.12
$ pyenv local 3.12.12
$ python3 --version
Python 3.12.12
$ ansible --version
pyenv: ansible: command not found
The `ansible' command exists in these Python versions:
3.11.13/envs/ansible_pj_env_3-11
ansible_pj_env_3-11
Note: See 'pyenv help global' for tips on allowing both
python2 and python3 to be found.
- https://github.com/pyenv/pyenv↩
- https://github.com/pyenv/pyenv-virtualenv↩
- https://github.com/pyenv/pyenv/blob/master/README.md↩
- https://github.com/pyenv/pyenv/wiki#suggested-build-environment↩























