创建 pip 包时,如何使用 Manifest.in 排除目录?

When creating a pip package, how do I exclude directories using Manifest.in?

我正在尝试创建一个 pip 包,当我创建该包时,它总是包含 __pycache__ 个子目录。我正在使用 MANIFEST.in 来指定应该包括哪些文件类型并且效果很好。

如何告诉 MANIFEST.in 排除包中任意位置的特定文件夹?

编辑: 我试图排除一个 目录 ,而不仅仅是一个文件。清单中有几个选项可以排除文件,例如 global-excluderecursive-exclude。但是没有global-exclude-dir选项,这就是我在这里问的原因。

我的 setup.py 看起来像这样:

from setuptools import setup, find_packages

setup(
    name='my_package',
    version='0.0.1',
    install_requires=[
        'importlib-metadata; python_version == "3.8"',
    ],
    include_package_data=True,
    package_dir={"my_package": "contrib"},   # renamed src to contrib 
)

清单包含以下内容:

global-include *.npy *.npz
global-include *.txt
# [+ current exclude-directory test]

global-include 命令按预期工作。我尝试了以下排除任何 __pycache__ 目录(感谢@phd 的建议):

prune __pycache__
prune */__pycache__ 
recursive-exclude */__pycache__ *

此 post 的目标是包含 pip 包中的所有 __pycache__ 目录。这实际上是不可能的,因为每个 __init__.py 在创建清单后都会创建一个 __pycache__ 目录。

对于任何在使用 MANIFEST.in 构建轮子时寻找如何排除文件夹的答案的人,phd posted 的两个建议都有效:

prune */__pycache__ 
recursive-exclude */__pycache__ *
prune __pycache__

仅修剪 top-level __pycache__。要在目录层次结构中的任何位置修剪 __pycache__,请使用

prune */__pycache__