AnsiblePilot — Master Ansible Automation

AnsiblePilot is the leading resource for learning Ansible automation, DevOps, and infrastructure as code. Browse over 1,400 tutorials covering Ansible modules, playbooks, roles, collections, and real-world examples. Whether you are a beginner or an experienced engineer, our step-by-step guides help you automate Linux, Windows, cloud, containers, and network infrastructure.

Popular Topics

About Luca Berton

Luca Berton is an Ansible automation expert, author of 8 Ansible books published by Apress and Leanpub including "Ansible for VMware by Examples" and "Ansible for Kubernetes by Example", and creator of the Ansible Pilot YouTube channel. He shares practical automation knowledge through tutorials, books, and video courses to help IT professionals and DevOps engineers master infrastructure automation.

Leveraging Poetry for Efficient Virtual Environment Management

By Luca Berton · Published 2024-01-01 · Category: installation

Unveiling the Verses: Navigating Virtual Environments with Poetry and Ansible. Practical examples and step-by-step guidance on Leveraging Poetry for Efficient.

Leveraging Poetry for Efficient Virtual Environment Management

Leveraging Poetry for Efficient Virtual Environment Management

In the ever-evolving landscape of software development, managing dependencies and creating a controlled environment for project execution is crucial. Python developers often find themselves juggling with virtual environments to isolate project dependencies, ensuring consistency and reproducibility across different setups. While there are several tools available for this task, one standout option that combines simplicity with power is Poetry.

See also: Managing Virtual Environments with Pipenv for Ansible Projects

Understanding Poetry

Poetry is not just a literary form; it's also a Python packaging and dependency management tool. It streamlines the process of defining and installing project dependencies, making the management of virtual environments a seamless experience. To embark on this journey, let's explore how Poetry can be employed for managing a virtual environment, taking Ansible as a case study.

Setting the Stage

Firstly, create a directory for your project and navigate into it:

$ mkdir ansible-project
$ cd ansible-project

Next, initiate a Poetry project within the directory:

$ poetry init

This command will prompt you to provide details about your project, such as its name, version, and dependencies.


This command will guide you through creating your pyproject.toml config.

Package name [ansible-project]: Version [0.1.0]: Description []: Author [Luca Berton <luca@ansiblepilot.example>, n to skip]: License []: Compatible Python versions [^3.12]:

Would you like to define your main dependencies interactively? (yes/no) [yes] You can specify a package in the following forms: - A single name (requests): this will search for matches on PyPI - A name and a constraint (requests@^2.23.0) - A git url (git+https://github.com/python-poetry/poetry.git) - A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop) - A file path (../my-package/my-package.whl) - A directory (../my-package/) - A url (https://example.com/packages/my-package-0.1.0.tar.gz)

Package to add or search for (leave blank to skip):

Would you like to define your development dependencies interactively? (yes/no) [yes] Package to add or search for (leave blank to skip):

Generated file

[tool.poetry] name = "ansible-project" version = "0.1.0" description = "" authors = ["Luca Berton <luca@lucaberton.it>"] readme = "README.md"

[tool.poetry.dependencies] python = "^3.12"

[build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"

Do you confirm generation? (yes/no) [yes]

Adding Dependencies

With the project initialized, add Ansible to the list of dependencies using the poetry add command:

$ poetry add ansible

Poetry will handle the installation of Ansible and any additional dependencies required.

Creating virtualenv ansible-project-wMMHKn40-py3.12 in /Users/lberton/Library/Caches/pypoetry/virtualenvs
Using version ^8.6.1 for ansible

Updating dependencies Resolving dependencies... Downloading https://files.pythonhosted.org/packages/ec/1a/610693ac4ee14fcdf2d9bf3c493370e4f2ef7ae2e19217d7a237ff42367d/packaging-23.2-py3-none-any.whl (Resolving dependencies... Downloading https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.wResolving dependencies... Downloading https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.wResolving dependencies... Downloading https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_1Resolving dependencies... Downloading https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_1Resolving dependencies... Downloading https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_1Resolving dependencies... Downloading https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_1Resolving dependencies... Downloading https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_1Resolving dependencies... Downloading https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_1Resolving dependencies... (2.5s)

Package operations: 10 installs, 0 updates, 0 removals

• Installing pycparser (2.21) • Installing cffi (1.16.0) • Installing markupsafe (2.1.3) • Installing cryptography (41.0.5) • Installing jinja2 (3.1.2) • Installing packaging (23.2) • Installing pyyaml (6.0.1) • Installing resolvelib (1.0.1) • Installing ansible-core (2.15.6) • Installing ansible (8.6.1)

Writing lock file

Verifying the Installation

Once the installation is complete, you can verify the Ansible version within the virtual environment. Start the Poetry shell:

$ poetry shell

Inside the shell, check the Ansible version:

$ ansible --version

This will display information about the installed Ansible version, its configuration file location, module search path, and other relevant details.

Spawning shell within /Users/lberton/Library/Caches/pypoetry/virtualenvs/ansible-project-wMMHKn40-py3.12
lberton@Lucas-MacBook-Pro ansible-project % emulate bash -c '. /Users/lberton/Library/Caches/pypoetry/virtualenvs/ansible-project-wMMHKn40-py3.12/bin/activate'
(ansible-project-py3.12) lberton@Lucas-MacBook-Pro ansible-project % ansible --version
ansible [core 2.15.6]
  config file = None
  configured module search path = ['/Users/lberton/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/lberton/Library/Caches/pypoetry/virtualenvs/ansible-project-wMMHKn40-py3.12/lib/python3.12/site-packages/ansible
  ansible collection location = /Users/lberton/.ansible/collections:/usr/share/ansible/collections
  executable location = /Users/lberton/Library/Caches/pypoetry/virtualenvs/ansible-project-wMMHKn40-py3.12/bin/ansible
  python version = 3.12.0 (main, Oct  2 2023, 12:03:24) [Clang 15.0.0 (clang-1500.0.40.1)] (/Users/lberton/Library/Caches/pypoetry/virtualenvs/ansible-project-wMMHKn40-py3.12/bin/python)
  jinja version = 3.1.2
  libyaml = True

Poetry Shell Magic

By using poetry shell, you activate a virtual environment specific to your project, isolating its dependencies from the global Python environment. This ensures that your project's dependencies do not interfere with other projects or the system-wide Python installation.

The output of the ansible --version command also provides insight into the Python version, module locations, and executable locations specific to the virtual environment created by Poetry.

Links

• https://python-poetry.org/

See also: Ansible DevTools Meetup 2024: Latest Automation Updates

Conclusion

Poetry not only simplifies dependency management but also enhances the overall development experience by providing a clean and isolated virtual environment for your projects. It eliminates the hassle of manual environment setup, making the process more efficient and developer-friendly.

As the Python ecosystem continues to evolve, tools like Poetry become invaluable for maintaining order in the ever-expanding landscape of dependencies. Embrace the poetic simplicity of Poetry in managing your virtual environments, and let the verses of dependency resolution and isolation harmonize with the symphony of your development workflow.

Related Articles

Ansible template guidehow Ansible become works under the hood

See also: Cleaning the Build Directory in Python

See also

CondaError: Run 'conda init' Before 'conda activate' — Fix (2026)

Category: installation

Watch the video: Leveraging Poetry for Efficient Virtual Environment Management — Video Tutorial

Browse all Ansible tutorials · AnsiblePilot Home