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)
更新:
- 如果
scripts
kwarg 为空,distutils 根本不会调用 build_scripts
自己找到了路。
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')],
},
},
)
如何在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)
更新:
- 如果
scripts
kwarg 为空,distutils 根本不会调用build_scripts
自己找到了路。
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')],
},
},
)