pip install bson: Your Complete Python BSON Guide

Everything you need to know about installing and using BSON in Python

Published: November 2025 • 10 min read

If you're working with MongoDB in Python, you'll need to handle BSON data. But when you search for "pip install bson", things can get a bit confusing. Should you install bson or pymongo? What's the difference?

Here's the short answer: You should install pymongo, which includes BSON support out of the box. The standalone bson package is outdated and can cause conflicts with PyMongo.

Quick Install: Use pip install pymongo to get both MongoDB client and BSON encoding/decoding support.

Need to convert data? Try our JSON to BSON converter and BSON to JSON converter tools!

The Right Way to Install BSON in Python

Let's clear up the confusion about BSON packages in Python. Here's what you need to know:

Recommended

pip install pymongo
  • Official MongoDB Python driver
  • Includes BSON encoding/decoding
  • Actively maintained and updated
  • Full MongoDB client functionality

Not Recommended

pip install bson
  • Outdated standalone package
  • Can cause import conflicts
  • No longer maintained
  • Missing MongoDB integration

Step-by-Step Installation Guide

Step 1: Check Your Python Installation

Make sure you have Python 3.7 or later installed:

python --version

You should see something like "Python 3.9.7" or higher.

Step 2: Install PyMongo

Use pip to install the official MongoDB Python driver:

pip install pymongo

For a specific version:

pip install pymongo==4.6.0

Step 3: Verify Installation

Test that everything is working correctly:

python -c "import pymongo; print(pymongo.version)"

Working with BSON in Python: Basic Examples

Now that you've installed PyMongo, let's see how to work with BSON data. The PyMongo library handles BSON encoding and decoding automatically.

Encoding Python Data to BSON

Convert Python dictionaries to BSON format:

from bson import encode, decode

# Your Python data
user_data = {
    "name": "John Doe",
    "age": 30,
    "email": "[email protected]",
    "active": True
}

# Encode to BSON
bson_data = encode(user_data)
print(f"BSON bytes: {'{'}len(bson_data){'}'} bytes")

# You'll get binary data that's more efficient than JSON

Decoding BSON to Python

Convert BSON binary data back to Python objects:

from bson import encode, decode

# Decode BSON back to Python
decoded_data = decode(bson_data)
print(decoded_data)

# Output: {'name': 'John Doe', 'age': 30, 'email': '[email protected]', 'active': True}

Working with MongoDB Data Types

BSON supports special MongoDB types like ObjectId and DateTime:

from bson import ObjectId
from datetime import datetime

# Generate MongoDB ObjectId
user_id = ObjectId()
print(f"Generated ObjectId: {'{'}user_id{'}'}")

# Work with dates
document = {
    "_id": user_id,
    "username": "johndoe",
    "created_at": datetime.utcnow(),
    "last_login": datetime(2025, 11, 22, 10, 30, 0)
}

print(document)
# BSON handles datetime objects natively!

Learn more about MongoDB ObjectIds in our ObjectId Generator tool.

Converting Between JSON and BSON

Easily convert between JSON and BSON formats:

from bson import json_util
import json

# Python data with MongoDB types
data = {
    "_id": ObjectId(),
    "timestamp": datetime.utcnow(),
    "score": 95.5
}

# Convert to JSON string (MongoDB Extended JSON)
json_string = json_util.dumps(data)
print(json_string)

# Parse back from JSON
parsed_data = json_util.loads(json_string)
print(parsed_data)

Need a quick conversion? Use our JSON to BSON and BSON to JSON converters.

Common Use Cases for BSON in Python

1. MongoDB Database Operations

The most common use case - connecting to MongoDB and performing CRUD operations:

from pymongo import MongoClient

# Connect to MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['myapp']
users = db['users']

# Insert document (automatically converted to BSON)
user = {
    "name": "Alice",
    "email": "[email protected]",
    "age": 28
}
result = users.insert_one(user)

# Query documents (BSON returned as Python dicts)
user = users.find_one({"name": "Alice"})
print(user)

2. File Storage and Serialization

Save Python objects to disk in BSON format for efficient storage:

from bson import encode, decode

# Save to file
with open('data.bson', 'wb') as f:
    bson_data = encode({"key": "value", "number": 42})
    f.write(bson_data)

# Load from file
with open('data.bson', 'rb') as f:
    bson_data = f.read()
    data = decode(bson_data)
    print(data)

3. API Data Exchange

Send and receive binary BSON data in APIs for better performance:

import requests
from bson import encode, decode

# Send BSON data
data = {"user": "john", "action": "login"}
response = requests.post(
    'https://api.example.com/data',
    data=encode(data),
    headers={'Content-Type': 'application/bson'}
)

# Receive and decode BSON response
result = decode(response.content)
print(result)

Troubleshooting Common Issues

Error: "No module named 'bson'"

Solution: Install PyMongo (not the standalone bson package):

pip install pymongo

Error: "ImportError: cannot import name 'BSON'"

Cause: Conflicting bson packages installed.

Solution: Uninstall both packages and reinstall PyMongo:

pip uninstall bson pymongo
pip install pymongo

Error: "InvalidDocument: cannot encode object"

Cause: Trying to encode non-JSON-serializable objects.

Solution: Convert objects to BSON-compatible types:

from datetime import datetime

# Bad - custom objects won't work
class User:
    pass

# Good - use dictionaries with compatible types
data = {
    "name": "John",
    "created": datetime.utcnow(),  # BSON supports datetime
    "settings": {"theme": "dark"}  # Nested dicts are fine
}                      

Version Compatibility Issues

Make sure your PyMongo version is compatible with your Python version:

  • Python 3.7+: Use PyMongo 4.x
  • Python 2.7 or 3.4-3.6: Use PyMongo 3.x (legacy)

Best Practices When Working with BSON

Do's

  • Always use pymongo for MongoDB projects
  • Use json_util for JSON conversion
  • Handle ObjectId and datetime properly
  • Keep PyMongo updated to latest stable version
  • Use virtual environments for Python projects

Don'ts

  • Don't install the standalone bson package
  • Don't use standard json.dumps() for MongoDB types
  • Don't hardcode ObjectId strings
  • Don't ignore BSON size limits (16MB per document)
  • Don't mix PyMongo versions in the same project

Performance Optimization Tips

1. Use BSON for Large Data Transfers

BSON is more compact than JSON for binary data and can be 20-30% smaller for typical documents.

2. Batch Operations

When inserting multiple documents, use batch operations:

# Efficient - batch insert
collection.insert_many([doc1, doc2, doc3])

# Inefficient - multiple single inserts
collection.insert_one(doc1)
collection.insert_one(doc2)
collection.insert_one(doc3)

3. Limit Field Projections

Only retrieve the fields you need to reduce BSON decoding overhead and network transfer size.

Frequently Asked Questions

Q: Should I use "pip install bson" or "pip install pymongo"?

A: Always use pip install pymongo. The standalone bson package is outdated and can cause conflicts. PyMongo includes all BSON functionality you need.

Q: Do I need MongoDB installed to use BSON in Python?

A: No! You can use PyMongo's BSON encoding/decoding features without a MongoDB server. Just from bson import encode, decode and you're ready to work with BSON data.

Q: Can I use BSON with Flask or Django?

A: Absolutely! PyMongo works great with Flask and Django. Many developers use MongoDB as their database backend. Check out Flask-PyMongo or Djongo for Django integration.

Q: How do I convert JSON to BSON in Python?

A: Use the json_util module from PyMongo:

from bson import json_util

json_str = '{"name": "John", "age": 30}'
bson_data = json_util.loads(json_str)

Or use our online JSON to BSON converter for quick conversions.

Q: What Python version do I need for PyMongo?

A: PyMongo 4.x requires Python 3.7 or later. If you're still on Python 2.7 (not recommended!), you'll need to use PyMongo 3.x. Always use the latest Python 3.x version for best results.

Q: Is BSON faster than JSON in Python?

A: For MongoDB operations, yes! BSON encoding/decoding is optimized for database operations and supports more data types natively. However, for web APIs, JSON is usually preferred because it's human-readable. Learn more in our BSON vs JSON comparison.

Q: How do I handle BSON files in Python?

A: Read and write BSON files using binary mode:

from bson import encode, decode

# Write
with open('data.bson', 'wb') as f:
    f.write(encode(data))

# Read
with open('data.bson', 'rb') as f:
    data = decode(f.read())

Helpful BSON Tools & Resources

Python & BSON Documentation

BSON & MongoDB Resources

Python Framework Integration

Related Articles

Wrapping Up

Installing BSON support in Python is straightforward: just use pip install pymongo and you'll have everything you need to work with MongoDB's binary JSON format. Remember to avoid the standalone bson package, as it's outdated and can cause import conflicts.

Whether you're building a web application with Flask, creating a data pipeline, or just experimenting with MongoDB, PyMongo's BSON support makes it easy to work with binary data efficiently. The library handles all the complex serialization behind the scenes, so you can focus on building great applications.

Need help converting or validating BSON data?

Check out our free online tools: JSON to BSON converter, BSON to JSON converter, and BSON validator.