我想要打包以下项目结构:
├── 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指令)。我不知道它是错误还是功能,但仍有可能使用sdist
排除MANIFEST.in
中的文件。
答案 0 :(得分:24)
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
个文件。
答案 1 :(得分:5)
在项目根目录的MANIFEST.in
中,添加
prune src/test/
然后使用python setup.py sdist
答案 2 :(得分:1)
我可能只使用find_packages文档中定义的通配符。我倾向于使用*test*
或*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*']), # 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,以使整个设置看起来整洁。
答案 3 :(得分:0)
假设您的文件夹名为 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,
)