3.2 Python Virtual Environment¶
Create a dedicated Python virtual environment for network automation packages. This isolates dependencies and prevents version conflicts with system Python.
Why Virtual Environments?¶
| Without venv | With venv |
|---|---|
| Packages install system-wide | Packages isolated per project |
| Version conflicts between projects | Each project has own versions |
| Requires sudo for pip install | No sudo needed |
| Difficult to replicate environment | requirements.txt = exact replica |
Creating the Virtual Environment¶
# Navigate to home directory
cd ~
# Create virtual environment
python3 -m venv abhavtech-automation-venv
# Activate it
source abhavtech-automation-venv/bin/activate
# Prompt changes to show (abhavtech-automation-venv)
Installing Required Packages¶
# Upgrade pip first
pip install --upgrade pip
# Install Ansible
pip install ansible==9.2.0
# Install network automation libraries
pip install netmiko==4.3.0 # Multi-vendor SSH library
pip install nornir==3.4.1 # Network automation framework
pip install nornir-netmiko==1.0.1 # Netmiko plugin for Nornir
pip install nornir-utils==0.2.0 # Nornir utility functions
# Install API clients
pip install requests==2.31.0 # HTTP library
pip install hvac==2.1.0 # HashiCorp Vault client
pip install dnacentersdk==2.7.0 # Cisco DNA Center SDK
pip install ciscoisesdk==2.1.1 # Cisco ISE SDK
pip install webexpythonsdk==2.0.6 # Webex Python SDK (formerly webexteamssdk)
# Install template engines and parsers
pip install jinja2==3.1.3 # Template engine for configs
pip install pyyaml==6.0.1 # YAML parser
pip install xmltodict==0.13.0 # XML to dict converter
# Install testing and validation
pip install pyats[full]==24.1 # Cisco pyATS testing framework
pip install paramiko==3.4.0 # SSH library (dependency)
# Install CLI utilities
pip install rich==13.7.0 # Beautiful terminal output
pip install click==8.1.7 # CLI framework
# Verify installations
ansible --version
python -c "import netmiko; print(netmiko.__version__)"
Creating requirements.txt¶
# Generate requirements file from current venv
pip freeze > requirements.txt
# File contents:
cat requirements.txt
Example requirements.txt:
ansible==9.2.0
netmiko==4.3.0
nornir==3.4.1
nornir-netmiko==1.0.1
nornir-utils==0.2.0
requests==2.31.0
hvac==2.1.0
jinja2==3.1.3
pyyaml==6.0.1
dnacentersdk==2.7.0
ciscoisesdk==2.1.1
webexpythonsdk==2.0.6
xmltodict==0.13.0
rich==13.7.0
pyats[full]==24.1
paramiko==3.4.0
click==8.1.7
Activating/Deactivating¶
# Activate venv (run this in every new terminal session)
source ~/abhavtech-automation-venv/bin/activate
# Deactivate venv
deactivate
# Add to .bashrc for automatic activation
echo "source ~/abhavtech-automation-venv/bin/activate" >> ~/.bashrc
Replicating Environment on Another Machine¶
# On new machine:
python3 -m venv abhavtech-automation-venv
source abhavtech-automation-venv/bin/activate
pip install -r requirements.txt
# Exact same package versions installed
Verification¶
# Check Ansible version
ansible --version
# Expected output:
# ansible [core 2.16.x]
# python version = 3.10.x
# Check installed packages
pip list
# Test imports
python << EOF
import netmiko
import nornir
import dnacentersdk
import ciscoisesdk
print("All imports successful!")
EOF
Related Sections: - 3.1 VS Code and WSL Configuration - 3.4 Ansible Cisco Collections