【问题标题】:Exclude a directory when building python .whl?构建 python .whl 时排除目录?
【发布时间】:2020-02-20 06:14:15
【问题描述】:

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

具体来说,我想构建一个包含commonpublic 但不包括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


【解决方案1】:

你在设置脚本中有一个简单的错误,这一行:

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

应该是:

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

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

【讨论】:

  • 这不起作用,我仍然可以导入mylib.private。万一这是由于某些东西被缓存了,我确保将其重建得完全干净。没有运气。
  • 它确实有效,我已经通过重新创建您的目录树并在本地构建一个包来验证它。通过检查mylib.public.__file__ 实际上是site-packages 中的安装 代码,确保您不是简单地从当前工作目录导入mylib.private。请注意,我需要在打包代码时添加一个空的 mylib/__init__.py 文件,但问题中缺少该文件(在这种情况下,find_packages 将找不到 any 包)。
  • 它现在确实对我有用,我之前一定犯了一个错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2011-05-16
  • 2018-03-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 2013-12-14
相关资源
最近更新 更多