包查找路径
查看
import sys
sys.path
添加
使用该方式添加,是临时生效的,退出python程序后,则不再有效。
import sys
# 路径可以是绝对路径,也可以是相对路径
sys.path.append("")
# 也可以定义搜索顺序
# 0表示搜索的顺序,0是最高,也就是插到路径的第一个位置
# 后面的""表示位置
sys.path.insert(0, "")
如果想路径永久生效,可以在sys.path显示的路径下,添加”.pth”文件,文件名可以任意起,只要后缀是.pth即可。然后在文件内,每一行代表一个路径,可以是相对路径,也可以是绝对路径。建议可以都在site-package目录下添加。
安装包
根据requires.txt安装依赖包
pip install -r requriements.txt
python包作为模块使用
报错:ValueError: attempted relative import beyond top-level package
解决方法:在文件中加入下面两行代码,使用绝对路径
import sys,os
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需要满足两个条件:
- 文件夹中必须有init.py文件,该文件可以为空,但必须存在该文件。
- 不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
补充:在”from YY import XX”这样的代码中,无论是XX还是YY,只要被python解释器视作package,就会首先调用该package的init.py文件。如果都是package,则调用顺序是YY,XX。