随着项目的扩大,模块的抽象和提取必不可少,模块所在的目录也不会一直扁平。这时候经常遇到的一个问题是如何访问其它目录的模块呢,比如说import一些公共目录的公共模块?
背景了解,import做了什么?
当我们import module的时候python会搜索以下地方作为search path:
-
当前执行这条import语句脚本所在的路径,或者是current working directory(在交互模式下,比如IPYTHON console中)
-
PYTHONPATH的环境变量里的路径
-
Python 安装时依赖的一些路径,在python安装已经配置好
以上所有路径都可以由 import sys然后打印sys.path看到。
所以如果我们有一个脚本test.py,想要成功import,有四种方法
-
放在current directory下
-
修改pythonPath环境变量,把test.py所在的路径放在环境变量的脚本中,这样python启动时加载环境变量就会读取到
-
把test.py放在安装时依赖的路径,不同操作系统不一样,同时需要写入权限
以上三种方法是一劳永逸的,但同时也丧失了灵活性,在import之前必须固定好module的位置。
第四种方法,run-time import
就是在脚本运行时,把file的路径放在sys.pa