Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Install Python Api

ASecurity

Installs the CARLA Python client (the `carla` package) into a chosen interpreter so the other python-api skills work — from a wheel bundled with your release or checkout, from PyPI (`pip install carla==X.Y.Z`), or by putting an older release's .egg on PYTHONPATH. Detects what is already present, picks the source that matches your simulator's version, pins numpy<2, and verifies `import carla` plus the client/server version match. Use when the user asks to "install the CARLA Python API", "pip i...

3 stars
0 votes
0 copies
0 views
Added 9/20/2026
toolspythongoshellbashdockerapi

Works with

cliapimcp

Security Analysis

A92/100
mediumInstalls packages at runtime which could introduce malicious dependencies

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add carla-simulator/carla-agentic-tools --skill install-python-api --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Install Python Api?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Install Python Api
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/carla-simulator-install-python-api/badge)](https://www.skillsdirectory.com/skills/carla-simulator-install-python-api)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: install-python-api
description: Installs the CARLA Python client (the `carla` package) into a chosen interpreter so the other python-api skills work — from a wheel bundled with your release or checkout, from PyPI (`pip install carla==X.Y.Z`), or by putting an older release's .egg on PYTHONPATH. Detects what is already present, picks the source that matches your simulator's version, pins numpy<2, and verifies `import carla` plus the client/server version match. Use when the user asks to "install the CARLA Python API", "pip install carla", "set up the carla python package", or when a skill reports "cannot import carla".
license: MIT
compatibility: Linux, macOS or Windows with a Python 3.10+ interpreter and pip. Needs either a local CARLA release/checkout containing PythonAPI/carla/dist, or network access to PyPI. Installs only the client — it never touches the simulator, and needs no running server (a reachable one is used to check the version match).
metadata:
  group: setup
  prerequisites: scripts/check_env.sh
  reference: references/sources.md
---

# Install the CARLA Python client

> **Paths.** `scripts/…` and `references/…` below are relative to the
> directory holding this SKILL.md. Your working directory is the user's
> project, not that directory, so prefix them with its absolute path or the
> command is not found.

The bootstrap step everything else in `python-api` depends on: without an
importable `carla`, every one of those skills stops at
`FAIL cannot import carla`. This skill fixes that, into **the interpreter you
choose**, and tells you when the client it installed does not match the
simulator you are running.

It is client-side only. Nothing here builds, launches or modifies a simulator.

## Instructions

```
Progress:
- [ ] Step 1: Check prerequisites (bash scripts/check_env.sh), clear FAILs
- [ ] Step 2: detect  — what is installed, which sources exist, what matches
- [ ] Step 3: install — auto-picks the best source, then verifies
- [ ] Step 4: verify against a running server when you have one
- [ ] Step 5: record `PYTHON` with `set_config` — the other skills read it
```

### Step 1: Check prerequisites

```bash
bash scripts/check_env.sh
```

### Steps 2-4: detect, install, verify

```bash
source scripts/env.sh

python3 scripts/install_python_api.py detect
python3 scripts/install_python_api.py install                       # auto
python3 scripts/install_python_api.py install --dry-run             # show the pip line only
python3 scripts/install_python_api.py install --source pypi --version 0.9.16
python3 scripts/install_python_api.py verify
```

`install` is a no-op when `carla` already imports (`--force` to reinstall), and
every path ends by importing `carla` in the target interpreter — a pip exit code
is not treated as proof.

## Which interpreter (the part people get wrong)

`PYTHON` selects the target; it defaults to `python3` on PATH, and it is the same
variable the rest of the `python-api` group uses, so one setting covers them all.

```bash
PYTHON=/path/to/venv/bin/python python3 scripts/install_python_api.py install
```

**This matters when an agent runs the skill.** If the MCP server was started with
`uvx`/`pipx`/`npx`, that launcher puts *its own* isolated environment first on
PATH, so bare `python3` is the tool's interpreter — commonly a different minor
version, and never the one that talks to CARLA. Installing the client there
achieves nothing. `check_env.sh` recognises those paths and says so. Set `PYTHON`
in the MCP client's `env` block once:

```json
"env": { "PYTHON": "/home/me/carla-venv/bin/python" }
```

## Sources, and why the order is not arbitrary

`auto` walks them in this order:

| # | Source | When it applies | Why this rank |
|---|---|---|---|
| 1 | **local wheel** — `<root>/PythonAPI/carla/dist/carla-*-<cp tag>-*.whl` | `CARLA_PACKAGE_ROOT` or `CARLA_UE4_ROOT` is set and ships one | it is the only artifact **guaranteed to match your simulator** |
| 2 | **PyPI** — `pip install carla==X.Y.Z` | any interpreter PyPI has a wheel for | clean and offline-free, but you must name the right version |
| 3 | **egg** — `carla-*-py<X.Y>-*.egg` | older releases that ship an egg | nothing to install; it goes on `PYTHONPATH` (written as a `.pth` inside a venv) |

Not covered here: **building from source** — that is [[build-carla-ue4]] step 04
(`make PythonAPI`), the right answer when no wheel exists for your interpreter.
Conda and Docker distributions are also out of scope.

PyPI coverage is real but partial — `detect` prints the live matrix, e.g.
`0.9.16 -> cp310, cp311, cp312` (linux + windows, no macOS wheels). Ask for an
interpreter it has no wheel for and the skill refuses **before** pip does, naming
the tags that exist.

## Version matching

CARLA's client and simulator are expected to be the same version; a mismatch
produces `WARNING: Client API version = X / Simulator API version = Y` on every
connection and subtly missing API. So:

- source 1 (local wheel) inherits the version from the release you actually have;
- `detect`/`verify` query a reachable server and report `match` or `MISMATCH`;
- a mismatch is a **WARN, not a failure** — it is often intentional (talking to a
  remote server), so the skill reports it and continues.

`numpy<2` is pinned in the same pip transaction: CARLA's bindings are built
against the numpy 1.x C API and crash on import under 2.x.

## Examples

**Example 1: only a downloaded release, no client installed**

User says: "I downloaded CARLA and pip install carla-agentic-tools, now what?"

```bash
export CARLA_PACKAGE_ROOT=~/CARLA_0.9.16
bash scripts/check_env.sh
python3 scripts/install_python_api.py install     # finds the bundled cp310 wheel
```

**Example 2: no local files at all, remote server**

User says: "the simulator runs on another machine, I just need the client"

`install --source pypi --version 0.9.16`, then `verify` with
`CARLA_HOST=<that machine>` to confirm the versions agree.

**Example 3: a skill just told the agent `cannot import carla`**

Run `detect`, then `install`. If `detect` shows the target interpreter inside a
`uv`/`pipx` cache path, set `PYTHON` to the real environment first — otherwise the
install lands where nothing will use it.

### Recording the path

An `export` lasts until the shell exits. Persist `PYTHON` instead, so the
next session — and `list_skills` — still knows where this went:

```
set_config({"PYTHON": "<the interpreter used above>"})
```

Without it the group this just enabled keeps reporting `available: false`,
and the next skill re-detects from scratch. `CARLA_ROOT` is the only CARLA
path to record: `set_config` derives the engine-specific variable itself.

## Verify

```bash
python3 scripts/install_python_api.py verify
```

`PASS: carla <version> importable by <interpreter>`, plus a server comparison when
one is reachable. Independent check:

```bash
"${PYTHON:-python3}" -c "import carla; print(carla.Client('127.0.0.1',2000).get_server_version())"
```

## Troubleshooting

**Problem: `PyPI has no cp313 wheel for carla==0.9.16`**
Cause: no wheel exists for that interpreter.
Solution: use a 3.10-3.12 interpreter (`PYTHON=…`), install a bundled wheel, or
build it ([[build-carla-ue4]] step 04).

**Problem: installed fine, but a skill still says `cannot import carla`**
Cause: the skill ran under a different interpreter than the one installed into —
almost always an isolated MCP server env.
Solution: `detect` prints the target; set `PYTHON` consistently in the client's
`env` block.

**Problem: `error: externally-managed-environment` (PEP 668)**
Cause: a system interpreter (Ubuntu 24.04+, Debian) refuses direct installs.
Solution: install into a venv and point `PYTHON` at it. `check_env.sh` flags this
before you hit it.

**Problem: `import carla` works but every connection warns about API versions**
Cause: client and simulator versions differ.
Solution: prefer the bundled wheel from the release you run, or
`install --source pypi --version <server version>` (`verify` prints the server's).

**Problem: an egg was found but `import carla` still fails**
Cause: the egg's Python version must match the interpreter exactly, and it needs
to be on `PYTHONPATH`.
Solution: use the printed `export PYTHONPATH=…` line, or install into a venv where
the skill can write the `.pth` for you.

## Outputs

A `carla` package importable by the target interpreter (or, for an egg, a
`PYTHONPATH`/`.pth` entry), plus `numpy<2`. Nothing else on the system changes.

Source details, the PyPI tag matrix, egg mechanics and version-matching rules:
[`references/sources.md`](references/sources.md).

Attribution

carla-simulatorcarla-simulator
View sourceMore from carla-simulator →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

ucoz-landing-skill

Playbook for creating and editing uCoz landing pages via MCP tools (`templates_tool`, `ftp_tool`, `modules_tool`). Use for tasks such as: "build a landing page", "update the homepage as a landing page", "create a promo page on the homepage", "add a lead form / menu / SEO to the homepage". Homepage: `page_list`, `page_get`; first publish — `page_update` with full `page_tmpl`; HTML edits after generation — `patch_template` (module_id=2, template_id=1), not `update_template`. Activate the mail f...

107 votes

Paperclip

Interact with the Paperclip control plane API for task coordination and governance. Use when checking assignments, updating issue status, posting comments, delegating work, managing routines, or calling Paperclip API endpoints.

805541 votes

Instantly Rdsthomas Mission Control

Instantly.ai cold email outreach API - manage campaigns, leads, accounts, and analytics. Use for cold email automation, lead management, campaign creation/monitoring, and email account warmup.

761 votes

Daw Music

Digital Audio Workstation usage, music composition, interactive music systems, and game audio implementation for immersive soundscapes.

761 votes

Caveman Compress

Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"

1023330 votes
View all in tools →