Python setuptools:包目录不存在

Python setuptools: package directory does not exist

我有一个包含此 setup.py 文件的项目:

import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="",
    version="0.0.1",
    author="",
    author_email="",
    description="",
    long_description=long_description,
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(where="./src", exclude=("./tests",)),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.8',
)

这是我的项目目录结构(前两层):

$ tree -L 2
.
├── README.md
├── setup.py
├── src
│   └── my_pkg
└── tests
    ├── conftest.py
    ├── data
    ├── __init__.py
    ├── integration
    ├── __pycache__
    └── unit

当我 运行 任何 setuptools 命令时,我收到以下错误:

$ python setup.py build
running build
running build_py
error: package directory 'my_pkg' does not exist

其他命令如python setup.py developpython setup.py bdist-wheel也是如此。

我怀疑它与 src 目录有关,如 setup.py 中的 find_packages(where="./src") 调用中指定的那样。但是,我一直在关注 documentation,看起来确实在某个时候发现了 my_pkg 模块。

为什么build_py找不到?

find_packages() 自动生成包名。也就是说,在您的情况下,它所做的只是生成 ['my_pkg']。它实际上并没有告诉 setup() 在哪里可以找到 my_pkg,只是它应该期望在某处找到一个名为 my_pkg 的包。你必须单独告诉 setup() 它应该在哪里寻找包裹。这是令人困惑和违反直觉的吗?是的。无论如何,您可以使用 package_dir 参数告诉 setup() 在哪里可以找到 my_pkg。例如

package_dir={"":"src"}