[Day#3 PyATS Series] Installing pyATS & Genie (core, NX-OS, IOS-XR plugins) using pyATS for Cisco
Table of Contents
Introduction on the Key Points
In today’s Day #3 of our “101 Days of pyATS (Vendor-Agnostic)” blog series, we focus on setting up the essential components of pyATS by installing the core libraries and vendor-specific plugins such as NX-OS and IOS-XR. These tools are the foundation for network test automation and validation. Whether you’re working with Cisco IOS-XE, NX-OS, or IOS-XR platforms, having the right Genie and pyATS plugins is critical for enabling Python-based interaction with devices. This post is crafted for anyone interested in Python for Network Engineer roles and network automation.
We will guide you through installing the base pyats, genie, and relevant plugin packages inside a Python virtual environment to ensure a clean and isolated setup. By the end of this article, you’ll have a fully working environment capable of running your first platform-specific test scripts.
Topology Overview

For demonstration purposes, we will use a topology with three Cisco routers:
- One running IOS-XE (R1)
- One running NX-OS (NX1)
- One running IOS-XR (XR1)
Each router will be accessed via SSH using credentials stored in a testbed.yml file.
Topology & Communications
| Device | OS | IP Address | Username | Password |
|---|---|---|---|---|
| R1 | IOS-XE | 192.168.100.1 | admin | cisco123 |
| NX1 | NX-OS | 192.168.100.2 | admin | cisco123 |
| XR1 | IOS-XR | 192.168.100.3 | admin | cisco123 |
All devices should be reachable via SSH on port 22.
4. Workflow Script
Below is a Python script that sets up the environment and verifies connectivity to all devices:
# Create and activate the virtual environment python3 -m venv pyats_env source pyats_env/bin/activate # Upgrade pip pip install --upgrade pip # Install pyATS and Genie core pip install pyats genie # Install platform-specific plugins pip install genie.libs.sdk pip install genie.libs.parser pip install genie.libs.ops pip install pyats[kleenex] # For CLI cleanups # Optional: Install NX-OS and IOS-XR support pip install genie.libs.nxos pip install genie.libs.xr
Explanation by Line
python3 -m venv pyats_env: Creates a clean Python virtual environment.source pyats_env/bin/activate: Activates the environment.pip install pyats genie: Installs the base pyATS and Genie packages.genie.libs.sdk,parser, andops: These are core modules to support parsing, operations, and learning features.pyats[kleenex]: Useful for testbed cleanup tasks.genie.libs.nxosandgenie.libs.xr: Optional but needed if working with NX-OS and IOS-XR platforms.
testbed.yml Example
devices:
R01:
os: iosxe
type: router
connections:
cli:
protocol: ssh
ip: 192.168.100.1
port: 22
credentials:
default:
username: admin
password: cisco123
NX1:
os: nxos
type: switch
connections:
cli:
protocol: ssh
ip: 192.168.100.2
credentials:
default:
username: admin
password: cisco123
XR1:
os: iosxr
type: router
connections:
cli:
protocol: ssh
ip: 192.168.100.3
credentials:
default:
username: admin
password: cisco123
Post-validation CLI Screenshots (Expected Output)
Once setup is done, connect to each device using the pyATS shell or scripts:

(pyats_env) $ pyats shell
>> from genie.testbed import load
>> testbed = load('testbed.yml')
>> r1 = testbed.devices['R01']
>> r1.connect()
>> r1.execute('show ip interface brief')
Expected: You should see interface statuses.

Repeat the same for NX1 and XR1. Ensure that all connections succeed and execute() returns CLI output.
FAQs
Q1: What is the difference between pyATS and Genie?
Answer:
- pyATS is Cisco’s Python testing framework that provides the core automation infrastructure, including testbed management, device connections, and test execution.
- Genie is a library built on top of pyATS that includes parsers, models, and reusable test scripts.
- You need both pyATS and Genie for full functionality (e.g., parsing
showcommands and running pre-built health checks).
Q2: How do I install pyATS and Genie in my Python environment?
Answer:
Activate your virtual environment and run:
pip install pyats[full] pip install genie
This will install the pyATS core framework, Genie core, and essential plugins.
Q3: What are pyATS plugins, and why are they needed (NX-OS, IOS-XR, IOS-XE)?
Answer:
- Plugins extend pyATS to support specific Cisco OS platforms.
- Examples:
pyats.contribfor community additionsgenie.libs.sdkfor higher-level reusable test librariesunicon.plugins.iosxr,unicon.plugins.nxosfor CLI connections
- Installing these ensures proper command execution and parsing for NX-OS, IOS-XR, IOS-XE devices.
Q4: How can I verify if pyATS and Genie are installed successfully?
Answer:
Run the following commands:
pyats version check python -c "import genie; print(genie.__version__)"
This will display the installed versions of pyATS and Genie to confirm successful installation.
Q5: How do I install platform-specific plugins like NX-OS or IOS-XR?
Answer:
Use pip to install them individually or together:
pip install unicon.plugins.nxos unicon.plugins.iosxr unicon.plugins.iosxe pip install genie.libs.parsers genie.libs.sdk
These plugins allow pyATS to recognize the OS type and use appropriate parsers and connection handlers.
Q6: What’s included in the pyats[full] installation?
Answer:
pyats.aetestfor test executionpyats.topologyfor testbed managementpyats.connectionsfor device connections- CLI utilities like
pyats create testbed - Common Genie parsers and base plugins
You can additionally install platform-specific plugins as needed.
Q7: Do I need internet access to install these packages?
Answer:
Yes. pip will download packages from PyPI. If you have an air-gapped network, you can:
- Download
.whlfiles separately - Transfer them to your environment
- Install using
pip install <filename>.whl
Q8: Can I update pyATS and Genie to the latest versions safely?
Answer:
Yes. Run:
pip install --upgrade pyats[full] genie
However:
- Always test upgrades in a non-production environment first.
- Check release notes for backward compatibility issues.
- Ensure your scripts and testbeds are not broken by parser updates.
YouTube Link
Watch the Complete Python for Network Engineer: Installing pyATS & Genie (core, NX-OS, IOS-XR plugins) using pyATS for Cisco Lab Demo & Explanation on our channel:
Join Our Training: Master Python for Network Engineer with Sagar Dhawan
Want to go beyond basic pings and CLI parsing? Join our 3-Month Instructor-Led Training Program and become a Certified Automation Engineer.
- Real-world labs across Cisco, Arista, Palo Alto, Fortigate
- Build custom parsers, test libraries, CI/CD pipelines
- Learn RESTCONF, NETCONF, Nornir, Ansible & more
- Weekly projects, mentorship, and lifetime access
Enroll Now & Future‑Proof Your Career
Email: info@networkjourney.com
WhatsApp / Call: +91 97395 21088
Make the leap from CLI to APIs with our Python for Network Engineer program. This course is built by engineers, for engineers.
![[Day #14 PyATS Series] Using pyATS “Jobs” for Multi-Device Tests with Cisco [Python for Network Engineer]](https://networkjourney.com/wp-content/uploads/2025/07/Day14-PyATS-Series-Using-pyATS-Jobs-for-Multi-Device-Tests-with-Cisco-Python-for-Network-Engineer.png)
![[Day #19 Pyats Series] Introduction to Trigger APIs in pyATS using pyATS for Cisco](https://networkjourney.com/wp-content/uploads/2025/07/Introduction-to-Trigger-APIs-in-pyATS-using-pyATS-for-Cisco.png)
![[Day #18 Pyats Series] Building test case hierarchy with Section, CommonSetup using pyATS for Cisco](https://networkjourney.com/wp-content/uploads/2025/07/Building-test-case-hierarchy-with-Section-CommonSetup-using-pyATS-for-Cisco.png)