suzuki-shunsuke.pyenv-module
ansible-pyenv-module
这是一个用于运行 pyenv 命令的 ansible 模块。
https://galaxy.ansible.com/suzuki-shunsuke/pyenv-module/
注意事项
- 该模块不支持 检查模式
支持的平台
- 一般Linux
- MacOSX
我们在以下环境中测试了该模块
- Ubuntu 16.04 (Vagrant, Virtualbox)
- CentOS 7.3 (Vagrant, Virtualbox)
- MacOS Sierra 10.12.5
需求
- pyenv
- python 构建依赖
- pyenv-virtualenv: 如果你想运行
virtualenv
或virtualenvs
子命令,则需要它
如果你想通过 ansible 角色安装 pyenv 和 python 构建依赖,我们推荐使用 suzuki-shunsuke.pyenv。 如果你想通过 ansible 角色安装 pyenv-virtualenv,我们推荐使用 suzuki-shunsuke.pyenv-virtualenv。
支持的 pyenv 子命令和选项
$ pyenv install [-s] [-f] <version>
$ pyenv uninstall -f <version>
$ pyenv install -l
$ pyenv versions [--bare]
$ pyenv global
$ pyenv global <version> [<version> ...]
$ pyenv virtualenv [-f] [--no-pip] [--no-setuptools] [--no-wheel] [--symlinks] [--copies] [--clear] [--without-pip] [version] <virtualenv-name>
$ pyenv virtualenvs [--bare] [--skip-aliases]
安装
$ ansible-galaxy install suzuki-shunsuke.pyenv-module
# playbook.yml
- hosts: default
roles:
# 调用此角色后,你可以使用该模块。
- suzuki-shunsuke.pyenv-module
选项
除了本文档,还请参考 pyenv 命令参考 和 pyenv help <command>
命令的输出。
通用选项
名称 | 类型 | 是否必需 | 默认值 | 选择/示例 | 描述 |
---|---|---|---|---|---|
subcommand | str | 否 | install | [install, uninstall, versions, global, virtualenvs, virtualenv] | |
pyenv_root | str | 否 | ~/.pyenv | 如果环境变量 "PYENV_ROOT" 没有设置,该选项是必须的 | |
expanduser | bool | 否 | 是 | 默认情况下,环境变量 PYENV_ROOT 和 "pyenv_root" 选项由 os.path.expanduser 进行过滤 |
"install" 子命令的选项
参数 | 类型 | 是否必需 | 默认值 | 选择/示例 | 描述 |
---|---|---|---|---|---|
version | str | 否 | 3.6.1 | ||
list | bool | 否 | 否 | -l 选项 | |
skip_existing | bool | 否 | 是 | -s 选项 | |
force | bool | 否 | 否 | -f 选项 |
必须提供 "version" 或 "list" 选项之一。 如果设置了 "list" 选项,则该任务的返回值将包含 "versions" 字段。
"uninstall" 子命令的选项
参数 | 类型 | 是否必需 | 默认值 | 选择/示例 | 描述 |
---|---|---|---|---|---|
version | str | 是 | 2.7.13 |
"global" 子命令的选项
参数 | 类型 | 是否必需 | 默认值 | 选择 | 描述 |
---|---|---|---|---|---|
versions | list | 否 |
"global" 子命令的返回值将包含 "versions" 字段。
"versions" 子命令的选项
参数 | 类型 | 是否必需 | 默认值 | 选择 | 描述 |
---|---|---|---|---|---|
bare | bool | 否 | 是 |
"versions" 子命令的返回值将包含 "versions" 字段。
"virtualenvs" 子命令的选项
参数 | 类型 | 是否必需 | 默认值 | 选择 | 描述 |
---|---|---|---|---|---|
skip_aliases | bool | 否 | 是 | ||
bare | bool | 否 | 是 |
"virtualenvs" 子命令的返回值将包含 "virtualenvs" 字段。
"virtualenv" 子命令的选项
https://github.com/pyenv/pyenv-virtualenv#virtualenv-and-venv
pyenv-virtualenv
在可用时使用python -m venv
,如果virtualenv
命令不可用则使用。
"virtualenv" 子命令的选项取决于 pyenv-virtualenv
是否使用 python -m venv
。
通用选项
参数 | 类型 | 是否必需 | 默认值 | 示例 | 描述 |
---|---|---|---|---|---|
force | bool | 否 | 否 | ||
version | str | 是 | 2.7.13 | ||
virtualenv_name | str | 是 | ansible |
注意:force 选项未按预期工作
这是 pyenv-virtualenv 的问题。
virtualenv
选项
参数 | 类型 | 是否必需 | 默认值 | 示例 | 描述 |
---|---|---|---|---|---|
always_copy | bool | 否 | 否 | ||
no_pip | bool | 否 | 否 | ||
no_setuptools | bool | 否 | 否 | ||
no_wheel | bool | 否 | 否 |
请参见 virtualenv 官方文档 和 virtualenv --help
命令的输出。
python -m venv
选项
参数 | 类型 | 是否必需 | 默认值 | 示例 | 描述 |
---|---|---|---|---|---|
clear | bool | 否 | 否 | ||
copies | bool | 否 | 否 | ||
symlinks | bool | 否 | 否 | ||
without_pip | bool | 否 | 否 |
请参见 venv 官方文档 和 python -m venv -h
命令的输出。
注意:clear 选项未按预期工作
这是 pyenv-virtualenv 的问题。
示例
- name: pyenv install -s 3.6.1
pyenv:
version: 3.6.1
pyenv_root: "~/.pyenv"
- name: pyenv install -f 3.6.1
pyenv:
version: 3.6.1
pyenv_root: "~/.pyenv"
force: yes
- name: pyenv uninstall -f 2.6.9
pyenv:
subcommand: uninstall
version: 2.6.9
pyenv_root: "~/.pyenv"
- name: pyenv global 3.6.1
pyenv:
subcommand: global
versions:
- 3.6.1
pyenv_root: "~/.pyenv"
- name: pyenv global
pyenv:
subcommand: global
pyenv_root: "~/.pyenv"
register: result
- debug:
var: result.versions
- name: pyenv install -l
pyenv:
list: yes
pyenv_root: "{{ansible_env.HOME}}/.pyenv"
register: result
- debug:
var: result.versions
- name: pyenv versions --bare
pyenv:
subcommand: versions
pyenv_root: "{{ansible_env.HOME}}/.pyenv"
register: result
- debug:
var: result.versions
- name: pyenv virtualenvs --skip-aliases --bare
pyenv:
subcommand: virtualenvs
pyenv_root: "~/.pyenv"
register: result
- debug:
var: result.virtualenvs
- name: pyenv virtualenv --force 2.7.13 ansible
pyenv:
subcommand: virtualenv
pyenv_root: "~/.pyenv"
version: 2.7.13
virtualenv_name: ansible
force: yes
提示
使用 pip 安装 python 包
目前该模块不支持 pip
子命令,
但你可以使用 官方 pip 模块 来实现。
# 使用 pip 模块之前安装 python 和创建 virtualenv
- name: pyenv install -s 2.7.13
pyenv:
pyenv_root: "{{pyenv_root}}"
version: 2.7.13
- name: pyenv virtualenv 3.6.1 yaml_env
pyenv:
subcommand: virtualenv
pyenv_root: "{{pyenv_root}}"
version: 3.6.1
virtualenv_name: yaml_env
# 使用 executable 选项的 pip 模块
- name: 安装 ansible
pip:
name: ansible
executable: "{{pyenv_root}}/versions/2.7.13/bin/pip"
- name: 在 virtualenv "yaml_env" 中安装 pyyaml
pip:
name: pyyaml
executable: "{{pyenv_root}}/versions/yaml_env/bin/pip"
更新日志
请查看 CHANGELOG.md。
另见
- suzuki-shunsuke.pyenv: 安装 pyenv 的 ansible 角色
- suzuki-shunsuke.pyenv-virtualenv: 安装 pyenv-virtualenv 的 ansible 角色
许可
开发
需求
- Vagrant
- Ansible
- Node.js
- yarn
设置
$ yarn install
$ cd tests
$ ansible-galaxy install -r roles.yml
测试
$ cd tests
$ vagrant up --provision