Python中深入浅析的路径

  介绍

这期内容当中小编将会给大家带来有关深入浅析Python中的路径,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强> 1。绝对路径引入

Python在搜索模块时,依次搜索系统。路径里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径:

导入系统
  打印(sys.path) 

系统。路径的初始值来源于两个(其实还有一些更复杂但不常用的),一个是系统的PYTHONPATH变量,因此可通过设置该变量,来设置Python默认的搜索位置。比如:

出口到PYTHONPATH=/opt/python: PYTHONPATH美元
  echo $ PYTHONPATH 

将该命令放在系统初始化脚本(/etc/环境)或者BASH初始化脚本(/~/. bashrc)里,可以对每个新开的窗口有效。

系统。路径的另一个来源是当前执行程序所在的目录(而不是当前目录)。比如当前目录下文件夹。/cc下有一个b.py,那么执行。/cc/b.py时,。/cc(而不是。/!)将被加到系统。路径:

。进口美国广播公司
  从.abc进口傻瓜
  从. .了import foo 

注意显式和隐式相对进口都是基于从.cc进口b>

那么直接运行python/y将会报错:

ModuleNotFoundError:没有模块命名& # 39;__main__.cc& # 39;;& # 39;__main__ # 39;不是一个包

<强>另一个是常见的错误是:ValueError:尝试相对进口顶级包。

在涉及到相对导入时,包所对应的文件夹必须正确的被python解释器视作计划,而不是普通文件夹。否则由于不被视作包,无法利用包之间的嵌套关系实现python中包的相对导入。

文件夹被python解释器视作包需要满足两个条件:

1,文件夹中必须有__init__。py文件,该文件可以为空,但必须存在该文件。

2,不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

补充:在“从YY进口XX"这样的代码中,无论是XX还是YY,只要被python解释器视作计划,就会首先调用该包的__init__。py文件。如果都是包,则调用顺序是YY, XX。

另外,练习中”。进口XXX”和“从. .进口XXX”中的& # 39;强生# 39;和& # 39;. . & # 39;,可以等同于linux里的shell中& # 39;强生# 39;和& # 39;. . & # 39;的作用,表示当前工作目录的包和上一级的包。

举个例子:

 testIm/猒_init__ . py
  
  ——主要。py:从汤姆汤姆进口
  
  ——汤姆/猒_init__。py:打印(“我# 39;m汤姆# 39;__init__ !“)
  
  ——汤姆。py:从。进口tomBrother,从. .进口凯特,print(“我# 39;m汤姆!“)
  
  ——tomBrother。py print(我# 39;m汤姆# 39;s兄弟!)
  
  ——凯特/猒_init__。py:打印(“我# 39;m凯特# 39;__init__ !“)
  
  ——凯特。py 

运行文件:主要。py

结果:

我# 39;m汤姆# 39;__init__ !
我# 39;m汤姆# 39;年代的兄弟!
回溯(最近的电话最后):
文件“D: \ PythonLearning \ TestIm \ main.py",第3行,& lt; module>
从汤姆汤姆
文件导入“D: \凯特PythonLearning \ TestIm \ \ kate.py", 4号线,在& lt; module>
. .进口凯特
ValueError:尝试相对进口顶级以外包
在祝辞祝辞

可以看的到。进口tomBrother顺利执行,首先执行了汤姆文件夹下的__init__ . py文件,后来执行了tomBrother。py文件,但是当执行到“从. .进口凯特”时报的错,这是因为我们是在TestIm文件夹下把main.py文件作为主函数的入口执行的,因此尽管TestIm文件夹中有__init__。py文件,但是该文件夹不能被python解释器视作计划,即汤姆包不存在上层packge,自然会报错,相对导入时超出了最高层级的包。

修改方法:

测试/饕y:从testIm。汤姆进口汤姆
  
  ——testIm/猒_init__ . py
  
  ——汤姆/猒_init__。py:打印(“我# 39;m汤姆# 39;__init__ !“)
  
  ——汤姆。py:从。进口tomBrother,从. .进口凯特,print(“我# 39;m汤姆!“)
  
  ——tomBrother。py print(我# 39;m汤姆# 39;s兄弟!)
  
  ——凯特/猒_init__。py:打印(“我# 39;m凯特# 39;__init__ !“)
  
  ——凯特。py 

运行文件:主要。py

Python中深入浅析的路径