构建 python .whl 时排除目录?

Exclude a directory when building python .whl?

给定一个包含 3 个子目录的 Python 代码库:common、private、public,我如何构建一个排除其中一个目录的 Python wheel 文件?

具体来说,我想构建一个包含 commonpublic 但不包含 private

的 wheel 文件

我有以下设置:

mypackage/
    mylib/
        common/
            __init__.py
           ... common code ...
        private/
            __init__.py
            ... private code ...
        public/
            __init__.py
            ... public code ...
    setup_public.py
    setup_private.py

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

imoprt setuptools

setuptools.setup(
    name="public",
    version="0.1.0",
    author="james",
    description="public pkg",
    packages=setuptools.find_packages(exclude=("mylib/private",)), 
    classifiers=[
        "Programming Language :: Python :: 3",
    ],
)

当我构建并安装包时:

python3 setup_public.py sdist bdist_wheel
pip3 install dist/public-0.1.0-py3-none-any.whl

然后检查以确认排除了 public 目录,我发现它仍然存在:

python3

# works, as expected
>>> import mylib.public 

# also works, unexpected! i do not want to expose this code
>>> import mylib.private

由于技术原因,这里不能将代码分成 3 个不同的包,因此我正在寻找一种解决方案,让我配置 setuptools 以忽略文件夹。

您在安装脚本中有一个简单的错误,这一行:

packages=setuptools.find_packages(exclude=("mylib/private",)), 

应该是:

packages=setuptools.find_packages(exclude=("mylib.private",)), 

即不包括包名称,不包括文件系统路径。