首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从不同的子模块导入一个子模块?

如何从不同的子模块导入一个子模块?
EN

Stack Overflow用户
提问于 2017-09-20 16:31:52
回答 3查看 1.7K关注 0票数 6

我的项目有以下结构:

代码语言:javascript
复制
DSTC/
    st/
        __init__.py
        a.py
        g.py
        tb.py
    dstc.py

以下是a.py的部分内容:

代码语言:javascript
复制
import inspect
import queue
import threading

以下是tb.py的部分内容:

代码语言:javascript
复制
import functools
from . import a

当直接运行时,a.py不会产生任何错误,并且很容易验证没有SyntaxError。但是,运行tb.py会导致以下错误:

代码语言:javascript
复制
"C:\Program Files\Python36\python.exe" C:/Users/user/PycharmProjects/DSTC/st/tb.py
Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/DSTC/st/tb.py", line 15, in <module>
    from . import a
ImportError: cannot import name 'a'

Process finished with exit code 1

我应该如何从tb重写a的导入,以便tb可以直接运行而不会导致错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-20 17:09:49

要么你可以用

代码语言:javascript
复制
import a

或亲属

代码语言:javascript
复制
from .a import *

在这种情况下,应该加载模块**a**

代码语言:javascript
复制
python -m a tb.py

威尔对你有用。

不鼓励导入*,请按需要导入

如果您的DSTC中有一个main.py,如下所示:

代码语言:javascript
复制
#  main.py
from st import tb

而且您只运行main.py,只有相对的方法才对您有效。

代码语言:javascript
复制
# tb.py 
import a  # will not work
from .a import * # will work

因为这一次你把'a‘作为一个模块加载。

票数 3
EN

Stack Overflow用户

发布于 2017-09-20 16:35:16

您只需要导入模块a

代码语言:javascript
复制
import a
票数 -1
EN

Stack Overflow用户

发布于 2017-09-20 17:24:24

使用import .a,或者更好地使用import st.a。只有当您将tb作为包的一部分导入(例如,使用来自父目录的python -m开关)而不是像脚本一样运行它时,这些方法才能工作。

正如其他人所说的,简单地说,import a将起作用。无论st是作为模块运行还是作为脚本运行,这都有利于工作,但这是一种糟糕的实践,只在python 2上工作,而不是python 3。

其他人提到的from变体也是如此。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46327361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档