Error: invalid requirement - app deploy

Hello every one, I’m trying to deploy an app but I always get this ERROR: Invalid requirement: ‘==========================================’ (from line 1 of /mount/src/proyek_analisis_data/requirements.txt).
Can you please take a look in the error message and give me some idea of how to fix ?
Thank you

Link to the public app (deployed on Community Cloud): link

GitHub repository: link

Following the error mesage

[12:27:26] 🖥 Provisioning machine...
[12:27:26] 🎛 Preparing system...
[12:27:26] ⛓ Spinning up manager process...
[12:27:23] 🚀 Starting up repository: 'proyek_analisis_data', branch: 'main', main module: 'dashboard/dashboard.py'
[12:27:23] 🐙 Cloning repository...
[12:27:24] 🐙 Cloning into '/mount/src/proyek_analisis_data'...
[12:27:24] 🐙 Cloned repository!
[12:27:24] 🐙 Pulling code changes from Github...
[12:27:24] 📦 Processing dependencies...

──────────────────────────────────────── uv ───────────────────────────────────────────

Using uv pip install.
error: Unexpected '=', expected '-c', '-e', '-r' or the start of a requirement at requirements.txt:1:1
Checking if Streamlit is installed

────────────────────────────────────────────────────────────────────────────────────────


──────────────────────────────────────── pip ───────────────────────────────────────────

Using standard pip install.
ERROR: Invalid requirement: '==========================================' (from line 1 of /mount/src/proyek_analisis_data/requirements.txt)

[notice] A new release of pip is available: 24.0 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
Checking if Streamlit is installed

────────────────────────────────────────────────────────────────────────────────────────

[12:27:27] ❗️ installer returned a non-zero exit code
[12:27:27] ❗️ Error during processing dependencies! Please fix the error and push an update, or try restarting the app.
[12:29:03] ❗️ Streamlit server consistently failed status checks
[12:29:03] ❗️ Please fix the errors, push an update to the git repo, or reboot the app.

Remove the invalid requirement ========================================== from your requirements file.

@Goyo Thanks for the help, but now I have a different problem

ERROR: Exception:
Traceback (most recent call last):
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", line 180, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py", line 245, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/commands/install.py", line 377, in run
    requirement_set = resolver.resolve(
                      ^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 95, in resolve
    result = self._result = resolver.resolve(
                            ^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 546, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 397, in resolve
    self._add_to_criteria(self.state.criteria, r, parent=None)
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py", line 173, in _add_to_criteria
    if not criterion.candidates:
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py", line 156, in __bool__
    return bool(self._sequence)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 155, in __bool__
    return any(self)
           ^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 143, in <genexpr>
    return (c for c in iterator if id(c) not in self._incompatible_ids)
                       ^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 47, in _iter_built
    candidate = func()
                ^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 182, in _make_candidate_from_link
    base: Optional[BaseCandidate] = self._make_base_candidate_from_link(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 228, in _make_base_candidate_from_link
    self._link_candidate_cache[link] = LinkCandidate(
                                       ^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 290, in __init__
    super().__init__(
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 156, in __init__
    self.dist = self._prepare()
                ^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 222, in _prepare
    dist = self._prepare_distribution()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 301, in _prepare_distribution
    return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 525, in prepare_linked_requirement
    return self._prepare_linked_requirement(req, parallel_builds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 640, in _prepare_linked_requirement
    dist = _get_prepared_distribution(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 71, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 54, in prepare_distribution_metadata
    self._install_build_reqs(finder)
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 124, in _install_build_reqs
    build_reqs = self._get_build_requires_wheel()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 101, in _get_build_requires_wheel
    return backend.get_requires_for_build_wheel()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_internal/utils/misc.py", line 745, in get_requires_for_build_wheel
    return super().get_requires_for_build_wheel(config_settings=cs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 166, in get_requires_for_build_wheel
    return self._call_hook('get_requires_for_build_wheel', {
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 321, in _call_hook
    raise BackendUnavailable(data.get('traceback', ''))
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Traceback (most recent call last):
  File "/home/adminuser/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
    obj = import_module(mod_path)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/tmp/pip-build-env-gs_snhtz/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 10, in <module>
    import distutils.core
ModuleNotFoundError: No module named 'distutils'


[notice] A new release of pip is available: 24.0 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
Checking if Streamlit is installed

────────────────────────────────────────────────────────────────────────────────────────

[14:14:42] ❗️ installer returned a non-zero exit code
[14:14:42] ❗️ Error during processing dependencies! Please fix the error and push an update, or try restarting the app.
[14:16:20] ❗️ Streamlit server consistently failed status checks
[14:16:20] ❗️ Please fix the errors, push an update to the git repo, or reboot the app.

How can I fix this problem?

One or some of your dependencies are too old for python 3.12. Either bump your dependencies or use an older python.

I fixed it by bumping my dependencies, but now I have another problem:

────────────────────── Traceback (most recent call last) ───────────────────────
  /home/adminuser/venv/lib/python3.12/site-packages/streamlit/runtime/scriptru  
  nner/exec_code.py:85 in exec_func_with_error_handling                         
                                                                                
  /home/adminuser/venv/lib/python3.12/site-packages/streamlit/runtime/scriptru  
  nner/script_runner.py:576 in code_to_exec                                     
                                                                                
  /mount/src/proyek_analisis_data/dashboard/dashboard.py:155 in <module>        
                                                                                
    152                                                                         
    153 # Memastikan fungsi main() dijalankan jika skrip dieksekusi             
    154 if __name__ == "__main__":                                              
  ❱ 155 │   main()                                                              
    156                                                                         
                                                                                
  /mount/src/proyek_analisis_data/dashboard/dashboard.py:51 in main             
                                                                                
     48 │                                                                       
     49 │   # Membaca data dari file "clustering_results.xls" dan "rfm_results  
     50 │   # Tanpa penanganan kesalahan                                        
  ❱  51 │   clustering_df = pd.read_csv('clustering_results.xls')               
     52 │   rfm_df = pd.read_csv('rfm_results.xls')                             
     53 │                                                                       
     54 │   # Membuat dua tab untuk navigasi clustering dan RFM                 
                                                                                
  /home/adminuser/venv/lib/python3.12/site-packages/pandas/io/parsers/readers.  
  py:1026 in read_csv                                                           
                                                                                
    1023 │   )                                                                  
    1024 │   kwds.update(kwds_defaults)                                         
    1025 │                                                                      
  ❱ 1026 │   return _read(filepath_or_buffer, kwds)                             
    1027                                                                        
    1028                                                                        
    1029 # iterator=True -> TextFileReader                                      
                                                                                
  /home/adminuser/venv/lib/python3.12/site-packages/pandas/io/parsers/readers.  
  py:620 in _read                                                               
                                                                                
     617 │   _validate_names(kwds.get("names", None))                           
     618 │                                                                      
     619 │   # Create the parser.                                               
  ❱  620 │   parser = TextFileReader(filepath_or_buffer, **kwds)                
     621 │                                                                      
     622 │   if chunksize or iterator:                                          
     623 │   │   return parser                                                  
                                                                                
  /home/adminuser/venv/lib/python3.12/site-packages/pandas/io/parsers/readers.  
  py:1620 in __init__                                                           
                                                                                
    1617 │   │   │   self.options["has_index_names"] = kwds["has_index_names"]  
    1618 │   │                                                                  
    1619 │   │   self.handles: IOHandles | None = None                          
  ❱ 1620 │   │   self._engine = self._make_engine(f, self.engine)               
    1621 │                                                                      
    1622 │   def close(self) -> None:                                           
    1623 │   │   if self.handles is not None:                                   
                                                                                
  /home/adminuser/venv/lib/python3.12/site-packages/pandas/io/parsers/readers.  
  py:1880 in _make_engine                                                       
                                                                                
    1877 │   │   │   │   is_text = False                                        
    1878 │   │   │   │   if "b" not in mode:                                    
    1879 │   │   │   │   │   mode += "b"                                        
  ❱ 1880 │   │   │   self.handles = get_handle(                                 
    1881 │   │   │   │   f,                                                     
    1882 │   │   │   │   mode,                                                  
    1883 │   │   │   │   encoding=self.options.get("encoding", None),           
                                                                                
  /home/adminuser/venv/lib/python3.12/site-packages/pandas/io/common.py:873 in  
  get_handle                                                                    
                                                                                
     870 │   │   # Binary mode does not support 'encoding' and 'newline'.       
     871 │   │   if ioargs.encoding and "b" not in ioargs.mode:                 
     872 │   │   │   # Encoding                                                 
  ❱  873 │   │   │   handle = open(                                             
     874 │   │   │   │   handle,                                                
     875 │   │   │   │   ioargs.mode,                                           
     876 │   │   │   │   encoding=ioargs.encoding,                              
────────────────────────────────────────────────────────────────────────────────
FileNotFoundError: [Errno 2] No such file or directory: 'clustering_results.xls'

How can I fix this problem?

Use paths relative to the root of the repository.

Thank you so much for helping me solve the issue, it’s now working fine.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.