构建 python .whl 时排除目录?
Exclude a directory when building python .whl?
给定一个包含 3 个子目录的 Python 代码库:common、private、public,我如何构建一个排除其中一个目录的 Python wheel 文件?
具体来说,我想构建一个包含 common
和 public
但不包含 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",)),
即不包括包名称,不包括文件系统路径。
给定一个包含 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
然后检查以确认排除了 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",)),
即不包括包名称,不包括文件系统路径。