BASE_DIR的使用

文件的基本目录结构如下:

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\华为\PycharmProjects\ATM\venv\Scripts\python.exe C:/Users/华为/PycharmProjects/ATM/venv/bin/bin.py
C:\Users\华为\PycharmProjects\ATM\venv\bin
C:\Users\华为\PycharmProjects\ATM
C:\Program Files\JetBrains\PyCharm 2019.3.3\plugins\python\helpers\pycharm_display
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\python38.zip
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\DLLs
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\lib
C:\Users\华为\AppData\Local\Programs\Python\Python38-32
C:\Users\华为\PycharmProjects\ATM\venv
C:\Users\华为\PycharmProjects\ATM\venv\lib\site-packages
C:\Users\华为\PycharmProjects\ATM\venv\lib\site-packages\setuptools-40.8.0-py3.8.egg
C:\Users\华为\PycharmProjects\ATM\venv\lib\site-packages\pip-19.0.3-py3.8.egg
C:\Program Files\JetBrains\PyCharm 2019.3.3\plugins\python\helpers\pycharm_matplotlib_backend

其中包含了当前根目录:C:\Users\华为\PycharmProjects\ATM\venv,这是pycharm为我们添加进去的,但是在命令行模式下,执行python bin.py,则输出结果如下:

C:\Users\华为\PycharmProjects\ATM\venv\bin
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\python38.zip
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\DLLs
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\lib
C:\Users\华为\AppData\Local\Programs\Python\Python38-32
C:\Users\华为\AppData\Local\Programs\Python\Python38-32\lib\site-packages

并不包含当前项目的目录,我们在bin.py中使用import mudule.main编译器会在bin目录下搜索mudule模块,而mudule实在venv目录下,因此在当前目录和path路径下都搜索不到mudule模块,因此在命令行模式下报错。

解决方案如下:将当前项目路径包含到path路径下,可以使用以下命令

sys.path.append(r‘"C:\Users\华为\PycharmProjects\ATM\venv")

 此方案可以解决,但是会存在一个问题,使用了绝对路径,当项目拷贝到其他位置后仍然会报错,因此需要使用相对位置去解决这个问题。分两步,1、找到当前文件的路径。

os.path.abspath(__file__)  #返回:C:\Users\华为\PycharmProjects\ATM\venv\bin\bin.py

2、找到当前文件路径的项目根目录,并添加到path中

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 sys.path.append(BASE_DIR)

将以上代码放到bin.py的最前面则可以解决以上问题。

 

相关推荐