2016-01-10 4 views
0

Как передать пользовательские пары ключ-значение в параметрах setup()? Мне нужны они для настраиваемого шага build_scripts.Пользовательский вариант распределения в setup.py

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

Это дает "UserWarning: Неизвестный параметр распределения" в setup.py install (который превращается в ошибку с --strict)

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

UPDATE:

  • Distutils не называют build_scripts на все, если scripts kwarg не является
+0

IIRC вы должны использовать их непосредственно в качестве параметров в 'setup()' call, а не в dict. – Lav

+0

@Lav они все равно будут «Неизвестный вариант распространения» –

+0

Хмм, на самом деле, где вы нашли эти параметры? У меня нет большого опыта работы с distutils, но я проверил ссылку на distutils и setuptools, а также их исходные коды и не могу найти эти параметры нигде. – Lav

ответ

0

Нашел путь сам.

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

 Смежные вопросы

  • Нет связанных вопросов^_^