🎧

Ansibleを使ってPython仮想環境を構築する(bluepy)

2025/02/10に公開

関連キーワードで検索すると、Python仮想環境上へAnsibleをインストールする記事はよく出てくるのですが、逆(?)のAnsibleを使ってPython仮想環境を構築する記事があまりなかったので書きました。

やりたいこと

仮想サーバ上でBlutoothデバイスを触りたかったので、仮想環境上へpipコマンドでbluepyをインストールします。グローバルにbluepyをインストールしようとすると、PEP668エラーで怒られてしまうので、Python仮想環境を作成しました。AnsibleのPlaybookを使って、仮想サーバ上へPython仮想環境を構築します。これにより、仮想サーバを壊しても簡単に環境を復元できます。

前提環境

  • Debian 12.8
  • Ansible Core 2.14.18
  • Python 3.11.2
  • ターゲットサーバの/home/user/venvにPython仮想環境を作成

Ansible Playbook

早速ですがPlaybookの中身です。Ansibleを触るのは初めてなので、イケてない書き方があったらご容赦ください。。。

 # Targets section
- name: Play-set-blupy-env
  hosts: targets #targetsは別ファイルで指定しています
  become: yes
  gather_facts: yes

  # Tasks section
  tasks:
    - name: install package from apt
      ansible.builtin.apt:
        name:
          - libglib2.0-dev
          - python3
          - python3-pip
          - python3-venv
          - bluez
        state: present
      when: ansible_distribution == 'Debian'

    - name: Create venv dir
      ansible.builtin.file:
        path: /home/user
        state: directory
        mode: 0755

    - name: Create venv
      command:
        cmd: python3 -m venv /home/user/venv

    - name: activate VENV pip
      ansible.builtin.pip:
        name: pip
        virtualenv: /home/user/venv

    - set_fact:
        # ターゲットサーバ上で使用するPython実行ファイルとしてPython仮想環境の実行ファイルを登録
        ansible_python_interpreter: /home/user/venv/bin/python3.11

    - name: install python packages from pip
      ansible.builtin.pip:
        name:
          - bluepy
        state: present

Discussion