Skip to content

Commit 73440d3

Browse files
authored
Fix pkg_resources warning (#804)
1 parent cbb7d0e commit 73440d3

3 files changed

Lines changed: 48 additions & 26 deletions

File tree

pyhealth/models/molerec.py

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import torch
22
import os
33
import math
4-
import pkg_resources
4+
import importlib.metadata as importlib_metadata
5+
from packaging import version
56
import numpy as np
67
from typing import Any, Dict, List, Tuple, Optional, Union
78
from rdkit import Chem
@@ -18,6 +19,31 @@
1819

1920
from pyhealth import BASE_CACHE_PATH as CACHE_PATH
2021

22+
23+
def _import_ogb(min_version: str = "1.3.5") -> None:
24+
"""Import ogb components and validate version."""
25+
try:
26+
installed = importlib_metadata.version("ogb")
27+
except importlib_metadata.PackageNotFoundError as exc:
28+
raise ImportError(f"Please install ogb>={min_version}.") from exc
29+
30+
if version.parse(installed) < version.parse(min_version):
31+
raise ImportError(
32+
f"ogb>={min_version} required, but found {installed}."
33+
)
34+
35+
from ogb.utils import smiles2graph
36+
from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder
37+
38+
globals().update(
39+
{
40+
"smiles2graph": smiles2graph,
41+
"AtomEncoder": AtomEncoder,
42+
"BondEncoder": BondEncoder,
43+
}
44+
)
45+
46+
2147
def graph_batch_from_smiles(smiles_list, device=torch.device("cpu")):
2248
edge_idxes, edge_feats, node_feats, lstnode, batch = [], [], [], 0, []
2349

@@ -309,19 +335,14 @@ def __init__(
309335
):
310336
super(MoleRecLayer, self).__init__()
311337

312-
dependencies = ["ogb>=1.3.5"]
313-
314338
# test whether the ogb and torch_scatter packages are ready
315339
try:
316-
pkg_resources.require(dependencies)
317-
global smiles2graph, AtomEncoder, BondEncoder
318-
from ogb.utils import smiles2graph
319-
from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder
320-
except Exception as e:
340+
_import_ogb("1.3.5")
341+
except Exception:
321342
print(
322343
"Please follow the error message and install the [ogb>=1.3.5] packages first."
323344
)
324-
print(e)
345+
raise
325346

326347
self.hidden_size = hidden_size
327348
self.coef, self.target_ddi = coef, target_ddi
@@ -569,18 +590,13 @@ def __init__(
569590
else:
570591
self.mode = "multilabel"
571592

572-
dependencies = ["ogb>=1.3.5"]
573-
574593
try:
575-
pkg_resources.require(dependencies)
576-
global smiles2graph, AtomEncoder, BondEncoder
577-
from ogb.utils import smiles2graph
578-
from ogb.graphproppred.mol_encoder import AtomEncoder, BondEncoder
579-
except Exception as e:
594+
_import_ogb("1.3.5")
595+
except Exception:
580596
print(
581597
"Please follow the error message and install the [ogb>=1.3.5] packages first."
582598
)
583-
print(e)
599+
raise
584600

585601
self.embedding_dim = embedding_dim
586602
self.hidden_dim = hidden_dim

pyhealth/sampler/sage_sampler.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import copy
22
from typing import List, Optional, Tuple, NamedTuple, Union, Callable, TypeVar
3-
import pkg_resources
43
import torch
54
from torch import Tensor
65

@@ -103,19 +102,16 @@ def __init__(self, dataset, edge_index, # is a Union[Tensor, SparseTensor],
103102

104103
if 'collate_fn' in kwargs:
105104
del kwargs['collate_fn']
106-
107-
dependencies = ["torch_sparse"]
108105

109-
# test whether the ogb and torch_scatter packages are ready
106+
# Ensure torch_sparse is available before proceeding
110107
try:
111-
pkg_resources.require(dependencies)
112108
global SparseTensor
113109
from torch_sparse import SparseTensor
114110
except Exception as e:
115111
print(
116112
"Please follow the error message and install the [torch_sparse] packages first."
117113
)
118-
print(e)
114+
raise
119115

120116
# Save for Pytorch Lightning...
121117
self.raw_data = dataset

tests/core/test_molerec.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import unittest
22
import torch
3+
import importlib.metadata as importlib_metadata
4+
from packaging import version
35

46
from pyhealth.datasets import create_sample_dataset, get_dataloader
57
from pyhealth.models import MoleRec
@@ -10,11 +12,19 @@ class TestMoleRec(unittest.TestCase):
1012

1113
def setUp(self):
1214
"""Set up test data and model."""
15+
min_version = "1.3.5"
1316
try:
14-
import pkg_resources
15-
pkg_resources.require(["ogb>=1.3.5"])
16-
except Exception:
17+
installed = importlib_metadata.version("ogb")
18+
except importlib_metadata.PackageNotFoundError:
1719
self.skipTest("ogb package not available")
20+
21+
if version.parse(installed) < version.parse(min_version):
22+
self.skipTest(f"ogb>={min_version} required, but found {installed}")
23+
24+
try:
25+
from ogb.utils import smiles2graph # noqa: F401
26+
except Exception as exc:
27+
self.skipTest(f"ogb import failed: {exc}")
1828

1929
self.samples = [
2030
{

0 commit comments

Comments
 (0)