在setup.py中使用`package_data`包含没有__init__.py的非Python文件?
给定这个目录结构(里面有一个空的 __init__.py
文件和一个 logging.yml
文件都可以):
foo
│ setup.py
│
└─── foo
│ __init__.py
│
└─── config
logging.yml
这是我尝试写的 setup.py
文件:
from os import path
from setuptools import find_packages, setup
package_name = "foo"
if __name__ == "__main__":
setup(
name=package_name,
packages=find_packages(),
package_dir={package_name: package_name},
package_data={"config":[path.join(package_name, "config", "logging.yml")]},
include_package_data=True,
)
# Also tried:
# package_data={"config": [path.join("config", "logging.yml")]}
# package_data={"": [path.join("config", "logging.yml")]}
# package_data={"": [path.join(package_name, "config", "logging.yml")]}
在运行 python setup.py install
后没有出现错误(我也试过 python -m pip install .
),但是在我的虚拟环境根目录下运行 fd -HIFuuueyml logging
没有返回任何结果,而且在 foo.egg-info\SOURCES.txt
中也找不到这个文件。
附注:我在本地测试时使用的是 3.13.0a5 版本;setuptools 版本是 69.2.0;pip 版本是 24.0。不过在我的持续集成测试和发布中,使用的是 2.7、3.5、3.6、3.7、3.8、3.9、3.10、3.11、3.12 版本,涵盖了 Windows、Linux 和 macOS 系统。
1 个回答
1
这个方法可以用:
from setuptools import find_packages, setup
package_name = "foo"
if __name__ == "__main__":
setup(
name=package_name,
packages=find_packages(),
package_data={"foo": ["config/logging.yml"]},
include_package_data=True,
)
你只有一个包叫做 foo
,所以你的 package_data
只需要针对这个包来设置。