簡體   English   中英

Django 導入錯誤:沒有名為 apps 的模塊

[英]Django Import Error: No module named apps

剛查了個git的項目,項目結構是

project
  apps
    myapp
      settings
        __init__.py
      __init__.py
    manage.py

還有其他目錄和文件,但我認為那些是重要的。

當我運行服務器時,我得到

    Traceback (most recent call last):
  File "C:/Dev/project/apps/manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 345, in execute
    settings.INSTALLED_APPS
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 46, in __getattr__
    self._setup(name)
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 98, in __init__
    % (self.SETTINGS_MODULE, e)
ImportError: Could not import settings 'apps.myapp.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named apps.myapp.settings

運行manage.py check時,我得到ImportError: No module named apps. 所以我想這個問題與我的設置模塊無關,而是與我的應用程序目錄有關。 我不確定為什么它找不到我的模塊應用程序,因為項目在我的sys.path上並且 direcory apps顯然存在。 由於我作為 Python 開發人員不是很有經驗,所以我自己找不到解決方案。

您需要在apps文件夾中添加一個空的__init__.py (共 4 個下划線)文件,以便 Python 將其識別為包。

查看文檔以獲取更多信息。

如果您使用了django-admin startapp myapp命令,它會創建這個文件: myapp/apps.py

它可能與您的apps/模塊文件夾沖突。 隱藏的apps.pyc文件可能位於您的myapp/文件夾中。

嘗試刪除這些:

  • project/apps/myapp/apps.py
  • project/apps/myapp/apps.pyc

請注意,在 Django 1.9 中有一個名為 django.apps 的模塊

通常建議避免與內置模塊的名稱沖突

如果您在運行此之前將應用程序安裝在主項目文件夾中的settings.py中,也會發生這種情況:

python manage.py startapp [app-name]

將其注釋掉,創建應用程序(現在應該可以工作),然后將該行放回settings.py文件中並繼續。

請注意,在Django 1.9 ,您可以將您的應用添加到INSTALLED_APPS列表中。

如果您的應用名稱是app並且您已經在其中創建了模型,則轉到settings.py文件並添加您的應用:

INSTALLED_APPS = [
    ...
    'app'
]

首先,檢查您的manage.py並確保它具有對myapp的正確引用。

...應用程序/我的應用程序/manage.py

...
if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
...

如果設置正確,請檢查 Python 解釋器。 如果您使用的是 virtualenv,則在使用全局 Python 而不是虛擬環境時可能會發生錯誤。 使用全局 Python 可能是由於您的 IDE 設置不當、用戶錯誤或manage.py bin/bash 不正確。

要確保manage.py在虛擬環境中運行,請檢查manage.py的第一行。 默認情況下,文件讀取:

#!/usr/bin python

將其更改為:

#!/path/to/virtualenv/bin python

現在,檢查終端及其使用的 Python 版本。 然后,激活 virtualenv:

[user@pc] #: source /path/to/virtualenv/bin/activate 
(venv) [user@pc] #: pip list

確認 Django 已安裝。 如果是,但仍然無法正常工作,請使用pip升級它:

(venv) [user@pc] #: pip install --upgrade django

如果即使 Python 版本正確,上述方法都manage.py ,則說明您使用了正確的 Python 環境並且manage.py設置正確,則意味着錯誤出在其他地方。

對於在這里因為添加新視圖並遇到這個問題的人,我做了上面由 aumo 描述的工作,我在我的文件夾視圖和我添加的文件夾中添加了一個空的init.py,例如。

-- example-folder

  --   views
  -- `__init.py__`
  -- `index.py`

-- `__init.py__`
-- `urls.py`

希望是有道理的

命令: python manage.py startapp app_name

類名必須與models.py文件中的app_name相同,然后將您的app_name添加到settings.pyINSTALLED_APPS列表中。

如果您使用此命令啟動應用程序:

django-admin startapp appexample

...然后, AppexampleConfig類不應列在settings.py文件中。

只需在INSTALLED_APPS列表中添加應用程序名稱(例如appexample )。 避免使用: appexample.app.AppexampleConfig

通常, AppexampleConfig類是的子類django.apps.Appconfig表示Django應用程序和它的配置類。 它只是定義了 name 類屬性並將其值設置為Appexample

我在運行python3 manage.py runserver而不是python manage.py runserver后解決了這個問題 在那個上浪費了 25 分鍾......

請確保您的應用程序位於項目的根目錄中。 我的意思是,如果您錯誤地在主目錄之外啟動了一個應用程序,Django 將無法找到您的應用程序,唯一的解決方案是將其移動到您項目的主目錄中。 屏幕截圖顯示了如何解決問題在此處輸入圖像描述第一個圖像顯示希望也會在您運行應用程序時提示您的應用程序尚未加載的錯誤。

第二個屏幕截圖顯示了如何解決問題。 在此處輸入圖像描述這就是我的意思,應用程序應位於主項目的同一目錄中。 就我而言,我的主目錄是 crmapp。

我有完全相同的問題。 在 settings.py 中,我通過以下方式打印了 SYS 路徑:

  import sys
  print(sys.path)

原來項目目錄的主路徑沒有包含進去,所以我不得不在這里手動添加。

  import sys
  sys.path.append(<path to my main project dir>)

Django 3.1.5 也有類似的問題。

通過刪除項目中的所有__pycache__文件夾來解決它。

另一個可能的原因是,如果有問題的 Django 應用程序是在項目根目錄“外部”的某個地方創建的。 例如,執行:

project_root/manage.py startapp 搜索

,我沒有意識到我的 Django 應用程序是在當前文件夾中創建的,而不是在項目根目錄中(在我的例子中,就是這樣命名的,'project_root',哈哈)。 Django 約定規定,在本例中通過settings.pyINSTALLED_APPS 中的“搜索”引用的應用程序應位於BASE_DIR (在我的情況下為 project_root)。

您的配置路徑后可能缺少逗號:

  INSTALLED_APPS = [
    'palc.apps.PalcConfig', # This comma
    'django.contrib.admin',
     ...]

如果您使用 Docker 使用默認命令部署應用程序,例如:

uwsgi --socket=0.0.0.0:9000 --module=myapp.wsgi:application --py-autoreload=1

確保在 Dockerfile 末尾更改您的工作目錄,例如:

WORKDIR /absolute/path/to/source/code

轉到虛擬環境並使用命令 -pip install --upgrade Django 升級您的 django

確保首先執行python manage.py startapp app_name然后將 app_name 添加到settings.py

執行時(在 TERMINAL 中)

python manage.py startapp (your_app_name)

首先檢查(your_app_name)文件夾中的apps.py。

它應該是這樣的:

class (__auto_generated__)Config(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = '(your_app_name')

第二次檢查 settings.py,在INSTALLED_APPS['']中,你必須有 'your_app_name'

更改應用名稱時要小心

在我這邊,我忘記了逗號(',')

INSTALLED_APPS = [
    ...
    'app',
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM