模块导入规则
在python内部导入模块时,必须要遵循他的规则,必须去指定的目录中找py文件。
寻找模块一般就三个位置
-
优先在当前运行脚本的同级目录 【一般问题比较多】
-
python的安装目录 【内置模块】
-
python的安装目录+site-packages 【第三方模块】没有的使用 pip install ? 进行安装
-
当前运行脚本的同级目录 常见问题
问题1 同名
在当前目录下不要出现与内置模块相同名字模块,如果出现会优先在同级目录下面查找到后,不会在去其他路径进行查找。
问题2:执行主程序
优先在当前运行脚本的同级目录
问题3:Pycharm 自动添加 sys.path
下面场景能导入成功,是因为 pycharm 自动添加 sys.path 导入成功,终端正常不能导入成功
问题4:sys.path 有关
1、在项目根目录,在pycharm可以导入成功,出了pycharm不能导入成功
2、如果在方法在其他目录,在需要导的当前目录不能导入成功
3、当弄不清楚时,就使用sys.path查看下当前查找的目录结构
主动添加sys.path
导入模块时,都是根据sys.path中的目录进行py文件的查找
把当前的项目目录,使用sys.path.append() #添加进去 此方法比较死板,通过下面方法进行优化
建议使用下面方式进行添加:当前项目目录
import osdir_path = os.path.abspath(os.path.abspath(os.path.abspath(__file__)))
sys.path.append(dir_path)
#可以通过下面方式进行查看当前导入模块路径
import sysfor item in sys.path:print(item)"""
D:\dev\python_learn\appSpriderWupeiqi\.venv\Scripts\python.exe D:\dev\python_learn\appSpriderWupeiqi\作用汇总-常用代码\查看导入规则路径-sys.path.py
D:\dev\python_learn\appSpriderWupeiqi\作用汇总-常用代码
D:\dev\python_learn\appSpriderWupeiqi
D:\dev\python\PyCharm 2023.1.1\plugins\python\helpers\pycharm_display
C:\Python311\python311.zip
C:\Python311\DLLs
C:\Python311\Lib
C:\Python311
D:\dev\python_learn\appSpriderWupeiqi\.venv
D:\dev\python_learn\appSpriderWupeiqi\.venv\Lib\site-packages
D:\dev\python\PyCharm 2023.1.1\plugins\python\helpers\pycharm_matplotlib_backend
"""
相对导入与绝对导入
import db
import utils.my
from utils import my
from utils import encryty
同级目录,可以使用绝对路径或者相对路径进行导入,
from .. sqlite import b 其中 .表示当前目录,.. 表示当前目录的上一级目录下面sqlite目录下面的子方法#根目录下面导入时,不能使用相对路径导入
一般情况下
-
主程序导入其他模块时,一般都是绝对导入。
-
本身代码在文件夹内,又要导入自己文件夹内的一些其他的Py文件,可以使用【绝对】+【相对】
不相关的模块 【绝对导入】
相关的模块 【相对导入】