如何编译多层Python类结构的库

问题描述 投票:0回答:1

挑战

我正在开发一个 Python 项目,该项目将充当科学仪器上 SCPI 命令行界面的翻译层。

它类似于Python中的多层包中描述的概念,但是我的情况稍微复杂一些,我似乎不知道如何使其工作。

以下是我的项目结构的表示(如果需要,我很乐意更改它):

Project Structure Representation

一些需要记住的事情

  • translator_lib.instruments.supplierX.moduleX中的文件名只有class1.py、class2.py和class3.py,其余文件名仅供参考以描述它们的来源。
  • supplier1和supplier2内部的许多模块和类具有相同的名称(如示例中所示)。
  • 每个目录都包含一个 __init__.py 文件

init.py files in each directory (not all expanded)

__init__.py 文件(基于示例布局)如下所示(注意我只有一个用于测试的模块)

translator_lib\__init__.py

from .instruments import supplier1

__all__ = ['supplier1']

translator_lib\instruments\__init__.py

from .supplier1 import module1

__all__ = ['module1']

我正在努力做什么

编译三个库,分别为 my_translator_libsupplier1_translator_libsupplier2_translator_lib

原因

开发团队将导入 my_translator_lib 来执行他们需要的操作,但如果我们想将示例代码发送给供应商1,我们想向他们发送 supplier1_translator_lib 并且他们应该只能导入 supplier1_translator_lib

示例 1:开发者

from translator_lib.instruments import supplier1
from translator_lib.instruments import supplier2


class DoStuff:

  __init__(self):
    self.sup1_class1 = supplier1.module1.class1.class1()
    self.sup2_class1 = supplier2.module1.class1.class1()

示例2:供应商1

from supplier1_translator_lib import module1
from supplier1_translator_lib import module2


class DoStuff:

  __init__(self):
    self.class1 = module1.class1.class1()
    self.class2 = module1.class2.class2()

我尝试了如何创建 Python 库深入研究:创建并发布您的第一个 Python 库中的多种组合和部分。 我设法创建一个库并安装它,但最终我只能导入 my_translator_lib,其他任何东西都不可见或可用。

在这方面的任何帮助将不胜感激。

python
1个回答
0
投票

您创建了

__init__.py
文件吗? 您需要在模块的每个子文件夹中都有然后。

名为

__init__.py
的文件用于将磁盘上的目录标记为 Python 包目录。尝试遵循以下步骤:

mydir/spam/__init__.py
mydir/spam/module.py

如果这不能解决您的问题,作为最后的资源,您可以尝试

sys.path.append('path_to_other_modules')

© www.soinside.com 2019 - 2024. All rights reserved.