使用相同的nam重新导入不同的python模块

2024-05-23 14:32:53 发布

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

我有一个python项目,需要能够运行外部脚本。在

这些脚本是在带有几个模块的目录结构中动态导入的。在

现在,由于这些脚本是独立编写的,并且彼此不知道,所以它们通常使用相同的模块名称。在

这使我在一个接一个地导入它们时遇到了问题。在

例如,我的目录结构如下:

  • 在主.py
    • a
      • a、 是的
      • 在实用工具.py在
    • b
      • b、 是的
      • 在实用工具.py在

所以我有一个主.py根文件夹中的脚本和a和b文件夹中的2个“外部”脚本。在

两个脚本使用不同的实用工具.py模块。在

a/a.py的内容:

import utils
utils.hello()

a的内容/实用工具.py公司名称:

^{pr2}$

b/b.py的内容:

import utils
utils.hello()

b的内容/实用工具.py公司名称:

def hello():
    print 'hello from b'

内容主.py在

import sys
sys.path.append('a')
import a
sys.path.append('b')
import b

现在,这个示例打印:

hello from a
hello from a

我显然需要它来打印:

hello from a
hello from b

因为我不负责“外部”脚本,也不能修改它们,有什么方法可以实现这一点吗?在

编辑

使用@moinuddin quadra的importing like:from a import a在这个简单的例子中的确有效,但是这个呢:

  • 在主.py
    • a
      • a、 是的
      • 图书馆
        • 在实用工具.py在
      • lib2型
        • 公用事业2.py
    • b
      • b、 是的
      • 图书馆
        • 在实用工具.py在
      • lib2型
        • 公用事业2.py

每一个实用工具.py正在做:

从lib2导入utils2

为了使这个工作,我需要根脚本文件夹系统路径在

当b/lib/utils试图运行:from lib2 import utils2时,它接收到a/lib2中的utils2


Tags: 模块frompyimport目录脚本文件夹名称
2条回答

通常,要导入模块,我们不需要使用搜索路径公司名称:

主.py

from a import a
# first 'a' is the directory. second 'a' is a.py
# the 'a' directory needs to have __init__.py which can be blank
from b import b

a/a.py

^{pr2}$

b/b.py

^{pr2}$

由于无法修改外部模块,因此可以在导入时重命名具有相同名称的模块:

主.py

from a import utils as utils_a
from b import utils as utils_b

utils_a.hello()
utils_b.hello()

您应该在a.pyb.py中使用相对导入。所以,你的进口应该是:

from . import utils

这意味着从当前目录导入utils。这样就要求python程序导入a/实用工具.pya/a.pyb/实用工具.pyb/b.py中。在

首先在包含main.py的目录中创建__init__.py(假设__init__.pyab中存在),然后在中导入a和b主.py作为:

^{pr2}$

另请阅读:

相关问题 更多 >