gpt4 book ai didi

python - 如何使用 setuptools 和 setup.py 从包中排除单个文件

转载 作者:行者123 更新时间:2023-11-28 19:14:45 24 4
gpt4 key购买 nike

我正在研究 blowdrycss。存储库是 here .

我希望将 blowdrycss_settings.py 的设置文件从 pypi 上的最终包中排除。目的是动态构建一个自定义设置文件,该文件将放置在用户的 virtualenv/项目文件夹中。

setup.py 中,我有以下内容:

packages=find_packages(exclude=['blowdrycss_settings.py', ]),

我也试过exclude_package_data :

exclude_package_data={
'': ['blowdrycss_settings.py'],
'': ['blowdrycss/blowdrycss_settings.py'],
'blowdrycss': ['blowdrycss_settings.py'],
},

然后我运行 python setup.py sdist bdist

但是,当我查看构建文件夹时,我仍然看到 blowdrycss_settings.py:

- build 
- lib
- blowdrycss_settings.py

似乎只排除一个文件应该很简单。

如何从分发包中排除 blowdrycss_settings.py

最佳答案

假设你有一个项目

root
├── setup.py
└── spam
├── __init__.py
├── bacon.py
└── eggs.py

并且您想从打包中排除 spam/eggs.py:

import fnmatch
from setuptools import find_packages, setup
from setuptools.command.build_py import build_py as build_py_orig


excluded = ['spam/eggs.py']


class build_py(build_py_orig):
def find_package_modules(self, package, package_dir):
modules = super().find_package_modules(package, package_dir)
return [
(pkg, mod, file)
for (pkg, mod, file) in modules
if not any(fnmatch.fnmatchcase(file, pat=pattern) for pattern in excluded)
]


setup(
packages=find_packages(),
cmdclass={'build_py': build_py}
)

excluded 列表中的 Glob 和多个条目也可以工作,因为它被 fnmatch 使用,因此您可以例如声明

excluded = [
'modules_in_directory/*.py',
'modules_in_subtree/**/*.py',
'path/to/other/module.py'
]

等等

此食谱基于my other answer问题setup.py exclude some python files from bdist .不同之处在于,这个配方排除了基于文件 globs 的模块,而另一个排除了基于 qualnames 的模块,例如

excluded = ['spam.*', '*.settings']

将排除spam包的所有子模块以及每个包和子包中名为settings的所有模块等。

关于python - 如何使用 setuptools 和 setup.py 从包中排除单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com