类似sklearn的导入/隐藏公共API

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

假设您有一个带有 src-layout 的 Python 包,如下所示:

package_folder
...
project.toml
/src
  /package
    __init__.py
    /models
      __init__.py
      _model_1.py
    ...

文件

_model_1.py
包含一个类
Model1
。安装
package
后,我想将
Model1
导入为
from package.models import Model1
。例如,在 sklearn 中,您将
MDS
导入为
from sklearn.manifold import MDS
,尽管 MDS 是
sklearn/manifold/_mds.py
中的一个类。我用
__all__
指定要导入的类,如 here:

## /src/package/models/__init__.py
from ._model_1 import Model1
__all__ = ["Model1"]

但是,它并没有按预期工作,因为它工作的唯一方法是导入为

from package.moldels._model_1 import Model1
。我尝试仅使用 setuptools TOML。我怎样才能做到这一点?

提前致谢!

这是我当前使用的

project.toml

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "package"
version = "0.1"

[tool.setuptools.packages.find]
where = ["src"]
python-3.x setuptools python-packaging pyproject.toml
1个回答
0
投票

删除

[tool.setuptools.packages.find]
where = ["src"]

并添加

[tool.setuptools]
package_dir = {"": "src"}

解决了问题。 (为什么?)

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