nltk breaking changes
Every breaking API change we have recorded in nltk on PyPI: 90 breaking changes in 2 versions. Below are its newest 2 versions, removals and renames first, each with its source.
Newest change October 21, 2026

On this page
3.10.4
- Removed
nltk.ccg.chart.re
nltk.ccg.chart.re was removed in nltk 3.10.4 pypi.org - Removed
nltk.ccg.logic.re
nltk.ccg.logic.re was removed in nltk 3.10.4 pypi.org - Removed
nltk.corpus.reader.nps_chat.codecs
nltk.corpus.reader.nps_chat.codecs was removed in nltk 3.10.4 pypi.org - Removed
nltk.corpus.reader.rte.codecs
nltk.corpus.reader.rte.codecs was removed in nltk 3.10.4 pypi.org - Removed
nltk.ReppTokenizer.working_dir
ReppTokenizer.working_dir was removed in nltk 3.10.4 pypi.org - Removed
nltk.sentiment.util.extract_fields
nltk.sentiment.util.extract_fields was removed in nltk 3.10.4 pypi.org - Removed
nltk.tbl.demo.pickle_load
nltk.tbl.demo.pickle_load was removed in nltk 3.10.4 pypi.org - Removed
nltk.test.unit
The attack harnesses and their fixtures are no longer in the wheel. Import nltk.test.unit only from a source checkout or the sdist. pypi.org - Renamed
nltk.classify.megam.find_binary
Use nltk.classify.megam.find_binary_absolute instead. pypi.org - Renamed
nltk.classify.tadm.find_binary
Use nltk.classify.tadm.find_binary_absolute instead. pypi.org
And 71 more in this version.
3.10.4-rc1
- Behavior changed
nltk.chat80.Concept
Shared default values in chat80 Concept were fixed, so instances no longer share defaults. github.com - Behavior changed
nltk.data.find
nltk.data.find() now refuses a data root or directory on the way to a resource that another account can write to, warning and continuing to later roots. github.com - Behavior changed
nltk.download
Downloaded package archives are now private to the installing account and an install another account must read is extracted. Use extract=True or --no-extract to decide explicitly. github.com - Behavior changed
nltk.internals.java
The java() cmd argument now rejects Java launcher switches and @argfiles, and its options are validated against an allowlist, so calls relying on them will fail. github.com - Behavior changed
nltk.parse.dependencygraph.DependencyGraph
Cycle detection in DependencyGraph now works, so graphs with cycles are rejected. github.com - Behavior changed
nltk.pathsec.urlopen
Requests to internal network addresses are blocked and file paths outside trusted data directories are refused. github.com - Behavior changed
nltk.pickle
Pickled models now load through a restricted unpickler, so pickles using disallowed globals will be refused. github.com - Behavior changed
nltk.tokenize.punkt
Text NLTK writes to the terminal and CSV files is now sanitized against injection, which changes output. github.com - Behavior changed
nltk.tree.Tree.chomsky_normal_form
Relation walks deeper than MAX_RECURSION_DEPTH are now refused with an error instead of being truncated. github.com
Check your code
These are the changes. To see which of them reach your code, scan a public repository, or have your coding agent call check_code with your manifest or lockfile over MCP. The API reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

Put your code on continuous management.
Scan a public repository now, or give your agent one line.
See how out of date your code is.
Tell your agent what changed since it was trained.
claude mcp add --transport http since https://api.since.dev/mcp