Files
crewAI/tests/installation/test_dependency_compatibility.py

81 lines
2.7 KiB
Python

"""
Test module for verifying dependency compatibility with different package managers.
These tests ensure that critical dependencies can be installed without conflicts.
"""
import contextlib
import os
import shutil
import subprocess
import sys
import tempfile
import pytest
@contextlib.contextmanager
def temporary_package_environment():
"""Create an isolated environment for package testing.
This context manager creates a temporary directory where package installations
can be tested in isolation, then cleans up afterward.
"""
temp_dir = tempfile.mkdtemp()
old_cwd = os.getcwd()
try:
os.chdir(temp_dir)
yield temp_dir
finally:
os.chdir(old_cwd)
shutil.rmtree(temp_dir, ignore_errors=True)
def test_pypika_installation():
"""Test that pypika can be installed without packaging.licenses errors.
This test verifies that pypika 0.48.9 (a dependency of chromadb, which is a
dependency of CrewAI) can be installed without errors related to the
packaging.licenses module when using the UV package manager.
"""
# Check if uv is available
uv_path = shutil.which("uv")
if not uv_path:
pytest.skip("UV package manager not available, skipping test")
# Use isolated environment for testing
with temporary_package_environment():
# Install pypika using uv
result = subprocess.run(
["uv", "pip", "install", "pypika==0.48.9", "--no-deps"],
capture_output=True,
text=True,
)
assert result.returncode == 0, f"Failed to install pypika: {result.stderr}\nCommand output: {result.stdout}"
def test_chromadb_installation():
"""Test that chromadb can be installed without packaging.licenses errors.
This test verifies that chromadb (a direct dependency of CrewAI) can be
installed without errors related to the packaging.licenses module when
using the UV package manager.
"""
# Skip this test if running in CI/CD to avoid long test times
if "CI" in os.environ:
pytest.skip("Skipping in CI environment to reduce test time")
# Check if uv is available
uv_path = shutil.which("uv")
if not uv_path:
pytest.skip("UV package manager not available, skipping test")
# Use isolated environment for testing
with temporary_package_environment():
# Install chromadb using uv
result = subprocess.run(
["uv", "pip", "install", "chromadb>=0.5.23", "--no-deps"],
capture_output=True,
text=True,
)
assert result.returncode == 0, f"Failed to install chromadb: {result.stderr}\nCommand output: {result.stdout}"