![](/img/trans.png)
[英]Why find_packages(exclude=xxx) does not work when doing setup.py sdist?
[英]setup.py sdist exclude packages in subdirectory
我有以下要打包的項目結構:
├── doc
│ └── source
├── src
│ ├── core
│ │ ├── config
│ │ │ └── log.tmpl
│ │ └── job
│ ├── scripts
│ └── test
└── tools
我想在src
下打包core
但排除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
執行此操作,我會很高興。
經過更多的test
后,我意識到使用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='jr@example.com',
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*
是我傾向於使用的東西,因為我們只保存帶有test
一詞的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,
)
供參考:
我還建議將以下內容添加到.gitignore
。
build
dist
pybueno.egg-info
並將構建和推送包移動到 pypi 或您的私有存儲庫位到 CI/CD 中,使整個設置看起來干凈整潔。
假設您的文件夾名為tests而不是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'])
install_requires=['xmltodict==0.9.0',
'pymongo==2.7.2',
'ftputil==3.1',
'psutil==2.1.1',
'suds==0.4',
],
include_package_data=True,
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.