`setuptools.command.sdistwalk_revctrl()`函数详解及用法指南
发布时间:2023-12-13 05:52:27
setuptools.command.sdistwalk_revctrl()函数是setuptools包中的一个用于构建源代码分发包的函数。它提供了一种方法来根据版本控制系统(如Git或Mercurial)的状态自动选择要包含在源码分发包中的文件。
该函数的基本用法如下:
from setuptools.command.sdist import sdist
from setuptools.command.sdist import sdist as cmd_sdist
from setuptools.command.bdist_egg import bdist_egg
class MySDist(sdist):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.sdist_versions.append('revctrl')
def make_distribution(self):
self.filelist = manifest_maker(self)
self.filelist.findall()
self.filelist.sort()
if self.prune:
self.filelist.prune()
self.read_manifest()
self.filelist.sort()
self.ensure_finalized('finalize_options')
builder = self.distribution.get_command_obj('build')
self.sdist_formats = ['gztar', 'zip', 'xztar', 'tar']
self.formats = self.sdist_formats + ['rpm']
self.dist_dir = '../dist'
self.run_command('build_sphinx')
self.run_command('egg_info')
self.run_command('build')
if self.enable_python3:
self.verify_version_requirements()
if self.use_revctrl:
self.run_command('sdistwalk_revctrl')
for f in self.filelist.files:
print(f)
self.make_release_tree(builder)
if self.archive_files:
self.make_archive()
class MyBDistEgg(bdist_egg):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.skip_requirements_regex = r'^(setuptools|pbr|\w+-\w+)$'
class MyEggInfo(egg_info):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.tag_build = '-github'
self.tag_date = True
setup(
name='my_package',
version='0.1',
cmdclass={
'sdist': MySDist,
'bdist_egg': MyBDistEgg,
'egg_info': MyEggInfo,
}
)
代码中使用了MySDist、MyBDistEgg和MyEggInfo类来自定义sdist、bdist_egg和egg_info命令的行为。在MySDist类中,我们重载了make_distribution方法,在构建源代码分发包之前首先调用self.run_command('sdistwalk_revctrl')来收集版本控制系统中修改的文件。这样,构建的源代码分发包中将只包含这些修改过的文件。
MyBDistEgg和MyEggInfo类分别用于重载bdist_egg和egg_info命令的行为。在MyEggInfo类中,我们设置了tag_build和tag_date属性,用于指定版本号的后缀标签。例如,设置tag_build为'-github',则源代码分发包的版本号将以-github作为后缀。
以上是一个使用setuptools.command.sdistwalk_revctrl()函数的示例。该函数可以帮助我们在构建源代码分发包时自动选择要包含的文件,以提高打包效率和避免包含不必要的文件。
