mlco2 / codecarbon

Track emissions from Compute and recommend ways to reduce their impact on the environment.
https://mlco2.github.io/codecarbon
MIT License
1.07k stars 168 forks source link

pkg_resources deprecated and moved to setuptools #605

Closed imciner2 closed 4 weeks ago

imciner2 commented 1 month ago

Description

Running a simple script leads to the error trace:

File ~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:6
      [1](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:1) """
      [2](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:2) The Carbon Tracker module. The following objects/decorators belong to the Public API
      [3](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:3) """
      [5](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:5) from ._version import __version__  # noqa
----> [6](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:6) from .emissions_tracker import (
      [7](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:7)     EmissionsTracker,
      [8](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:8)     OfflineEmissionsTracker,
      [9](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:9)     track_emissions,
     [10](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:10) )
     [12](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/__init__.py:12) __all__ = ["EmissionsTracker", "OfflineEmissionsTracker", "track_emissions"]

File ~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/emissions_tracker.py:17
     [14](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/emissions_tracker.py:14) from typing import Any, Callable, Dict, List, Optional, Union
     [16](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/emissions_tracker.py:16) from codecarbon._version import __version__
---> [17](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/emissions_tracker.py:17) from codecarbon.core import cpu, gpu, powermetrics
     [18](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/emissions_tracker.py:18) from codecarbon.core.config import get_hierarchical_config, parse_gpu_ids
     [19](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/emissions_tracker.py:19) from codecarbon.core.emissions import Emissions

File ~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/core/cpu.py:20
     [18](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/core/cpu.py:18) from codecarbon.core.util import detect_cpu_model
     [19](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/core/cpu.py:19) from codecarbon.external.logger import logger
---> [20](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/core/cpu.py:20) from codecarbon.input import DataSource
     [23](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/core/cpu.py:23) def is_powergadget_available() -> bool:
     [24](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/core/cpu.py:24)     try:

File ~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/input.py:9
      [6](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/input.py:6) from typing import Dict
      [8](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/input.py:8) import pandas as pd
----> [9](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/input.py:9) import pkg_resources
     [12](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/input.py:12) class DataSource:
     [13](https://file+.vscode-resource.vscode-cdn.net/home/imcinerney/dev/python/codecarbon/~/dev/python/codecarbon/.venv/lib64/python3.12/site-packages/codecarbon/input.py:13)     def __init__(self):

This shows that it is trying to import the pkg_resources package, but it was removed from the main installation and moved to setuptools in Python 3.12. You should either declare a dependency on setuptools to ensure it is installed, or switch away from using pkg_resources (since it is deprecated in favor of the importlib package: https://importlib-resources.readthedocs.io/en/latest/migration.html#pkg-resources-resource-filename).

What I Did

  1. Create a new virtual environment
  2. Install codecarbon: pip install codecarbon
  3. Try to run this sample script
import numpy as np
from codecarbon import EmissionsTracker

tracker = EmissionsTracker()
tracker.start()

for i in range(100):
    A = np.random.rand(100,100)
    B = np.random.rand(100,100)
    C = A*B

emissions: float = tracker.stop()
print(emissions)

See an error trace similar to what is shown above. If you then do pip install setuptools in the venv, it can work.

benoit-cty commented 1 month ago

Thanks for reporting this,I will look at it.