web-dev-qa-db-ja.com

setup.py sdistサブディレクトリのパッケージを除外

パッケージ化したい次のプロジェクト構造があります。

├── doc
│   └── source
├── src
│   ├── core
│   │   ├── config
│   │   │   └── log.tmpl
│   │   └── job
│   ├── scripts
│   └── test
└── tools

coresrcの下にパッケージ化しますが、testは除外します。これが私が失敗したことです:

      setup(name='core',
      version=version,  
      package_dir = {'': 'src'}, # Our packages live under src but src is not a package itself
      packages = find_packages("src", exclude=["test"]), # I also tried exclude=["src/test"]
      install_requires=['xmltodict==0.9.0',
                        'pymongo==2.7.2',
                        'ftputil==3.1',
                        'psutil==2.1.1',
                        'suds==0.4',
                        ],
      include_package_data=True,
      )

MANIFEST.inファイルを使用してtestを除外できることはわかっていますが、setupfind_packagesを使用してこれを行う方法を教えていただければ幸いです。

更新:

少し試してみたところ、python setup.py installを使用してパッケージをビルドすると、期待どおりに機能することがわかりました(つまり、testが除外されます)。ただし、python setup.py sdistを発行すると、すべてが含まれます(つまり、excludeディレクティブは無視されます)。バグなのか機能なのかはわかりませんが、MANIFEST.inを使用してsdistのファイルを除外する可能性はまだあります。

18
Oz123

find_packages("src", exclude=["test"])は機能します。
トリックはcore.Egg-infoディレクトリなどの古いファイルを削除することです。あなたの場合、src/core.Egg-infoを削除する必要があります。

使用したsetup.pyは次のとおりです。

from setuptools import setup, find_packages

setup(name='core',
      version='0.1',
      package_dir={'':'src'},
      packages=find_packages("src", exclude=["test"]), # <- test is excluded
      ####packages=find_packages("src"), # <- test is included
      author='J.R. Hacker',
      author_email='[email protected]',
      url='http://stackoverflow.com/q/26545668/4279',
      package_data={'core': ['config/*.tmpl']},
)

ディストリビューションを作成するには、次のコマンドを実行します。

$ python setup.py sdist bdist bdist_wheel

後者のコマンドを有効にするには、pip install wheelを実行します。

作成したファイルを検査しました。 testは含まれませんが、core/__init__.pycore/config/log.tmplファイルは含まれます。

30
jfs

プロジェクトルートのMANIFEST.inに、次を追加します

Prune src/test/

次にpython setup.py sdistでパッケージをビルドします

5

おそらく find_packages のドキュメントで定義されているワイルドカードを使用するだけです。 *test*または*tests*は、Word testを使用してテストファイル名のみを保存するため、よく使用されます。シンプルで簡単^-^。

setup(name='core',
  version=version,  
  package_dir = {'': 'src'}, # Our packages live under src but src is not a package itself
  packages = find_packages("src", exclude=['*tests*']), # I just use wild card. Works perfect ^-^
  install_requires=['xmltodict==0.9.0',
                    'pymongo==2.7.2',
                    'ftputil==3.1',
                    'psutil==2.1.1',
                    'suds==0.4',
                    ],
  include_package_data=True,
  )

FYI:

.gitignoreに以下を追加することもお勧めします。

build
dist
pybueno.Egg-info

そして、ビルドとプッシュパッケージをpypiまたはプライベートリポジトリのビットにCI/CDに移動して、セットアップ全体をきれいに整頓します。

1
bh4r4th

フォルダーがtestsではなくtestsと呼ばれているとすると、次のコードで機能するはずです。

  setup(name='core',
  version=version,  
  package_dir = {'': 'src'}, # Our packages live under src but src is not a package itself
  packages = find_packages('src', exclude=['tests'])
  install_requires=['xmltodict==0.9.0',
                    'pymongo==2.7.2',
                    'ftputil==3.1',
                    'psutil==2.1.1',
                    'suds==0.4',
                    ],
  include_package_data=True,
  )
0
ssalentin