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的最前面則可以解決以上問題。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM