2015-11-28 18 views
5

python setup.py test linting、testing、およびカバレッジコマンドを作成するために、私はカスタムコマンドを作成しました。しかし、それはもはやtests_requireとして指定された依存関係をインストールしません。どのようにして両方の作業を同時に行うことができますか?カスタムテストコマンドのPython setup.pyテスト依存関係

class TestCommand(setuptools.Command): 

    description = 'run linters, tests and create a coverage report' 
    user_options = [] 

    def initialize_options(self): 
     pass 

    def finalize_options(self): 
     pass 

    def run(self): 
     self._run(['pep8', 'package', 'test', 'setup.py']) 
     self._run(['py.test', '--cov=package', 'test']) 

    def _run(self, command): 
     try: 
      subprocess.check_call(command) 
     except subprocess.CalledProcessError as error: 
      print('Command failed with exit code', error.returncode) 
      sys.exit(error.returncode) 


def parse_requirements(filename): 
    with open(filename) as file_: 
     lines = map(lambda x: x.strip('\n'), file_.readlines()) 
    lines = filter(lambda x: x and not x.startswith('#'), lines) 
    return list(lines) 


if __name__ == '__main__': 
    setuptools.setup(
     # ... 
     tests_require=parse_requirements('requirements-test.txt'), 
     cmdclass={'test': TestCommand}, 
    ) 

答えて

3

あなたは間違ったクラスを継承しています。 setuptools.command.test.testを継承してください。それ自体はsetuptools.Commandのサブクラスですが、依存関係のインストールを処理する追加の方法があります。 run()ではなく、run_tests()を上書きします。

だから、の線に沿って何か:

from setuptools.command.test import test as TestCommand 


class MyTestCommand(TestCommand): 

    description = 'run linters, tests and create a coverage report' 
    user_options = [] 

    def run_tests(self): 
     self._run(['pep8', 'package', 'test', 'setup.py']) 
     self._run(['py.test', '--cov=package', 'test']) 

    def _run(self, command): 
     try: 
      subprocess.check_call(command) 
     except subprocess.CalledProcessError as error: 
      print('Command failed with exit code', error.returncode) 
      sys.exit(error.returncode) 


if __name__ == '__main__': 
    setuptools.setup(
     # ... 
     tests_require=parse_requirements('requirements-test.txt'), 
     cmdclass={'test': MyTestCommand}, 
    ) 
関連する問題