ansible.builtin.pip module – Manages Python library dependencies
Note
This module is part of ansible-core
and included in all Ansible
installations. In most cases, you can use the short
module name
pip
even without specifying the collections keyword.
However, we recommend you use the Fully Qualified Collection Name (FQCN) ansible.builtin.pip
for easy linking to the
module documentation and to avoid conflicting with other collections that may have
the same module name.
Synopsis
Manage Python library dependencies. To use this module, one of the following keys is required:
name
orrequirements
.
Requirements
The below requirements are needed on the host that executes this module.
pip
virtualenv
setuptools or packaging
Parameters
Parameter |
Comments |
---|---|
Allow This is typically required when installing packages outside a virtual environment on modern systems. Choices:
|
|
cd into this directory before running the command. |
|
Pass the editable flag. Choices:
|
|
The explicit executable or pathname for the Mutually exclusive with Does not affect the Ansible Python interpreter. The |
|
Extra arguments passed to |
|
The name of a Python library to install or the url(bzr+,hg+,git+,svn+) of the remote package. This can be a list (since 2.2) and contain version specifiers (since 2.7). |
|
The path to a pip requirements file, which should be local to the remote system. File can be specified as a relative path if using the |
|
The state of module. The Choices:
|
|
The system umask to apply before installing the pip package. This is useful, for example, when installing on systems that have a very restrictive umask by default (e.g., |
|
The version number to install of the Python library specified in the |
|
An optional path to a virtualenv directory to install into. It cannot be specified together with the |
|
The command or a pathname to the command to create the virtual environment with. For example Default: |
|
The Python executable used for creating the virtual environment. For example |
|
Whether the virtual environment will inherit packages from the global Choices:
|
Attributes
Attribute |
Support |
Description |
---|---|---|
Support: full |
Can run in check_mode and return changed status prediction without modifying target, if not supported the action will be skipped. |
|
Support: none |
Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode |
|
Platform: posix |
Target OS/families that can be operated against |
Notes
Note
Python installations marked externally-managed (as defined by PEP668) cannot be updated by pip versions >= 23.0.1 without the use of a virtual environment or setting the
break_system_packages
option.The virtualenv (http://www.virtualenv.org/) must be installed on the remote host if the virtualenv parameter is specified and the virtualenv needs to be created.
Although it executes using the Ansible Python interpreter, the pip module shells out to run the actual pip command, so it can use any pip version you specify with
executable
. By default, it uses the pip version for the Ansible Python interpreter. For example, pip3 on python 3, and pip2 or pip on python 2.The interpreter used by Ansible (see ansible_python_interpreter) requires the setuptools package, regardless of the version of pip set with the
executable
option.
Examples
- name: Install bottle python package
ansible.builtin.pip:
name: bottle
- name: Install bottle python package on version 0.11
ansible.builtin.pip:
name: bottle==0.11
- name: Install bottle python package with version specifiers
ansible.builtin.pip:
name: bottle>0.10,<0.20,!=0.11
- name: Install multi python packages with version specifiers
ansible.builtin.pip:
name:
- django>1.11.0,<1.12.0
- bottle>0.10,<0.20,!=0.11
- name: Install python package using a proxy
ansible.builtin.pip:
name: six
environment:
http_proxy: 'http://127.0.0.1:8080'
https_proxy: 'https://127.0.0.1:8080'
# You do not have to supply '-e' option in extra_args
- name: Install MyApp using one of the remote protocols (bzr+,hg+,git+,svn+)
ansible.builtin.pip:
name: svn+http://myrepo/svn/MyApp#egg=MyApp
- name: Install MyApp using one of the remote protocols (bzr+,hg+,git+)
ansible.builtin.pip:
name: git+http://myrepo/app/MyApp
- name: Install MyApp from local tarball
ansible.builtin.pip:
name: file:///path/to/MyApp.tar.gz
- name: Install bottle into the specified (virtualenv), inheriting none of the globally installed modules
ansible.builtin.pip:
name: bottle
virtualenv: /my_app/venv
- name: Install bottle into the specified (virtualenv), inheriting globally installed modules
ansible.builtin.pip:
name: bottle
virtualenv: /my_app/venv
virtualenv_site_packages: yes
- name: Install bottle into the specified (virtualenv), using Python 2.7
ansible.builtin.pip:
name: bottle
virtualenv: /my_app/venv
virtualenv_command: virtualenv-2.7
- name: Install bottle within a user home directory
ansible.builtin.pip:
name: bottle
extra_args: --user
- name: Install specified python requirements
ansible.builtin.pip:
requirements: /my_app/requirements.txt
- name: Install specified python requirements in indicated (virtualenv)
ansible.builtin.pip:
requirements: /my_app/requirements.txt
virtualenv: /my_app/venv
- name: Install specified python requirements and custom Index URL
ansible.builtin.pip:
requirements: /my_app/requirements.txt
extra_args: -i https://example.com/pypi/simple
- name: Install specified python requirements offline from a local directory with downloaded packages
ansible.builtin.pip:
requirements: /my_app/requirements.txt
extra_args: "--no-index --find-links=file:///my_downloaded_packages_dir"
- name: Install bottle for Python 3.3 specifically, using the 'pip3.3' executable
ansible.builtin.pip:
name: bottle
executable: pip3.3
- name: Install bottle, forcing reinstallation if it's already installed
ansible.builtin.pip:
name: bottle
state: forcereinstall
- name: Install bottle while ensuring the umask is 0022 (to ensure other users can use it)
ansible.builtin.pip:
name: bottle
umask: "0022"
become: True
- name: Run a module inside a virtual environment
block:
- name: Ensure the virtual environment exists
pip:
name: psutil
virtualenv: "{{ venv_dir }}"
# On Debian-based systems the correct python*-venv package must be installed to use the `venv` module.
virtualenv_command: "{{ ansible_python_interpreter }} -m venv"
- name: Run a module inside the virtual environment
wait_for:
port: 22
vars:
# Alternatively, use a block to affect multiple tasks, or use set_fact to affect the remainder of the playbook.
ansible_python_interpreter: "{{ venv_python }}"
vars:
venv_dir: /tmp/pick-a-better-venv-path
venv_python: "{{ venv_dir }}/bin/python"
Return Values
Common return values are documented here, the following are the fields unique to this module:
Key |
Description |
---|---|
pip command used by the module Returned: success Sample: |
|
list of python modules targeted by pip Returned: success Sample: |
|
Path to the requirements file Returned: success, if a requirements file was provided Sample: |
|
Version of the package specified in ‘name’ Returned: success, if a name and version were provided Sample: |
|
Path to the virtualenv Returned: success, if a virtualenv path was provided Sample: |