给出具有3个子目录的python代码库:common,private,public,如何构建不包含目录之一的python wheel文件?
具体地说,我想构建一个包含common
和public
但不包括private
我有以下设置:
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配置为忽略文件夹。
答案 0 :(得分:1)
您在安装脚本中有一个简单的错误,这行:
packages=setuptools.find_packages(exclude=("mylib/private",)),
应该是:
packages=setuptools.find_packages(exclude=("mylib.private",)),
即不包括软件包名称,而不是文件系统路径。