路径管理
路径
绝对路径
总是从根目录开始
H:\PyCharmProjects\tutorials_2\jd_crawler\main.py
相对路径
jd_crawler\main.py
.
和..
.
代表当前目录,..
代表父目录
工作目录
当前执行命令所在的目录
# 将工作目录添加进当前的路径列表 sys.path.append(os.getcwd())
路径列表
查看当前路径列表
只有在路径列表当中的包和模块才可以导入和调用
import sys print(sys.path)
路径搜索顺序
- 当前脚本路径, 也就是执行文件的目录
PYTHONPATH
路径- 虚拟环境路径
site-packages
- 安装的第三方库所在路径
可以向路径列表添加路径
sys.path.append(r"H:\PyCharmProjects\tutorials_2")
常见报错
ModuleNotFoundError: No module named 'xxxx'
为什么在pycharm中不报错, 在命令行当中报错
Pycharm会自动将当前项目的根目录添加到路径列表当中
`ModuleNotFoundError: No module named 'parser.search'; 'parser' is not a pac
kage`自定义包和内置包名有冲突
修改包名即可
- 导入的不是一个包
`ModuleNotFoundError: No module named '__main__.jd_parser'; '__main__' is no
t a package`- 入口程序不可以使用相对路径
__main__
主程序模块名会被修改为
__main__
ValueError: attempted relative import beyond top-level package
当前访问路径已经超过了python已知的最大路径
from tutorial_2.jd_crawler.jd_parser.search import parse_jd_item top-level package 指的是上述from导入命令中的首路径tutorial_2, 而不是根据目录结构
- 把工作目录加入到路径列表当中
- 进入到项目根目录下执行命令
- 上述两个操作相当于将项目根目录加入到路径列表当中
注意事项
- 确定入口程序, 没有一个锚定的路径就没有办法做相对路径的管理
- 将项目根目录加入到入口程序当中
- 进入到项目根目录下执行命令
- 项目目录结构不要嵌套的太深
- 脚本文件或者临时运行单个模块中的方法, 可以将根目录临时添加到路径列表当中
Comment here is closed