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找不到?
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)