Skip to content

Commit 0bd26af

Browse files
authored
Replace the remaining uses of pkg_resources with packaging and importlib_metadata. (pypa#736)
1 parent d01fdfa commit 0bd26af

9 files changed

Lines changed: 35 additions & 83 deletions

File tree

changelog/736.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Eliminated dependency on Setuptools/pkg_resources and replaced with packaging and importlib_metadata.

mypy.ini

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ strict_equality = True
2222
; https://github.com/tartley/colorama/issues/206
2323
ignore_missing_imports = True
2424

25+
[mypy-packaging]
26+
ignore_missing_imports = True
27+
2528
[mypy-pkginfo]
2629
; https://bugs.launchpad.net/pkginfo/+bug/1876591
2730
ignore_missing_imports = True
@@ -37,10 +40,6 @@ ignore_missing_imports = True
3740
[mypy-rfc3986]
3841
ignore_missing_imports = True
3942

40-
[mypy-setuptools]
41-
; https://github.com/python/typeshed/issues/2171
42-
ignore_missing_imports = True
43-
4443
[mypy-tqdm]
4544
; https://github.com/tqdm/tqdm/issues/260
4645
ignore_missing_imports = True

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ install_requires=
3838
readme_renderer >= 21.0
3939
requests >= 2.20
4040
requests-toolbelt >= 0.8.0, != 0.9.0
41-
setuptools >= 0.7.0
41+
packaging >= 16.2
4242
tqdm >= 4.14
4343
importlib_metadata >= 3.6
4444
keyring >= 15.1
64.4 KB
Binary file not shown.

tests/test_package.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,3 +264,8 @@ def test_malformed_from_file(monkeypatch):
264264
package_file.PackageFile.from_filename(filename, comment=None)
265265

266266
assert "Invalid distribution file" in err.value.args[0]
267+
268+
269+
def test_package_from_egg():
270+
filename = "tests/fixtures/twine-3.3.0-py3.9.egg"
271+
package_file.PackageFile.from_filename(filename, comment=None)

tests/test_repository.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,14 @@ def test_make_user_agent_string(default_repo):
8989
assert "User-Agent" in default_repo.session.headers
9090

9191
user_agent = default_repo.session.headers["User-Agent"]
92-
packages = ("twine/", "requests/", "requests-toolbelt/", "pkginfo/", "setuptools/")
92+
packages = (
93+
"twine/",
94+
"requests/",
95+
"requests-toolbelt/",
96+
"pkginfo/",
97+
"importlib_metadata/",
98+
"packaging/",
99+
)
93100
assert all(p in user_agent for p in packages)
94101

95102

twine/_installed.py

Lines changed: 0 additions & 60 deletions
This file was deleted.

twine/cli.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,24 @@
1414
import argparse
1515
from typing import Any, List, Tuple
1616

17-
import pkginfo
18-
import requests
19-
import requests_toolbelt
20-
import setuptools
21-
import tqdm
2217
from importlib_metadata import entry_points
18+
from importlib_metadata import version
2319

2420
import twine
25-
from twine import _installed
2621

2722
args = argparse.Namespace()
2823

2924

3025
def list_dependencies_and_versions() -> List[Tuple[str, str]]:
31-
return [
32-
("pkginfo", _installed.Installed(pkginfo).version),
33-
("requests", requests.__version__),
34-
("setuptools", setuptools.__version__),
35-
("requests-toolbelt", requests_toolbelt.__version__),
36-
("tqdm", tqdm.__version__),
37-
]
26+
deps = (
27+
"importlib_metadata",
28+
"packaging",
29+
"pkginfo",
30+
"requests",
31+
"requests-toolbelt",
32+
"tqdm",
33+
)
34+
return [(dep, version(dep)) for dep in deps] # type: ignore[no-untyped-call] # python/importlib_metadata#288 # noqa: E501
3835

3936

4037
def dep_versions() -> str:

twine/package.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
import subprocess
1818
from typing import Dict, NamedTuple, Optional, Sequence, Tuple, Union
1919

20-
import pkg_resources
20+
import importlib_metadata
21+
import packaging.utils
2122
import pkginfo
2223

2324
from twine import exceptions
@@ -58,7 +59,7 @@ def __init__(
5859
self.metadata = metadata
5960
self.python_version = python_version
6061
self.filetype = filetype
61-
self.safe_name = pkg_resources.safe_name(metadata.name)
62+
self.safe_name = packaging.utils.canonicalize_name(metadata.name)
6263
self.signed_filename = self.filename + ".asc"
6364
self.signed_basefilename = self.basefilename + ".asc"
6465
self.gpg_signature: Optional[Tuple[str, bytes]] = None
@@ -99,8 +100,10 @@ def from_filename(cls, filename: str, comment: Optional[str]) -> "PackageFile":
99100

100101
py_version: Optional[str]
101102
if dtype == "bdist_egg":
102-
pkgd = pkg_resources.Distribution.from_filename(filename)
103-
py_version = pkgd.py_version
103+
(dist,) = importlib_metadata.Distribution.discover( # type: ignore[no-untyped-call] # python/importlib_metadata#288 # noqa: E501
104+
path=[filename]
105+
)
106+
py_version = dist.metadata["Version"]
104107
elif dtype == "bdist_wheel":
105108
py_version = meta.py_version
106109
elif dtype == "bdist_wininst":

0 commit comments

Comments
 (0)