Python 自定义包报错 / 自定义包加入搜索路径(永久/临时)
问题描述
在一个test.py文件,使用 自定包里面 的文件运行报错
from A_Package import a_study
# 调用
a_study.study()
cd B_Package
B_Package> python test.py
# Traceback (most recent call last):
# File "test.py", line 1, in <module>
# from A_Package import a_study
# ModuleNotFoundError: No module named 'A_Package'
出错描述:找不到自定义的包
问题处理
前提知识:
当你导入一个模块,Python 解析器对模块位置的搜索顺序是:
- 当前的项目目录下
- 如果不在当前项目目录下,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
一般如果是用的别人的包,如果找不到直接 pip install xxxx 即可
如果是自己定义的包,出错处理方式,有以下几种:
1、查看引用包的__init__.py文件是否在
需要查看导入的包里面的 __init__.py
是否存在,不存在需要建立一个
原有:python中的每一个.py
文件称为模块,包含了__init__.py
的目录称为一个包
基础知识:可查看 Python基础知识之模块和包(三)
如果这种方式不行,从 Python搜索路径 上来处理
2、临时添加搜索路径
上面讲到,sys.path是搜索模块中的路径集,是一个路径数组
如果导入的包不在sys.path里面,可以通过在数组加入指定路径的方式来进行**临时添加 **这种只能做到临时添加, 带程序进程退出后便不再生效
import sys
# 加入要导入的包的全路径
sys.path.append("")
3、永久添加搜索路径
根据 Python 解析器对模块的搜索顺序,会 搜索 PYTHONPATH 变量
那么就可以通过设置Python 的环境变量
找到环境变量隐藏文件 .bashrc / .zshrc 文件
编辑该文件,然后在文件末尾 export具体的环境变量,例如我这里把我的一个项目加入到了环境变量中:
vim .bashrc
export PYTHONPATH=$PYTHONPATH:/home/hiudawn/mlpan/mvcnn_pytorch/
source .bashrc
添加完之后,可以进入python里面,输出 sys.path 查看是否已经加入~