Python导入特定的子模块,具体取决于

2024-10-17 06:12:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中导入模块时,我需要一些帮助。所以。。没有不必要的唠叨:

我有特定的目录和模块结构:

  • 多软/
    • 核心/
    • __初始值
    • 软1/
      • __初始值
      • 你知道吗控件.py你知道吗
      • 你知道吗钻机.py你知道吗
    • MySoft公司/
      • __初始值
      • 你知道吗控件.py你知道吗
      • 你知道吗钻机.py你知道吗

现在,从用户的角度来看,您只能导入:

import multisoft.Core as MSC

例如,您应该通过以下方式访问子模块:

MSC.Controls.someFunction()

这个模块可以在不同的软件中使用,从用户的角度看,你在哪个软件中并不重要。本模块使用方法相同。当然各个子模块的实现方式,也因软件而异。你知道吗

我有一些限制,我必须保持。基本上每个模块都可以有更多或更少的文件。以及所有的__ 在每个软件实现中都必须考虑变量:

  • MySoft/\uuu init\uuuuuy.py
  • 软1/\uu初始化\uuuuuuuuuy.py

(在那些init的文件中,您放置了uuu all_uuuuu变量:uuu all_uuuuuuu=['Controls','Rigs'])

我制作了一部分代码,基本上做了我想做的事情:

核心/\uuuu初始\uuuuuuuuuuy.py

import os
import sys

def _softRecognize():

    if youAreInSoft1():
        directory = os.path.dirname(os.path.abspath(__file__))
        sys.path.insert(0,directory)
        module = __import__('Soft1', fromlist=['*'])
        globals().update(vars(module))


_softRecognize()

但我不能重新加载这个模块,这是我必须遵守的限制之一。你知道吗

import multisoft.Core as MSC
reload(MSC)

# Error: reload(): module Soft1 not in sys.modules
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
# ImportError: reload(): module Soft1 not in sys.modules # 

谢谢你的帮助

祝你一切顺利 卡米尔


Tags: 模块pathinpyimport核心软件os
1条回答
网友
1楼 · 发布于 2024-10-17 06:12:45

因此,您正在尝试抽象接口。有两种方法,条件导入或变量赋值:

# Conditional
if youAreInSoft1(): 
    import Soft1.Controls as Controls
    import Soft1.Rigs as Rigs
else:
    import Soft2.Controls as Controls
    import Soft2.Rigs as Rigs

reload(Controls)
reload(Rigs)

#Variable
import Soft1 as _soft1
import Soft2 as _soft2

Controls = None
Rigs = None

global Controls, Rigs

if youAreInSoft1():
    Controls = _soft1.Controls
    Rigs = _soft1.Controls
else:
    Controls = _soft2.Controls
    Rigs = _soft2.Controls

reload(Controls)
reload(Rigs)

在这两种情况下,您还需要让子模块重新加载它们所需要的任何东西,也就是说,如果您想要这种行为,重新加载控件也必须在down上重新加载它的子模块。你知道吗

相关问题 更多 >