我學習Django的導入時收到錯誤,下面的「探戈的Django」從同級包
我的項目結構如下:
/django_demo
|-- __init__.py
|-- manage.py
|-- populate.py
|-- settings.py
|.....<other modules>
|
|--/django_demo
| |-- __init__.py
| |-- populate_rango.py
| |...<other modules>
|
|--/rango
| |-- __init__.py
| |-- models.py
| |-- apps.py
| |....<other modules>
我不能夠解決兩個查詢:
查詢1 -
populate_rango.py
包含以下代碼:
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_demo.settings')
import django
django.setup()
from django_demo.rango import models
的models
進口是給unresolved import
錯誤,即使我使用的是正確的absolute imports符號,累計。到的文檔,以及類似的問題上sibling package imports以及[這裏] [3]
查詢2 -
的populate.py
根/django-demo
包包含下面的代碼下:
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_demo.settings')
import django
django.setup()
from rango import models
從文檔中,必須使用absolute imports或虛線符號從子文件夾導入。
上面這段代碼既不使用也不使用。我無法理解
from rango import models
不會引發未解決的導入錯誤。
注1:我已經包含在INSTALLED_APPS
我APPNAME \django_demo\settings.py
下爲
INSTALLED_APPS = [
'rango.apps.RangoConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles', ]
的\rango\apps.py
有RangoConfig
類:
class RangoConfig(AppConfig):
name = 'rango'
注2: 1.我所有的__init__.py
文件是空的
-
在Ubuntu 我使用的virtualenv與Python 3.5.2作爲PyDev的解釋器+蝕氧
UPDATE-1
如下面回溯看到的,它是被賦予django.setup()
運行時錯誤:
Traceback (most recent call last):
File "/home/sat/coding/python_dev/oxygen_workspace/django_demo/django_demo/populate_rango.py", line 10, in <module>
django.setup()
File "/home/sat/coding/flask_dev/venv3/lib/python3.5/site-packages/django/__init__.py", line 22, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/home/sat/coding/flask_dev/venv3/lib/python3.5/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/home/sat/coding/flask_dev/venv3/lib/python3.5/site-packages/django/conf/__init__.py", line 41, in _setup
self._wrapped = Settings(settings_module)
File "/home/sat/coding/flask_dev/venv3/lib/python3.5/site-packages/django/conf/__init__.py", line 110, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/home/sat/coding/flask_dev/venv3/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'django_demo'
我不明白這個原因。
UPDATE-2
我創建了一個名爲new_django類似的路線一個新的Django項目,並from rango import models
工作在細。
new_django結構:
/new_django
|-- __init__.py
|-- manage.py
|-- populate.py
|-- settings.py
|.....<other modules>
|
|--/new_django
| |-- __init__.py
| |-- populate_rango.py
| |...<other modules>
|
|--/rango
| |-- __init__.py
| |-- models.py
| |-- apps.py
| |....<other modules>
的populate_rango.py
包含以下代碼:
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'new_django.settings')
import django
django.setup()
from rango.models import
此終止而沒有任何錯誤,當運行。
的settings.py
和rango/apps.py
爲new_django項目具有相同的代碼作爲其django_demo同行。
然而,當我使用絕對進口像from new_django.rango import models
,指層次new_django/rango
在文件中提到,我得到下面的回溯:
Traceback (most recent call last):
File "/home/sat/coding/python_dev/oxygen_workspace/new_django/new_django/populate_rango.py", line 12, in <module>
from new_django.rango import models
ImportError: No module named 'new_django.rango'
這也發生在相對情況進口 - from ..rango import models
:
Traceback (most recent call last):
File "/home/sat/coding/python_dev/oxygen_workspace/new_django/new_django/populate_rango.py", line 12, in <module>
from ..rango import models
SystemError: Parent module '' not loaded, cannot perform relative import
可能有人請解釋原因:
- in UPDATE-1,
django.setup()
給出錯誤? - 在UPDATE-2,進口
from rango import models
沒有給一個錯誤,而絕對和相對進口?
這PY文件是不是我把它命名,它是一個標準的做法遵循一個Django項目,有一個**父文件夾**含*項目*(同名),以及作爲所有* app *文件夾。 我只爲父'/ django_new'文件夾添加了一個'__init __。py'文件,以避免導入時出現'not a package'錯誤,以便集中處理'import'錯誤 –
@ satvik.t你可以告訴使用的dango包版本嗎? –
它是Django 1.11,python 3.5.2 –