gpt4 book ai didi

弱依赖项目的python打包

转载 作者:行者123 更新时间:2023-12-04 10:50:14 24 4
gpt4 key购买 nike

我试图找出一种打包和部署我创建的许多 python 包的好方法。最终,我想使用一些包存储库进行部署或创建某种设置脚本。

我的项目结构如下:我有两个子项目AB两者都使用另一个自创包中的工具C . C 中的工具仅供内部使用,一般观众不感兴趣。但是,AB应部署。我希望用户可以安装AB彼此独立,但我不需要/不想部署 C作为独立的。

在最好的情况下,我希望用户能够使用类似的东西安装软件包

pip install my_project.A

或者
pip install my_project.B

此外,在 A , 我要导入 C如下:
import my_project.C

我需要打包 A , B , 和 C独立并与 install_requires 合作在 setuptools.setup ?如果所有项目都属于一个大型“元项目”,有没有办法可以将它们弱捆绑在一起,同时保持它们的一般独立性? (在我的示例中, C 包含“工具”。我不想部署具有此类通用名称的包。然后我是否必须将其部署为 my_project_tools ?)

有没有办法让从该元包安装的所有包都安装在同一文件夹层次结构中,同时允许安装该元包的单独组件?
有相关回答 here ,但我的问题不同之处在于有共同的依赖 C .

我是包装新手,所以我很欣赏那些不需要太多背景知识的答案。

附加信息:我使用的是 Python 3.7,该程序与较低版本不兼容。不过,它应该独立运行平台。有些模块需要编译和 Cython。

最佳答案

像下面这样的东西可能是一个解决方案,其中 Nmspc 可以被认为是 Ping 和 Pong 的元项目。它实际上并未经过测试,因此需要进行一些调整。

目录树可能如下所示:

.
├── NmspcCore
│ ├── nmspc
│ │ └── _core
│ │ ├── __init__.py
│ │ └── common.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ ├── __init__.py
│ │ └── foo.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ ├── __init__.py
│ └── bar.py
└── setup.py

3个Python项目:
  • NmspcCore 提供 nmspc._core (前导下划线表示私有(private)元素),不应直接安装
  • NmspcPing 提供 nmspc.ping并依赖于 NmspcCore
  • NmspcPong 提供 nmspc.pong并依赖于 NmspcCore

  • 它们都使用命名空间包。它们可以根据 Python Packaging User Guide on "Packaging namespace packages, Native namespace packages" 中的说明进行设计。 .还有一个例子 here .
    NmspcCore/setup.py :
    #!/usr/bin/env python3

    import setuptools

    setuptools.setup(
    name='NmspcCore',
    version='1.2.3',
    packages=['nmspc._core',],
    )
    NmspcCore/nmspc/_core/common.py
    MARCO = 'polo'
    NmspcPing/setup.py (同样 NmspcPong/setup.py ):
    #!/usr/bin/env python3

    import setuptools

    setuptools.setup(
    name='NmspcPing',
    version='1.2.3',
    packages=['nmspc.ping',],
    install_requires=['NmspcCore',],
    )
    NmspcPing/nmspc/ping/foo.py
    import nmspc._core

    print(nmspc._core.common.MARCO)

    也可以考虑一个伞形项目 Nmspc。这样的项目将是空的(没有实际代码),但会将 NmspcPing 和 NmspcPong 作为直接依赖项,因此可以一次安装整个项目集合。

    关于弱依赖项目的python打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515230/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com