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

2024-05-12 20:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

├── 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,但是如果您能告诉我如何使用setupfind_packages执行此操作,我将非常高兴。

更新:

经过一段时间的反复尝试,我意识到用python setup.py install构建包可以达到我的预期效果(也就是说,它排除了test)。但是,发出python setup.py sdist会导致包含所有内容(即,它忽略我的exclude指令)。我不知道这是一个bug还是一个特性,但是仍然有可能使用MANIFEST.in排除sdist中的文件。


Tags: install文件inpycoretestsrcpackage
3条回答

我可能只是使用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中,使整个设置看起来干净整洁。

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__.pycore/config/log.tmpl文件。

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

prune src/test/

然后用python setup.py sdist构建包

相关问题 更多 >