目录
- 同一个目录下
- 不同目录下
- 举例说明其它方法
- Pycharm下的调用问题
一、同一个目录下
调用同一个目录下的时,可以直接:
- import XXX.py
- from 文件夹 import XXX.py
只是第一种形式会有波浪线提醒,不过不影响运行。
波浪线问题消除见第四章
二、不同目录下
在上面基础上,加上层级名称即可
当然也可以通过指定路径的方式处理,见第三章
三、举例说明其它方法
A
|----- __init__.py
|----- a.py
|---------B
|--------- __init__.py
|---------b.py
|---------C
|--------- __init__.py
|--------c.py
如图所示结构树,B,C同属于A的子目录,但是B,C之间是平行的。。。
b.py,c.py代码分别如下:
b.py:
def b_hello():
print "B_HELLO"
c.py:
def c_hello():
print "C_HELLO"
3.1 如果A中a.py要调用B中或者C中py
则可以如下方式调用(以B为例)
from B import b
b.b_hello()
运行结果:B_HELLO
3.2 如果是B中或者C中py调用B中或C中
这个时候如果我们依旧用如上所说调用,则会报错(这里是b.py调用c.py)
>>>
Traceback (most recent call last):
File "E: estnowAB.py", line 1, in <module>
from C import c
ImportError: No module named C
所以,这种方法不行,那如何做呢,如下
import sys
sys.path.append('E:\testnow\A\C')
import c
def b_hello():
print "B_HELLO"
c.c_hello()
用这种方法,输出结果是:C_HELLO
也即刚才上面的"from 文件夹 import 模块名"比较适用于父目录调用子目录的情况(当然也可以参照第二章的多个嵌套形式);而第二种方法则对所有的情况都适用,包括两个模块甚至都不在一个盘的情况。这里需要注意的一点是:sys.path添加目录时注意是在windows还是在linux下,windows下需要'\'否则会出错。(我在这点上走了很久的弯路)
四、Pycharm下的调用问题
pycharm在同目录下import,pycharm会提示错误,但是可以运行
原因是: pycharm不会将当前文件目录自动加入自己的sourse_path。
解决方案:右键make_directory as-->sources path将当前工作的文件夹加入source_path就OK了