Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions sacred/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import sys
from pathlib import Path

import pkg_resources
from importlib.metadata import distribution, distributions

import sacred.optional as opt
from sacred import SETTINGS
Expand Down Expand Up @@ -226,7 +226,7 @@
"pickletools",
"pip",
"pipes",
"pkg_resources",
"importlib",
"pkgutil",
"platform",
"plistlib",
Expand Down Expand Up @@ -498,8 +498,11 @@ def __init__(self, name, version):
def fill_missing_version(self):
if self.version is not None:
return
dist = pkg_resources.working_set.by_key.get(self.name)
self.version = dist.version if dist else None
try:
dist = distribution(self.name)
self.version = dist.version
except Exception:
self.version = None

def to_json(self):
return "{}=={}".format(self.name, self.version or "<unknown>")
Expand All @@ -524,11 +527,17 @@ def create(cls, mod):
if not cls.modname_to_dist:
# some packagenames don't match the module names (e.g. PyYAML)
# so we set up a dict to map from module name to package name
for dist in pkg_resources.working_set:
for dist in distributions():
try:
toplevel_names = dist._get_metadata("top_level.txt")
for tln in toplevel_names:
cls.modname_to_dist[tln] = dist.project_name, dist.version
# Use read_text to get top_level.txt content
if dist.files:
for file in dist.files:
if str(file).endswith("top_level.txt"):
top_level_txt = file.read_text()
for tln in top_level_txt.strip().split("\n"):
if tln:
cls.modname_to_dist[tln] = (dist.name, dist.version)
break
except Exception:
pass

Expand Down Expand Up @@ -701,7 +710,7 @@ def get_dependencies_from_imported_modules(globs, base_path):

def get_dependencies_from_pkg(globs, base_path):
dependencies = set()
for dist in pkg_resources.working_set:
for dist in distributions():
if dist.version == "0.0.0":
continue # ugly hack to deal with pkg-resource version bug
dependencies.add(PackageDependency(dist.project_name, dist.version))
Expand Down
9 changes: 4 additions & 5 deletions sacred/observers/mongo.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,15 @@
from sacred.observers.queue import QueueObserver
from sacred.serializer import flatten
from sacred.utils import ObserverError, PathType
import pkg_resources

import importlib.resources as importlib_resources # type: ignore

DEFAULT_MONGO_PRIORITY = 30

# This ensures consistent mimetype detection across platforms.
mimetype_detector = mimetypes.MimeTypes(
filenames=[pkg_resources.resource_filename("sacred", "data/mime.types")]
filenames=[importlib_resources.files("sacred").joinpath("data", "mime.types")]
)


def force_valid_bson_key(key):
key = str(key)
if key.startswith("$"):
Expand Down Expand Up @@ -662,4 +661,4 @@ def __init__(
),
interval=interval,
retry_interval=retry_interval,
)
)
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
Intended Audience :: Science/Research
Natural Language :: English
Operating System :: OS Independent
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12
Programming Language :: Python :: 3.13
Topic :: Utilities
Topic :: Scientific/Engineering
Topic :: Scientific/Engineering :: Artificial Intelligence
Expand Down
Loading