🌊
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