Python setuptools:包目录不存在

Car*_*ten 8 python setuptools python-3.x python-packaging

我有一个包含此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',
)
Run Code Online (Sandbox Code Playgroud)

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

$ tree -L 2
.
??? README.md
??? setup.py
??? src
?   ??? my_pkg
??? tests
    ??? conftest.py
    ??? data
    ??? __init__.py
    ??? integration
    ??? __pycache__
    ??? unit
Run Code Online (Sandbox Code Playgroud)

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

$ python setup.py build
running build
running build_py
error: package directory 'my_pkg' does not exist
Run Code Online (Sandbox Code Playgroud)

python setup.py develop和等其他命令也会发生同样的情况python setup.py bdist-wheel

我怀疑它与做src目录,在指定的find_packages(where="./src")呼叫setup.py。但是,我一直在关注文档,它看起来确实my_pkg在某个时候发现模块。

为什么build_py找不到?

Dun*_*nes 9

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

package_dir={"":"src"}
Run Code Online (Sandbox Code Playgroud)

  • https://setuptools.readthedocs.io/en/latest/userguide/declarative_config.html#using-a-src-layout (4认同)