Python setuptools:包目录不存在

Posted

技术标签:

【中文标题】Python setuptools:包目录不存在【英文标题】:Python setuptools: package directory does not exist 【发布时间】:2021-01-20 05:34:28 【问题描述】:

我有一个带有这个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找不到?

【问题讨论】:

更改为packages=setuptools.find_packages(where="src", exclude=("tests",)) @SreeramTP 这没什么区别。 setuptools.setup( name="", version="0.0.1", author="", author_email="", description="", long_description=long_description, long_description_content_type="text/markdown", package_dir="": str("src"), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], python_requires='>=3.8', ) 你可以试试这个吗? @Carsten 添加package_dir 似乎确实可以解决问题。 【参考方案1】:

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

package_dir="":"src"

【讨论】:

嗨,有没有办法用 setup.cfg 做到这一点? setuptools.readthedocs.io/en/latest/userguide/…

以上是关于Python setuptools:包目录不存在的主要内容,如果未能解决你的问题,请参考以下文章

python包管理工具

Python 安装包setuptools easy_install pip

安装pip

linux环境下的python安装过程(含setuptools)

python下安装 setuptools 和pip(python环境刚部署好)

安装setuptools与pip