【问题标题】:dreamhost python3 Django passenger setup import Cookiedreamhost python3 Django 乘客设置导入 Cookie
【发布时间】:2015-02-23 19:30:50
【问题描述】:

我正在尝试在 Dreamhost 上使用 python3 设置 django。

我已经按照他们的文档设置了一个 virtualenv 并安装了所有先决条件。我已经让 runserver 工作了

问题在于乘客设置。错误日志显示我无法导入名为 Cookie 的模块,导致更多错误。

这是回溯:

File "/home/user/path/env/lib/python3.4/imp.py", line 171, in load_source
    module = methods.load()
  File "<frozen importlib._bootstrap>", line 1220, in load
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "passenger_wsgi.py", line 17, in <module>
    from django.core.wsgi import get_wsgi_application
  File "/home/user/path/env/lib/python3.4/site-packages/django/core/wsgi.py", line 2, in <module>
    from django.core.handlers.wsgi import WSGIHandler
  File "/home/user/path/env/lib/python3.4/site-packages/django/core/handlers/wsgi.py", line 11, in <module>
    from django import http
  File "/home/user/path/env/lib/python3.4/site-packages/django/http/__init__.py", line 1, in <module>
    from django.http.cookie import SimpleCookie, parse_cookie
  File "/home/user/path/env/lib/python3.4/site-packages/django/http/cookie.py", line 5, in <module>
    from django.utils.six.moves import http_cookies
  File "/home/user/path/env/lib/python3.4/site-packages/django/utils/six.py", line 90, in __get__
    result = self._resolve()
  File "/home/user/path/env/lib/python3.4/site-packages/django/utils/six.py", line 113, in _resolve
    return _import_module(self.mod)
  File "/home/user/path/env/lib/python3.4/site-packages/django/utils/six.py", line 80, in _import_module
    __import__(name)
  File "/home/user/path/env/lib/python3.4/site-packages/django/http/__init__.py", line 1, in <module>
    from django.http.cookie import SimpleCookie, parse_cookie
ImportError: cannot import name 'SimpleCookie'

如你所见,

from django.core.wsgi import get_wsgi_application

失败了

另一方面,当我尝试使用 python 解释器时,它可以正确导入。

我还通过记录变量验证了乘客正在使用相同的解释器

 import sys
 raise Exception(sys.executable)

关于这个原因的任何想法? 我尝试了记录路径,它显示以下内容

['/home/user/path/env/lib/python3.4/site-packages', '/home/user/path/env/lib/python3.4/site-packages/django', '/home/user/path/env/bin', '/home/user/path', '/usr/local/dh/passenger/helper-scripts', '/home/user/path/env/lib/python34.zip', '/home/user/path/env/lib/python3.4', '/home/user/path/env/lib/python3.4/plat-linux', '/home/user/path/env/lib/python3.4/lib-dynload', '/home/user/opt/python-3.4.2/lib/python3.4', '/home/user/opt/python-3.4.2/lib/python3.4/plat-linux', '/home/user/path/env/lib/python3.4/site-packages', '/home/user/path', '/home/user/path/git/package']

我觉得很好

【问题讨论】:

  • 路径可能被破坏了。尝试显示sys.path
  • @WayneWerner 查看编辑
  • 从您的口译员那里您可以做到from django.http.cookie import SimpleCookie,对吗?当您在import sys 之后将其放入文件中时呢?
  • 是的,你是对的,我可以从解释器中做到这一点,但是当我在我的 Passenger_wsgi.py 文件中这样做时,它会抛出与上述相同的错误。我已经验证它也使用相同的解释器..所以我对这个问题感到困惑。我只能相信这与乘客有关……这不是一个非常进步的信仰体系。

标签: django python-3.x passenger wsgi dreamhost


【解决方案1】:

The instructions in dreamhost wiki 工作正常。您只需要在 wsgi 配置文件中删除额外的 django 路径。它应该是这样的:

...
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/projectname')  #You must add your project here

sys.path.insert(0,cwd+'/env/bin')
sys.path.insert(0,cwd+'/env/lib/python2.7/site-packages')
...

不是这样的:

...
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/projectname')  #You must add your project here
sys.path.insert(0,cwd+'/env/lib/python2.7/site-packages/django')
sys.path.insert(0,cwd+'/env/bin')
sys.path.insert(0,cwd+'/env/lib/python2.7/site-packages')
...

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,以下解决方案对我有用。 我有 Django 1.7 和 Python 3.4,使用 Eclipse 和 PyDev 作为我的 IDE。

    我的解决方案与此线程有关:Import Python module fails (http.cookies)

    我做了什么:

    1. 在 Eclipse 中,转到选项卡 Project/Properties
    2. 选择侧标签PyDev - PYTHONPATH
    3. 选择External Libraries
    4. 应该有一个类似于/.../lib/pythonX.Y/site-packages/django 的路径。 删除它。 (我正在使用 venv 包创建我的虚拟环境。您的路径可能不同。)

    5. 运行项目,看看它是否有效。

    评论:我认为这确实是一个非常奇怪的问题......可能与 PyDev - Python3 的 DjangoProject 设置有关。让我知道这是否有帮助。

    【讨论】:

    • 请说明这是否对您的问题有帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2023-03-21
    • 2016-11-12
    • 2019-07-31
    • 2022-08-19
    • 2012-06-12
    • 2017-06-12
    相关资源
    最近更新 更多