我有一个python项目,需要能够运行外部脚本。在
这些脚本是在带有几个模块的目录结构中动态导入的。在
现在,由于这些脚本是独立编写的,并且彼此不知道,所以它们通常使用相同的模块名称。在
这使我在一个接一个地导入它们时遇到了问题。在
例如,我的目录结构如下:
所以我有一个主.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正在做:
从lib2导入utils2
为了使这个工作,我需要根脚本文件夹系统路径在
当b/lib/utils试图运行:from lib2 import utils2时,它接收到a/lib2中的utils2
通常,要导入模块,我们不需要使用搜索路径公司名称:
主.py
a/a.py
^{pr2}$b/b.py
^{pr2}$由于无法修改外部模块,因此可以在导入时重命名具有相同名称的模块:
主.py
您应该在a.py和b.py中使用相对导入。所以,你的进口应该是:
这意味着从当前目录导入utils。这样就要求python程序导入a/实用工具.py在a/a.py和b/实用工具.py在b/b.py中。在
首先在包含
^{pr2}$main.py
的目录中创建__init__.py
(假设__init__.py
在a
和b
中存在),然后在中导入a和b主.py作为:另请阅读:
相关问题 更多 >
编程相关推荐