【发布时间】:2020-02-20 06:14:15
【问题描述】:
给定一个包含 3 个子目录的 Python 代码库:common、private、public,我如何构建一个排除其中一个目录的 Python Wheel 文件?
具体来说,我想构建一个包含common 和public 但不包括private 的轮文件
我有以下设置:
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
然后检查确认公共目录是否被排除,我发现它仍然存在:
python3
# works, as expected
>>> import mylib.public
# also works, unexpected! i do not want to expose this code
>>> import mylib.private
出于技术原因,这里不能将代码分成 3 个不同的包,因此我正在寻找一种解决方案,让我可以将 setuptools 配置为忽略文件夹。
【问题讨论】:
-
你不能在
mylib之外设置私有吗?要么你从它导入到 public 和 common,在这种情况下你需要它在轮子中,或者你不需要它,为什么它在 mylib 中? -
@Dan 因为我将代码发送给两个不同的受众。公众观众不能拥有私人密码。这是一个非常缩小和简化的示例,实际代码库很大。另一种选择是将通用代码解耦到它自己的包中,但现在这不可行。所以我想要一个文件路径排除解决方案。
标签: python python-3.x pip python-wheel