使用pyproject.toml时src/mlm目录Python文件被忽略的技术问询
问题解决思路
首先,你的配置里有两个关键问题,直接导致了子目录被忽略的情况:
1. include = ["*.py"] 配置完全错误
[tool.setuptools.packages.find] 里的include参数是用来匹配Python包名的,不是文件名。你写["*.py"]会让setuptools只去找名字以.py结尾的包,这显然不符合需求,直接删掉这一行,用默认的["*"]就能匹配所有合法包。
2. 子目录未被识别的核心原因
setuptools的packages.find只会识别包含__init__.py文件的Python包目录,如果你的子目录(比如目录结构里的tharavu,或者你提到的mlm)没有这个文件,就不会被当成包收录,分两种情况处理:
情况A:子目录是Python包(后续会加.py代码文件)
在子目录里新建一个空的__init__.py文件,比如src/tharavu/__init__.py,这样setuptools就会自动把它识别为Python包并收录。
情况B:子目录只存数据文件(比如你的txt文件)
如果不需要把它做成Python包,只是要打包里面的文件,有两种简单方法:
- 方法一:用MANIFEST.in
编辑你的MANIFEST.in文件,添加一行:include src/tharavu/*.txt - 方法二:用pyproject.toml配置
在pyproject.toml里新增以下内容:[tool.setuptools.package-data] # 如果tharavu是主包arichuvadi的子目录,用这个 "arichuvadi" = ["tharavu/*.txt"] # 如果tharavu是独立包(已经加了__init__.py),用这个 "tharavu" = ["*.txt"]
额外提示:单个.py文件的收录
你src下的arichuvadi.py、valam.py这些是单个模块文件,不是包,packages.find不会自动收录它们,需要在[project]里添加py-modules配置:
[project] # 其他配置不变 py-modules = ["arichuvadi", "orunguri-tha", "valam"]
最后修改后的完整pyproject.toml参考:
[build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "arichuvadi" version = "0.0.3" authors = [ { name="vanangamudi", email="sgfrecfs@gmail.com" }, ] description = "a basic set of tools to work with Tamil text" readme = "YENNAI_PADI.txt" license = { file="LICENSE" } requires-python = ">=3.5" classifiers = [ "Programming Language :: Python :: 3", "Operating System :: OS Independent", ] # 新增:收录单个py模块 py-modules = ["arichuvadi", "orunguri-tha", "valam"] [project.urls] [tool.setuptools] include-package-data = true [tool.setuptools.packages.find] where = ["src"] exclude = [] namespaces = true # 新增:打包数据文件(按需添加) [tool.setuptools.package-data] "arichuvadi" = ["tharavu/*.txt"]
内容的提问来源于stack exchange,提问作者vanangamudi
相关产品推荐
相关产品推荐

