为什么我们importos,improtsys,improtmath等模块,就可以成功导入其模块,而随便importaaa,就不行呢。那是因为Python的导包路径原因,让我们一起探寻Python的导包路径,是怎样的机制。
查看导包路径
我们可以通过内置sys模块来查看导包路径。
sys.path返回的是一个路径列表,其代表Python导包时搜索的路径。
Python解释器从sys.path里依次查找要导入的模块文件或包表示当前路径sys.path列表中的路径的先后顺序代表了Python解释器在搜索模块时的先后顺序内置模块、包存放路径
一些内置模块、包,如os、ys、json等都存放在你下载时,其保存路径的在Lib目录下。
下载的第三方库存放路径
像requests、ipython这些自己下载的第三方库等都存放在Lib下的site-packages目录下。
然而导包路径sys.path就包含这两个路径,因此我们使用importos、importsys、importjson、importrequests等都可以找到相应的模块和包。如果导入模块和包时在sys.path中没有搜索到相对应的模块,则会报错误。
其原理跟我们的电脑的环境变量-Path有点像。我们可以在cmd窗口输入python可以打开python交互解释器,pipinstallxxx可以下载第三方库。
追加新的导包路径
为了解决以上的难题,我们可以在程序运行时动态追加新的导包路径。追加好后,在你设置的目录路径,就有一个aaa.py模块。追加导包路径之后就可以成功导入并使用了。
Django项目追加导包路径
再来看看导包路径的具体应用场景。
在Django中我们通常把子应用模块统一放在apps包下,但在注册子应用的时候,该如何设置路径呢?
我们在配置文件settings.pyordevelop.py中添加打印导包路径的代码,其中pprint是prettyprint美化输出的意思,这样输出的列表不会在一行上。然后运行Django程序查看导包路径结果,知道导包路径我们就好在配置文件settings.pyordevelop.py中注册子应用。
注册子应用直接写应用名就可以了。
导包路径的作用
通过查看导包路径,可以快速的知道项目中各个包该如何的导入。
接手项目时,可以尽快的适应项目导包的方式。
通过追加导包路径,可以简化某些目录复杂的导包方式。