【问题标题】:django module import error - python 2.7 vs python 3.4django 模块导入错误 - python 2.7 vs python 3.4
【发布时间】:2016-07-27 17:25:45
【问题描述】:

我已经用 python 2.7 安装了 django1.9。但现在我想将它与 python3.4 一起使用。因此,我修改了 python 到 python 3.4 的符号链接,如下所示。

sudo ln -s /usr/bin/python3.4 /usr/bin/python

因为相同的 django 也适用于 python 2.7 和 3.4,所以它应该可以工作。但是现在如果我运行 ./mange.py runserver 我会遇到错误。 但在 Python 2.7 中,同样的代码可以正常工作。

from Helpers import views
ImportError: No module named 'Helpers'

请让我知道那里出了什么问题?以下是项目结构。

myproject
   ├── myproject
   │   ├── settings.py
   │   ├── __init__.py
   │   ├── urls.py   
   │   ├── wsgi.py
   │   └─── Helpers
   │         ├── views.py
   │         └── __init__.py
   └── manage.py

Urls.py 如下所示。

from django.conf.urls import url
from Helpers import views
urlpatterns = [
    url(r'^$', views.index, name='index')
]

setting.py 包含以下相关信息。

    INSTALLED_APPS = [ 
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'myproject',
    ]

    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

    # Look for modules here as well.
    sys.path.insert(0, os.path.join(BASE_DIR, "Helpers"))

有什么想法吗?

【问题讨论】:

  • os.path.join(BASE_DIR, "Helpers") 通常会返回myproject/Helpers,而您实际上想要myproject/myproject/Helpers
  • os.path.join(BASE_DIR, 'myproject' ,"Helpers") 也无济于事。顺便说一下,这段代码可以在 python 2.7 上正常工作。
  • btw BASE_PATH 是 setting.py 父目录路径。
  • 你试过from .Helpers import views吗?

标签: django python-2.7 python-3.x django-models


【解决方案1】:

Python 3 更改了导入策略。看看this question

不是将Helpers 目录添加到sys.path,而是添加它的父目录:

sys.path.insert(0, os.path.join(BASE_DIR, 'myproject'))

或者像提到的@albar - 使用相对导入:

from .Helpers import views

【讨论】:

    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2016-06-01
    • 2014-09-06
    相关资源
    最近更新 更多