langchain-ai/langgraph · error · ValueError
Invalid keep_pkg_tools
Error message
Invalid keep_pkg_tools: '{tool}'. Must be one of 'pip', 'setuptools', 'wheel'. What it means
Item-level validation of the keep_pkg_tools array in the CLI config validator: keep_pkg_tools was given as a list, but one of its elements is not in _BUILD_TOOLS ('pip', 'setuptools', 'wheel'). Allowing arbitrary names would inject untrusted strings into RUN pip ... cleanup lines of the generated Dockerfile, so each entry is checked against the fixed set.
Solutions
- Keep only 'pip', 'setuptools', and/or 'wheel' in the keep_pkg_tools list
- Replace the list with `true` to keep all supported packaging tools
- Drop the keep_pkg_tools key to use the default (tools removed)
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at libs/cli/langgraph_cli/config.py:548 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of langchain-ai/langgraph@38031739e5 (2026-08-26).
Data as JSON: /api/errors/47f34590c9509b68.
Report an issue: GitHub.
Appendix: source
Thrown at libs/cli/langgraph_cli/config.py:548
if encryption_conf := config.get("encryption"):
if "path" in encryption_conf:
if ":" not in encryption_conf["path"]:
raise ValueError(
f"Invalid encryption.path format: '{encryption_conf['path']}'. "
"Must be in format './path/to/file.py:attribute_name'"
)
if http_conf := config.get("http"):
if "app" in http_conf:
if ":" not in http_conf["app"]:
raise ValueError(
f"Invalid http.app format: '{http_conf['app']}'. "
"Must be in format './path/to/file.py:attribute_name'"
)
if keep_pkg_tools := config.get("keep_pkg_tools"):
if isinstance(keep_pkg_tools, list):
for tool in keep_pkg_tools:
if tool not in _BUILD_TOOLS:
raise ValueError(
f"Invalid keep_pkg_tools: '{tool}'. "
"Must be one of 'pip', 'setuptools', 'wheel'."
)
elif keep_pkg_tools is True:
pass
else:
raise ValueError(
f"Invalid keep_pkg_tools: '{keep_pkg_tools}'. "
"Must be bool or list[str] (with values"
" 'pip', 'setuptools', and/or 'wheel')."
)
return config
# Keys recognized by validate_config (used to detect unknown fields).
_KNOWN_CONFIG_KEYS = {
"python_version",
"node_version",View on GitHub (pinned to 38031739e5)