pkg_resources 作为 API 已被弃用

问题描述 投票:0回答:2

当我尝试从 .tar.gz 包安装时,同时将警告变成错误:

python -W error -m pip install /some/path/nspace.pkga-0.1.0.tar.gz

我收到此错误:

ERROR: Exception:
Traceback (most recent call last):
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/base_command.py", line 169, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 248, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/commands/install.py", line 324, in run
    session = self.get_default_session(options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 98, in get_default_session
    self._session = self.enter_context(self._build_session(options))
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 125, in _build_session
    session = PipSession(
              ^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/network/session.py", line 342, in __init__
    self.headers["User-Agent"] = user_agent()
                                 ^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/network/session.py", line 175, in user_agent
    setuptools_dist = get_default_environment().get_distribution("setuptools")
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py", line 188, in get_distribution
    return next(matches, None)
           ^^^^^^^^^^^^^^^^^^^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py", line 183, in <genexpr>
    matches = (
              ^
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/metadata/base.py", line 612, in iter_all_distributions
    for dist in self._iter_distributions():
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py", line 176, in _iter_distributions
    for dist in finder.find_eggs(location):
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py", line 144, in find_eggs
    yield from self._find_eggs_in_dir(location)
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_internal/metadata/importlib/_envs.py", line 111, in _find_eggs_in_dir
    from pip._vendor.pkg_resources import find_distributions
  File "/opt/util/nspace1/lib/python3.11/site-packages/pip/_vendor/pkg_resources/__init__.py", line 121, in <module>
    warnings.warn("pkg_resources is deprecated as an API", DeprecationWarning)
DeprecationWarning: pkg_resources is deprecated as an API

pip 似乎已在已弃用的包中出售。负责的 pip 代码位于

pip/_internal/metadata/importlib/_envs.py
类中的
Environment
:

    def _iter_distributions(self) -> Iterator[BaseDistribution]:
        finder = _DistributionFinder()
        for location in self._paths:
            yield from finder.find(location)
            for dist in finder.find_eggs(location):
                # _emit_egg_deprecation(dist.location)  # TODO: Enable this.
                yield dist
            # This must go last because that's how pkg_resources tie-breaks.
            yield from finder.find_linked(location)

如果我注释掉嵌套的 for 循环(执行 find_eggs)认为工作正常:我没有收到错误并且安装了工作包。

如何从我的 setup.py 文件中猴子修补该

Environment
实例?

这是 macOS 上的 Python 3.11.3(因此应该使用 importlib.metadata 而不是 pkg_resources),pip==23.1,setuptools==67.6.1

背景:我只是在一个示例包上尝试这个,其原因是基于我的

ruamel.yaml
包的错误报告,它是在一个不太宽容的环境中构建的。我当然可以说不要使用
-W error
,但我宁愿解决这个问题,首先不调用有问题的、未使用的代码

python pip setuptools deprecation-warning
2个回答
15
投票

pip的票务跟踪器上有相关讨论。

这个问题似乎已在 pip 23.1.1 中得到解决:“

pkg_resources
(通过
setuptools
)恢复到
65.6.3
”。

并且 pip 23.1.2 似乎按预期供应商新的 setuptools(和

pkg_resources
),但没有弃用警告(另请参阅此 消息)。


0
投票

不推荐将 python setup.py 作为命令行工具运行。

不要

python setup.py install

DO

python -m pip install .
相反,请阅读 this

© www.soinside.com 2019 - 2024. All rights reserved.