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的使用的主要内容,如果未能解决你的问题,请参考以下文章

22.BASE_DIR,os,sys

BASE_DIR的补充

NameError:未定义 Python 名称“BASE_DIR”如何修复?

BASE_DIR 在入口文件中设置项目目录为模块查找的目录

微信小程序代码片段

webstorm代码片段的创建