包查找路径

查看

  1. import sys
  2. sys.path

添加

使用该方式添加,是临时生效的,退出python程序后,则不再有效。

  1. import sys
  2. # 路径可以是绝对路径,也可以是相对路径
  3. sys.path.append("")
  4. # 也可以定义搜索顺序
  5. # 0表示搜索的顺序,0是最高,也就是插到路径的第一个位置
  6. # 后面的""表示位置
  7. sys.path.insert(0, "")

如果想路径永久生效,可以在sys.path显示的路径下,添加”.pth”文件,文件名可以任意起,只要后缀是.pth即可。然后在文件内,每一行代表一个路径,可以是相对路径,也可以是绝对路径。建议可以都在site-package目录下添加。

安装包

根据requires.txt安装依赖包

  1. pip install -r requriements.txt

python包作为模块使用

报错:ValueError: attempted relative import beyond top-level package
解决方法:在文件中加入下面两行代码,使用绝对路径

  1. import sys,os
  2. sys.path.append(os.path.dirname(__file__) + os.sep + '../')

不过我添加这个命令以后,依然是报错的,所以参考https://cloud.tencent.com/developer/article/1406448,我在被引入的文件夹下添加了init.py文件,问题得以解决。原理如下:
在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。
文件夹被python解释器视作package需要满足两个条件:

  1. 文件夹中必须有init.py文件,该文件可以为空,但必须存在该文件。
  2. 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

补充:在”from YY import XX”这样的代码中,无论是XX还是YY,只要被python解释器视作package,就会首先调用该package的init.py文件。如果都是package,则调用顺序是YY,XX。