Repository: feast-dev/feast

Issue:
Feast CLI error - "No module named 'proto'"
## Expected Behavior 
Create a feature repo as expected.

## Current Behavior
Feast dies with an error when running the following:

~ ❯ feast init feature_repo                                                                                    
Traceback (most recent call last):
  File "/home/richard/anaconda3/envs/feast/bin/feast", line 5, in <module>
    from feast.cli import cli
  File "/home/richard/anaconda3/envs/feast/lib/python3.7/site-packages/feast/__init__.py", line 12, in <module>
    from .feature_service import FeatureService
  File "/home/richard/anaconda3/envs/feast/lib/python3.7/site-packages/feast/feature_service.py", line 6, in <module>
    from feast.base_feature_view import BaseFeatureView
  File "/home/richard/anaconda3/envs/feast/lib/python3.7/site-packages/feast/base_feature_view.py", line 19, in <module>
    from proto import Message
ModuleNotFoundError: No module named 'proto'

## Environment
Python 3.7.11
Created a brand new conda environment and then ran `pip install feast`, which installed the following:
```
Successfully installed Click-7.1.2 PyYAML-6.0 anyio-3.3.4 asgiref-3.4.1 attrs-21.2.0 cachetools-4.2.4 charset-normalizer-2.0.7 colorama-0.4.4 dill-0.3.4 fastapi-0.70.0 fastavro-1.4.7 feast-0.15.0 google-api-core-2.2.2 google-auth-2.3.3 googleapis-common-protos-1.52.0 grpcio-1.42.0rc1 grpcio-reflection-1.42.0rc1 h11-0.12.0 httptools-0.2.0 idna-3.3 importlib-metadata-4.8.2 importlib-resources-5.4.0 jsonschema-4.2.1 mmh3-3.0.0 numpy-1.21.4 pandas-1.3.4 pandavro-1.5.2 protobuf-3.19.1 pyarrow-6.0.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 pydantic-1.8.2 pyrsistent-0.18.0 python-dateutil-2.8.2 python-dotenv-0.19.1 pytz-2021.3 requests-2.26.0 rsa-4.7.2 six-1.16.0 sniffio-1.2.0 starlette-0.16.0 tabulate-0.8.9 tenacity-8.0.1 toml-0.10.2 tqdm-4.62.3 typing-extensions-3.10.0.2 urllib3-1.26.7 uvicorn-0.15.0 uvloop-0.16.0 watchgod-0.7 websockets-10.0 zipp-3.6.0
```

No other packages installed beforehand.


Discussion:
Seems to be fixed after running `pip install proto-plus jinja2`. These were not installed during the initial installation via pip.
The main issue here is we have `proto-plus` as a requirement under `CI`, so if a user just does `pip install feast` instead of `pip install feast[ci]`, they'll run into this issue. I'll just move `proto-plus` to be a general requirement.
yeah, now pypi feast 0.15.0 having this issue, better to release a version soon
> Seems to be fixed after running `pip install proto-plus jinja2`. These were not installed during the initial installation via pip.

This one worked for me.


Resolving patch:
diff --git a/sdk/python/setup.py b/sdk/python/setup.py
--- a/sdk/python/setup.py
+++ b/sdk/python/setup.py
@@ -54,6 +54,7 @@
     "pandas>=1.0.0",
     "pandavro==1.5.*",
     "protobuf>=3.10",
+    "proto-plus",
     "pyarrow>=4.0.0",
     "pydantic>=1.0.0",
     "PyYAML>=5.4.*",
@@ -113,15 +114,10 @@
     "firebase-admin==4.5.2",
     "pre-commit",
     "assertpy==1.1",
-    "proto-plus<1.19.7",
-    "google-cloud-bigquery>=2.28.1",
-    "google-cloud-bigquery-storage >= 2.0.0",
-    "google-cloud-datastore>=2.1.*",
-    "google-cloud-storage>=1.20.*,<1.41",
-    "google-cloud-core==1.4.*",
-    "redis-py-cluster==2.1.2",
-    "boto3==1.17.*",
-]
+    "pip-tools"
+] + GCP_REQUIRED + REDIS_REQUIRED + AWS_REQUIRED
+
+DEV_REQUIRED = ["mypy-protobuf==1.*", "grpcio-testing==1.*"] + CI_REQUIRED
 
 # Get git repo root directory
 repo_root = str(pathlib.Path(__file__).resolve().parent.parent.parent)
@@ -215,7 +211,7 @@ def run(self):
     # https://stackoverflow.com/questions/28509965/setuptools-development-requirements
     # Install dev requirements with: pip install -e .[dev]
     extras_require={
-        "dev": ["mypy-protobuf==1.*", "grpcio-testing==1.*"],
+        "dev": DEV_REQUIRED,
         "ci": CI_REQUIRED,
         "gcp": GCP_REQUIRED,
         "aws": AWS_REQUIRED,


Test patch:
diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml
--- a/.github/workflows/unit_tests.yml
+++ b/.github/workflows/unit_tests.yml
@@ -41,6 +41,8 @@ jobs:
         run: make install-python-ci-dependencies
       - name: Test Python
         run: FEAST_USAGE=False pytest -n 8 --cov=./ --cov-report=xml --verbose --color=yes sdk/python/tests
+      - name: Ensure conflict-free dependencies
+        run: FEAST_USAGE=False pip-compile --dry-run sdk/python/setup.py --extra ci
       - name: Upload coverage to Codecov
         uses: codecov/codecov-action@v1
         with: