[英]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.py
的INSTALLED_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 分鍾......
我有完全相同的問題。 在 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.py內INSTALLED_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.