パッケージ化したい次のプロジェクト構造があります。
├── doc
│ └── source
├── src
│ ├── core
│ │ ├── config
│ │ │ └── log.tmpl
│ │ └── job
│ ├── scripts
│ └── test
└── tools
core
をsrc
の下にパッケージ化しますが、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
を除外できることはわかっていますが、setup
とfind_packages
を使用してこれを行う方法を教えていただければ幸いです。
少し試してみたところ、python setup.py install
を使用してパッケージをビルドすると、期待どおりに機能することがわかりました(つまり、test
が除外されます)。ただし、python setup.py sdist
を発行すると、すべてが含まれます(つまり、excludeディレクティブは無視されます)。バグなのか機能なのかはわかりませんが、MANIFEST.in
を使用してsdist
のファイルを除外する可能性はまだあります。
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__.py
、core/config/log.tmpl
ファイルは含まれます。
プロジェクトルートのMANIFEST.in
に、次を追加します
Prune src/test/
次にpython setup.py sdist
でパッケージをビルドします
おそらく 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に移動して、セットアップ全体をきれいに整頓します。
フォルダーが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,
)