如何通过pyproject.toml在Python包中包含.env文件?
为什么
"*" = ["*.*"]无法包含.env文件? 核心原因:*.*的glob匹配规则不覆盖无扩展名文件
setuptools采用的glob模式里,*.*的匹配逻辑是选中文件名里至少包含一个点(.)、且点前后都有非空字符的文件。而.env的文件名以点开头,后面没有第二个点分隔的扩展名部分,完全不符合*.*的匹配条件,所以不会被纳入打包范围。
额外问题:错误的包名配置
你尝试的'src' = ['.env']配置无效,是因为package-data的键必须是Python包的名称(比如program、p1),而非文件系统的目录路径(src是根目录,不属于包名范畴)。
正确的配置方式
如果要包含包内所有文件(包括无扩展名的.env),可以修改配置为:
[tool.setuptools.package-data] "*" = ["*"]
或者更精准地指定目标文件:
[tool.setuptools.package-data] "p1" = [".env"]
补充说明
setuptools的package-data仅对被识别为Python包的目录生效(即目录下存在__init__.py)。如果你的p1/p2目录没有__init__.py,需要先添加该文件让setuptools将其识别为包,否则这些目录下的文件不会被纳入打包范围(若要打包非包目录的文件,需使用data-files配置,属于另一种场景)。
内容的提问来源于stack exchange,提问作者Devarapalli Vamsi
相关产品推荐
相关产品推荐

