Skip to main content

How to Solve "OSError: [E050] Can't find model 'en_core_web_sm'" in spaCy

The error OSError: [E050] Can't find model 'en_core_web_sm' in spaCy indicates that the specified language model ('en_core_web_sm' is a small English model) is not installed or not found in the expected location.

This guide provides a step-by-step guide to resolve this error, covering the correct installation methods, alternative model loading, and troubleshooting tips.

Understanding the Error

spaCy models are separate downloads, not included with the core spaCy library. The error means:

  • You haven't downloaded the en_core_web_sm model.
  • You downloaded it, but spaCy can't find it (less common, usually due to environment issues).

Solution 1: Downloading the Model (Most Common)

The most common solution is to download the missing model. spaCy provides a convenient command-line tool for this.

Command Line Download

Open your terminal (or Anaconda Prompt on Windows) and run:

python -m spacy download en_core_web_sm
  • Use the command python3 or py as needed.
  • Depending on your system's setup, you may need to use python3 instead of python. On Windows, you might use py.

This command downloads the en_core_web_sm model and installs it in a location where spaCy can find it. After downloading, this code should work:

import spacy

nlp = spacy.load("en_core_web_sm") # Load the model
doc = nlp("tutorialreference.com") # Process some text
print(doc)

Download within a Python Script

You can download the model from within a Python script:

import spacy
spacy.cli.download("en_core_web_sm")

**3. Solution 2: Loading from a Direct Path (Advanced/Troubleshooting)

If the standard download doesn't work (e.g., due to unusual environment configurations), you can find the model's installation path and load it directly. This is not generally recommended for normal use, but can help in debugging.

  1. Find the installation path: After downloading the model, import it and print its __file__ attribute. Note that you may need to remove __init__.py from the path.
import en_core_web_sm
print(en_core_web_sm.__file__)
# Example output (will vary):
# /home/user/.local/lib/python3.9/site-packages/en_core_web_sm/__init__.py
  1. Load using the full path: Use the path to the data directory within the package (not the __init__.py file) in spacy.load():
import spacy

# Example path (adjust to YOUR actual path)
model_path = "/home/user/.local/lib/python3.9/site-packages/en_core_web_sm/en_core_web_sm-3.6.0" # Example!
nlp = spacy.load(model_path)
doc = nlp("tutorialreference.com")
print(doc)
warning

The path will vary depending on your operating system, Python version, and how you installed spaCy (pip, conda, etc.). Use the output from the previous step to determine the correct path. This method is less robust than the standard spacy.load("en_core_web_sm") approach.

Solution 3: Using a Different Model

If you don't specifically need the en_core_web_sm model, you could use a different English model, or a model for another language:

  • Larger English Models: spaCy provides larger and more accurate English models, like en_core_web_md (medium) and en_core_web_lg (large). Download them similarly:

    python -m spacy download en_core_web_md
    python -m spacy download en_core_web_lg

    Then load them:

    nlp = spacy.load("en_core_web_md")  # Or "en_core_web_lg"
  • Other Languages: spaCy supports many languages. See the spaCy models documentation for a full list. For example, to download a small Spanish model:

    python -m spacy download es_core_news_sm

Troubleshooting

If you're still encountering issues:

  • Restarting Your Kernel/Runtime: If you're using a Jupyter Notebook, Google Colab, or a similar environment, try restarting the kernel or runtime. Sometimes, changes to installed packages aren't reflected until you do this.
  • Checking Your Python Environment: Make sure you've installed spaCy and downloaded the model in the same Python environment you're using to run your code. If you're using virtual environments (which you should be!), activate the correct environment before installing or running anything.
  • Older spaCy Versions: Very old versions of spaCy (pre-3.0) used symbolic links instead of package names. If you're using an old version, either upgrade to a newer version or use the direct path loading method (Solution 2). The recommended way is to upgrade to a newer version.