File size: 2,838 Bytes
1521ef5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Dependency Management Notes

This document outlines known dependency constraints and issues in the Schema Descriptor project. It's intended for maintainers and contributors to understand the dependency landscape.

## Critical Dependencies

### Protobuf (3.20.3)

This project requires protobuf version 3.20.3 due to several conflicting constraints:

- Streamlit 1.12.0 requires protobuf < 4.0.0
- Google Cloud BigQuery libraries require protobuf >= 3.19.5
- gRPC-status requires protobuf >= 4.21.6 (which we've worked around)

Using any other version of protobuf will cause dependency conflicts:
- Lower versions won't work with Google Cloud libraries
- Higher versions (4.x) won't work with Streamlit

### Altair (4.2.2)

Altair must be exactly version 4.2.2 because:

- Streamlit 1.12.0 depends on the `altair.vegalite.v4` module
- Newer versions of Altair (>= 5.0.0) removed this module structure
- This causes `ModuleNotFoundError: No module named 'altair.vegalite.v4'` errors

### Streamlit (1.12.0)

The application is built with Streamlit 1.12.0. Upgrading to newer versions would:
- Require extensive refactoring
- Potentially solve some dependency issues
- But introduce backwards compatibility concerns

### OpenAI (0.28.0)

OpenAI version 0.28.0 is used because:
- It has a compatible API with our LLM service integration
- Newer client libraries (>=1.0.0) have completely different APIs

## Dependency Resolution Strategy

The following installation order helps resolve dependency conflicts:

1. Install protobuf first: `pip install protobuf==3.20.3`
2. Install Altair: `pip install altair==4.2.2`  
3. Install Streamlit: `pip install streamlit==1.12.0`
4. Install OpenAI: `pip install openai==0.28.0`
5. Install remaining dependencies: `pip install -r requirements.txt --no-deps`

## CI/CD Pipeline

In the GitHub Actions workflow:

1. We explicitly install test dependencies first
2. Then install key dependencies in the correct order
3. Use `--no-deps` to avoid dependency resolution issues
4. Skip tests that are known to fail due to dependency mocking issues

## Future Improvements

Potential improvements to dependency management:

1. **Upgrade Streamlit**: Moving to a newer version would resolve several issues but require code changes
2. **Use Docker**: Containerization would provide a more consistent environment
3. **Split Requirements**: Create separate requirement files for main, dev, and test dependencies
4. **Fix Test Mocks**: Update tests to work better with the current dependency constraints

## Known Dependency-Related Issues

1. **Test failures**: Some tests fail when mocking dependencies due to strict type checking
2. **Install errors**: Non-ordered installation may lead to dependency resolution failures
3. **Version control**: Pin exact versions vs compatible versions (`==` vs `~=`) trade-off