🌊

AnsibleでPythonの仮想環境を作成する

に公開

ちょくちょく使うのでメモ

以下のyamlファイルを修正してansible-playbookで実行すればOK。Raspberry Pi OS/Ubuntu用。
内容はこんな感じ。

---
- hosts: localhost
  tasks:
    
    - name: Install dependencies for Python build
      become: yes
      apt:
        name: "{{ item }}"
        state: present
      loop:
        - make
        - build-essential
        - libssl-dev
        - zlib1g-dev
        - libbz2-dev
        - libreadline-dev
        - libsqlite3-dev
        - wget
        - curl
        - llvm
        - libncurses5-dev
        - libncursesw5-dev
        - xz-utils
        - tk-dev
        - libffi-dev
        - liblzma-dev
        - python3-openssl
        - git

    - name: Clone pyenv repository
      git:
        repo: 'https://github.com/pyenv/pyenv.git'
        dest: '~/.pyenv'
        update: no

    - name: Set up Pyenv environment variables
      lineinfile:
        dest: '~/.bashrc'
        line: |
          export PYENV_ROOT="$HOME/.pyenv"
          export PATH="$PYENV_ROOT/bin:$PATH"
          eval "$(pyenv init --path)"

    - name: Apply Pyenv environment variables
      shell: |
        export PYENV_ROOT="$HOME/.pyenv"
        export PATH="$PYENV_ROOT/bin:$PATH"
        eval "$(pyenv init --path)"

    - name: Install Python 3.12.7 with Pyenv
      shell: |
        export PYENV_ROOT="$HOME/.pyenv"
        export PATH="$PYENV_ROOT/bin:$PATH"
        eval "$(pyenv init --path)"
        pyenv install 3.12.7
      args:
        creates: "~/.pyenv/versions/3.12.7"

    - name: Set Python 3.12.7 as global default
      shell: |
        export PYENV_ROOT="$HOME/.pyenv"
        export PATH="$PYENV_ROOT/bin:$PATH"
        eval "$(pyenv init --path)"
        pyenv global 3.12.7

    - name: Confirm Pyenv Python version is set to 3.12.7
      shell: |
        export PYENV_ROOT="$HOME/.pyenv"
        export PATH="$PYENV_ROOT/bin:$PATH"
        eval "$(pyenv init --path)"
        pyenv version
      register: python_version

    - name: Install pip packages with specific versions
      pip:
        executable: "$HOME/.pyenv/versions/3.12.7/bin/pip"
        name: "{{ item }}"
        state: present
      loop:
        - pyserial==3.5
        - opencv-python==4.10.0.84
        - paho-mqtt==2.1.0

    - debug:
        msg: "Python version installed and set by Pyenv: {{ python_version.stdout }}"

最初のaptでPython自体のビルドに必要なパッケージを追加する。これはPythonのバージョンによって異なるので適宜変更すること。で、Pyenvを取得し、.bashrcに環境変数の設定などを追加した後にpyenvで指定したVersionのPython環境を構築。

最後にpipで必要なパッケージを追加しておくと後で個別に追加する手間がなくてらくちん。

Discussion