setup.py sdist排除子目录中的包

Oz1*_*123 18 python setuptools

我有以下项目结构我想打包:

??? doc
?   ??? source
??? src
?   ??? core
?   ?   ??? config
?   ?   ?   ??? log.tmpl
?   ?   ??? job
?   ??? scripts
?   ??? test
??? tools
Run Code Online (Sandbox Code Playgroud)

我想包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,
      )
Run Code Online (Sandbox Code Playgroud)

我知道我可以排除test使用MANIFEST.in文件,但如果你能告诉我如何使用setup和,我会很高兴find_packages.

更新:

经过一些游戏后,我意识到构建包装的python setup.py install做法符合我的预期(也就是说,它排除了test).但是,发布会python setup.py sdist导致包含所有内容(即忽略我的exclude指令).我不知道它是一个bug还是一个功能,但仍有可能在sdist使用时排除文件MANIFEST.in.

jfs*_*jfs 26

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']},
)
Run Code Online (Sandbox Code Playgroud)

要创建分发,请运行:

$ python setup.py sdist bdist bdist_wheel
Run Code Online (Sandbox Code Playgroud)

要启用后一个命令,请运行:pip install wheel.

我检查了创建的文件.它们不包含test但包含core/__init__.py,core/config/log.tmpl文件.


All*_*ітy 5

MANIFEST.in项目根目录中,添加

prune src/test/
Run Code Online (Sandbox Code Playgroud)

然后用 python setup.py sdist