BASE_DIR的使用
Posted yangzhen-ahujhc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BASE_DIR的使用相关的知识,希望对你有一定的参考价值。
文件的基本目录结构如下:
通常情况下bin作为入口程序,在bin中调用mudule中的main函数,而main中调用了本模块中的logger_test中的函数,需要完成以下导入:在bin.py中导入mudule中main.py。导入方式如下:
import mudule.main
在main.py中导入looger_test导入方式如下:
from mudule import logger_test
程序在pycharm中运行没有问题,可以正常执行,但是在命令行模式下执行会报错
Traceback (most recent call last): File "bin.py", line 11, in <module> import mudule.main ModuleNotFoundError: No module named ‘mudule‘
原因如下:python解释器搜索模块位置的顺序如下1、搜索当前目录 2、如果当前目录没有则查看path路径。在pycharm中其path路径在动添加了当前项目,使用
import sys for i in sys.path: print(i)
输出结果如下:
C:Users华为PycharmProjectsATMvenvScriptspython.exe C:/Users/华为/PycharmProjects/ATM/venv/bin/bin.py C:Users华为PycharmProjectsATMvenvin C:Users华为PycharmProjectsATM C:Program FilesJetBrainsPyCharm 2019.3.3pluginspythonhelperspycharm_display C:Users华为AppDataLocalProgramsPythonPython38-32python38.zip C:Users华为AppDataLocalProgramsPythonPython38-32DLLs C:Users华为AppDataLocalProgramsPythonPython38-32lib C:Users华为AppDataLocalProgramsPythonPython38-32 C:Users华为PycharmProjectsATMvenv C:Users华为PycharmProjectsATMvenvlibsite-packages C:Users华为PycharmProjectsATMvenvlibsite-packagessetuptools-40.8.0-py3.8.egg C:Users华为PycharmProjectsATMvenvlibsite-packagespip-19.0.3-py3.8.egg C:Program FilesJetBrainsPyCharm 2019.3.3pluginspythonhelperspycharm_matplotlib_backend
其中包含了当前根目录:C:Users华为PycharmProjectsATMvenv,这是pycharm为我们添加进去的,但是在命令行模式下,执行python bin.py,则输出结果如下:
C:Users华为PycharmProjectsATMvenvin C:Users华为AppDataLocalProgramsPythonPython38-32python38.zip C:Users华为AppDataLocalProgramsPythonPython38-32DLLs C:Users华为AppDataLocalProgramsPythonPython38-32lib C:Users华为AppDataLocalProgramsPythonPython38-32 C:Users华为AppDataLocalProgramsPythonPython38-32libsite-packages
并不包含当前项目的目录,我们在bin.py中使用import mudule.main编译器会在bin目录下搜索mudule模块,而mudule实在venv目录下,因此在当前目录和path路径下都搜索不到mudule模块,因此在命令行模式下报错。
解决方案如下:将当前项目路径包含到path路径下,可以使用以下命令
sys.path.append(r‘"C:Users华为PycharmProjectsATMvenv")
此方案可以解决,但是会存在一个问题,使用了绝对路径,当项目拷贝到其他位置后仍然会报错,因此需要使用相对位置去解决这个问题。分两步,1、找到当前文件的路径。
os.path.abspath(__file__) #返回:C:Users华为PycharmProjectsATMvenvinin.py
2、找到当前文件路径的项目根目录,并添加到path中
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR)
将以上代码放到bin.py的最前面则可以解决以上问题。
以上是关于BASE_DIR的使用的主要内容,如果未能解决你的问题,请参考以下文章