setup.py 中的自定义分发选项

Custom distribution option in setup.py

如何在setup()参数中传递自定义键值对?我需要它们用于自定义 build_scripts 步骤。

from distutils.core import setup

from somescripts import build_scripts

setup(name='somescripts',
      version=__version__,
      cmdclass= {
                 'build_scripts': build_scripts,
                 },
      custom_pairs={
          'compile_modules': True,
          'use_scons': True,
          'modules': [f for f in glob('scripts/[!_]*.spy')],
      },
)

这在 setup.py install 中给出了 "UserWarning: Unknown distribution option"(它变成了 --strict 的错误)

c:\python27\Lib\distutils\dist.py:267: UserWarning: Unknown distribution
 option: 'custom_pairs'
warnings.warn(msg)

更新:

自己找到了路。

from distutils.command.build_scripts import build_scripts as base
from distutils.core import setup

# patch distutils so that it won't skip "build_scripts"
# step if `scripts` list is empty
from distutils.dist import Distribution
def custom_has_scripts(self):
    return True
Distribution.has_scripts = custom_has_scripts

class build_scripts(base):
    def initialize_options(self):
        self.compile_modules = None
        self.use_scons = None
        self.modules = None
    def run(self):
        for module in self.modules:
            # generate scripts
            pass

setup(name='somescripts',
      version=__version__,
      cmdclass= {
                 'build_scripts': build_scripts,
                 },
      options={
          'build_scripts':{
              'compile_modules': True,
              'use_scons': True,
              'modules': [f for f in glob('scripts/[!_]*.spy')],
          },
      },
)