56

これは私が現在行っている方法です:

import os
from setuptools import setup, find_packages
here = os.path.abspath(os.path.dirname(__file__))

requires = [
    'pyramid',
    'pyramid_debugtoolbar',
    'waitress',
    'requests',
    'mock',
    'gunicorn',
    'mongoengine',
    ]

setup(name='repoapi',
      version='0.0',
      description='repoapi',
      packages=find_packages(),
      include_package_data=True,
      zip_safe=False,
      install_requires=requires,
      tests_require=requires,
      test_suite="repoapi",
      entry_points="""\
      [paste.app_factory]
      main = repoapi:main
      """,
      )

この方法でよろしいでしょうか?いくつか問題があります。たとえば、ピラミッドの場合、システム全体のノーズテスト プラグインを使用してテストを実行することはできません。pyramidグローバルな python サイト パッケージにインストールする必要があります。

しかし、私はそれを望んでいません。だから私はこのプロジェクトのvirtualenvにnoseをインストールする必要があります。しかし、私はそれを依存関係にしたくありません。に属するべきだとは思わないrequires。そうではありません。それでも、私はいつも手動でインストールしたくありません。ええ、私はこれをしたくないことがたくさんあることを知っています...

しかし、それをどのように解決しますか?グローバルな python サイト パッケージを改ざんしたくありませんが、nose を virtualenv の一部としてインストールしたいと考えています。

また、pip インストール要件ファイル。バージョンを手動で指定する必要がなく、setup.py を手動で更新することを恐れる必要がないため、わずかに正確です。投げるだけpip freeze > file.txtで完成。

ただし、virtualenv にガベージ パッケージをスローするため、pip はガベージを返すことができます。

非常に多くのブレード。ベストプラクティスは何ですか? これらの問題にどのように対処しますか?

見逃したのかもしれませんが、https://github.com/django/django/blob/master/setup.py、Djangoはどのようにそれをしましたか?

4

2 に答える 2

82

次のように、要件を「インストール」依存関係と「テスト」依存関係に分割できます。

import os
from setuptools import setup, find_packages
here = os.path.abspath(os.path.dirname(__file__))

install_requires = [
    'pyramid',
    'pyramid_debugtoolbar',
    'waitress',
    'requests',
    'gunicorn',
    'mongoengine',
    ]

tests_require = [
    'mock',
    'nose',
    ]

setup(name='repoapi',
      ...
      install_requires=install_requires,
      tests_require=tests_require,
      test_suite="nose.collector",
      ...
      )

このように、誰かがパッケージをインストールすると、「インストール」依存関係のみがインストールされます。したがって、誰かがパッケージを使用したいだけの場合(そして、テストの実行に興味がない場合)、テストの依存関係をインストールする必要はありません。

テストを実行する場合は、次を使用できます。

$ python setup.py test

ドキュメントによる

これらの必要なプロジェクトは、テストが実行されるシステムにはインストールされませんが、ローカルにまだインストールされていない場合にのみ、プロジェクトのセットアップディレクトリにダウンロードされることに注意してください。

「test」の依存関係が設定されると、「test_suite」コマンドが実行されます。推奨されるテストランナーとしてnoseについて言及されたので、「nose.collector」を使用してそれを構成する方法を示しました。

ちなみに、Django setup.pyは、setuptoolsの基本を理解するための最もクリーンな例ではありません。Sentrysetup.pyは学ぶのに良い例だと思います。

于 2013-03-15T00:31:57.997 に答える