【发布时间】:2014-11-15 13:28:20
【问题描述】:
我正在尝试制作我的第一个高级 python 项目,但我在导入方面苦苦挣扎了很长时间。
有人能描述一下python中导入的用法吗?在官方页面中找到的有关 python 导入的文档对我来说还不够...
这是一个例子:
我有以下源码结构:
$ ls -ltrR
.:
total 1
drwx------+ 1 Administrators None 0 Nov 15 14:09 b
-rwx------+ 1 Administrators None 24 Nov 15 14:10 a.py
./b:
total 6
-rwx------+ 1 Administrators None 0 Nov 15 14:08 c.py
-rwx------+ 1 Administrators None 16 Nov 15 14:10 __init__.py
drwx------+ 1 Administrators None 0 Nov 15 14:10 __pycache__
-rwx------+ 1 Administrators None 61 Nov 15 14:10 b.py
以及文件的内容:
$ cat a.py
import b
b.B().printC()
$ cat b/b.py
import c
class B:
def printC(self):
print(c.C().get())
$ cat b/c.py
class C():
def get(self):
return 'This is C'
$ cat __init__.py
from .b import *
当我启动 a.py 时,它会显示:ImportError: No module named 'c'。
当我启动 b.py 时,它只说一切都很好。
在 b.py 中我将导入修改为“import b.c”时的另一个解决方案 -> 在这种情况下,当我调用 a.py 时它会起作用,但是当我只调用 b.py 时它不会起作用因为 b.py 不知道 b 包。
为什么我还需要启动 a.py 和 b.py? a.py 应该是 UT 的 executor,b.py 应该是 UT。 这就是为什么我想调用所有的 UT 并启动 a.py,也可能发生我只是启动一个特定的 UT (b.py)。
【问题讨论】: