简体   繁体   English

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

[英]Custom distribution option in setup.py

How to pass custom key-value pairs in setup() parameters? 如何在setup()参数中传递自定义键值对? I need them for a custom build_scripts step. 我需要它们来执行自定义的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')],
      },
)

This gives "UserWarning: Unknown distribution option" in setup.py install (which turns into error with --strict ) 这会在setup.py install提供“ UserWarning:未知的分发选项”(使用--strict会出错)

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

UPDATE : 更新

  • distutils doesn't call build_scripts at all if scripts kwarg is empty 如果scripts kwarg为空,则distutils根本不调用build_scripts

Found the way myself. 自己找到了路。

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')],
          },
      },
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM