通常来说,比较正规的工程不会把所有代码放在一个py文件里,我们会把代码拆成各个模块,分别调用。对python来说,拆成各个模块可以看做拆成各个py文件。

搜索路径

通常来说,同文夹下的py文件可以直接导入。

  1. def print_hello():
  2. print "hello"

我们把这个保存至hello.py

  1. import hello
  2. hello.print_hello()

在run.py里导入,然后调用print_hello() 目录结构

  1. ...../
  2. hello.py
  3. run.py

hello.py和run.py在同一目录下,可以直接导入 如果在不同路径下,可以在sys.path里手动加入你想导入的路径

  1. import sys
  2. sys.path.append('/home/zhuzekun/course')
  3. import hello
  4. hello.print_hello()

如果run.py不在/ home / zhuzekun / course文件夹下,手动加入这个路径,就可以导入这个路径下的hello.py

通常一个工程不可能只有一层目录结构,并且也不会一个一个路径去追加到SYS里,常用的做法是包,一个目录及其子目录组成的一个包(可以看做一个库)。 举个例子

  1. /home/zhuzekun/course
  2. ├── __init__.py
  3. ├── __init__.pyc
  4. ├── m1
  5. │ ├── b.py
  6. │ ├── b.pyc
  7. │ ├── __init__.py
  8. │ ├── __init__.pyc
  9. │ └── m1_1
  10. │ ├── a.py
  11. │ ├── a.pyc
  12. │ ├── __init__.py
  13. │ └── __init__.pyc
  14. └── m2
  15. ├── __init__.py
  16. └── run.py

这是一个课程文件夹,里面有m1和m2这两个文件夹,同时m1中又有一个子文件夹m1_1。 文件b.py

  1. def hello_b():
  2. print "hello b"

文件a.py

  1. def hello_a():
  2. print "hello a"

文件run.py

  1. import sys

  2. import os

  3. sys.path.append('/home/zhuzekun/')

  4. from course.m1 import b

  5. from course.m1.m1_1 import a

  6. if __name__ == '__main__':

  7. b.hello_b()

  8. a.hello_a()

在run.py中要调用m1 / b.py和m1 / m1_1 / a.py,只需要导入课程这个包就可以了。