构建python .whl时排除目录?

时间:2019-10-23 23:47:14

标签: python python-3.x pip python-wheel

给出具有3个子目录的python代码库:common,private,public,如何构建不包含目录之一的python wheel文件?

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

的wheel文件

我有以下设置:

mypackage/
    mylib/
        commmon/
            __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

然后检查以确认公共目录已被排除,我发现它仍然存在:

python3

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

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

出于技术原因,此处无法将代码分为3个不同的包,因此,我正在寻找一种解决方案,该解决方案使我可以将setuptools配置为忽略文件夹。

1 个答案:

答案 0 :(得分:1)

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

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

应该是:

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

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