Use this reference to explain the doctor's findings without overstating them. The script identifies focused manifest problems. It does not replace a resolver or vulnerability database.
Sign in to save downloads to your library and vote.
Preview
Dependency pitfalls
Use this reference to explain the doctor's findings without overstating them. The script identifies focused manifest problems. It does not replace a resolver or vulnerability database.
Standard-library shadowing
A requirement can have the same name as a Python standard-library module. Pip then places a separately maintained distribution on the import path, where it can shadow or conflict with the runtime's own module.
Two concrete examples:
pathlib==1.0.1
dataclasses
pathlib has shipped with Python since 3.4. The old PyPI backport should not be
installed on modern Python. dataclasses has shipped with Python since 3.7; its
backport exists for Python 3.6. On supported modern runtimes, remove these lines
and import the standard-library modules directly.
When a project intentionally supports an older Python release, use an explicit environment marker instead of installing the backport everywhere. Confirm the project's supported Python range before editing.
Abandoned and obsolete backports
Backports such as typing, enum34, futures, and singledispatch solved real
gaps in older Python versions. They become liabilities when pinned for runtimes
that already provide the feature. They may be unmaintained, constrain other
packages, or expose an implementation that no longer matches the standard
library.
The right fix is usually removal. If an old runtime remains supported, add a Python-version marker and test both sides of the marker.
Yanked releases
PyPI can mark release files as yanked when a version is broken, unsafe, or published by mistake. Yanked files remain available so existing exact pins can still resolve, which means an old manifest may keep installing a bad release.
The doctor's online check is deliberately opt-in. It queries only exact pins and reports a release as yanked only when every file for that version is marked yanked. A yank is not automatically a CVE, and a CVE does not require a yank. Use a dedicated security scanner for vulnerability coverage.
Pin hygiene
A bare dependency such as requests can resolve differently on two machines
or two dates. Before creating an exact pin:
- Inspect the version installed in the project's working environment.
- Confirm that version is intentional and supported.
- Run the project's tests with the proposed pin.
- Preserve environment markers and extras from the original requirement.
Do not invent a version from memory. Lockfiles and constraint files may already be the project's chosen source of reproducibility, so inspect them before changing a manifest.
Duplicates and conflicts
Identical repeated lines create two places to maintain one decision. Compatible
ranges on separate lines can usually be combined. Different exact pins, such as
urllib3==1.26.18 and urllib3==2.2.2, cannot both be satisfied and require a
deliberate version choice.
Before resolving a conflict, inspect which direct dependency introduced each constraint. Choosing the newest number without checking dependents can turn a clear resolver failure into a runtime regression.
Ingestion metadata
- Source catalog
- awesome-llm-apps
- Repository
- Shubhamsaboo/awesome-llm-apps · main
- File path
- agent_skills/dependency-doctor/references/dependency-pitfalls.md
- Last refreshed
- 10/24/2026, 3:00:14 AM (5h ago)
- Refresh schedule
- Daily · 03:00 UTC
- Dedupe status
- Unique · deduped by (source, url)