【问题标题】:Cannot run/debug Django's manage.py from eclipse无法从 Eclipse 运行/调试 Django 的 manage.py
【发布时间】:2011-07-31 04:30:57
【问题描述】:

每当我尝试从 Eclipse 调试 Django 的 manage.py 时,我都会得到:

pydev debugger: warning: psyco not available for speedups (the debugger will still work correctly, but a bit slower)
pydev debugger: starting
Traceback (most recent call last):
  File "/proj/virtualenvs/testing/infocards/manage.py", line 15, in <module>
    execute_manager(settings)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 67, in handle
    self.run(*args, **options)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 76, in run
    autoreload.main(self.inner_run, args, options)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 131, in main
    reloader(main_func, args, kwargs)
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 104, in python_reloader
    reloader_thread()
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 83, in reloader_thread
    ensure_echo_on()
  File "/proj/virtualenvs/testing/lib/python2.6/site-packages/django/utils/autoreload.py", line 77, in ensure_echo_on
    attr_list = termios.tcgetattr(fd)
termios.error: (22, 'Invalid argument')
Validating models...

从命令行运行python manage.py runserver 工作正常。

谷歌搜索我发现termios.error: (22, 'Invalid argument') 错误是因为 python 试图从标准输入读取但不能从 Eclipse 环境内部读取。

[编辑]:我忘了说我正在运行 PyDev 和最新的 1.3 版本的 Django。

[编辑]:@Blake,@izhak。我在 Eclipse 中定义了包含在我的 virtualenv 中的 Python(/proj/virtualenvs/testing,正如您从输出中看到的那样)。在命令行中,我使用与激活 virtualenv 相同的 Python 版本。

【问题讨论】:

    标签: python django eclipse debugging


    【解决方案1】:

    似乎缺少 --noreload 会导致这种效果。很奇怪。

    编辑:首先我认为它是项目的工作目录。

    【讨论】:

    • 谢谢。添加 --noreload 解决了这个问题。我只需要记住在任何代码更改时重新启动服务器。
    • 如果您找到了避免--noreload 的解决方案,而不是从命令行运行所有内容,请告诉我。
    • 要让自动重载工作,请查看:djangosnippets.org/snippets/1561 但是,在粘贴此代码并删除 --noreload 后,它仍然无法正常工作。如果我按原样保留--noreload,我仍然会收到此错误:/ Django 1.3。
    • 我检查了这段代码,但它对我不起作用。它抱怨无法连接到某个端口。但是,如果我将 --noreload 留在原处,它会照常进行。
    • 对不起,我写错了。我的意思是:使用那个 sn-p 和 --noreload 没有效果(没有自动重新加载)。使用不带 --noreload 的 sn-p 会给出您最初在问题中发布的错误跟踪。
    【解决方案2】:

    花费 3 多个小时来解决这个问题。 基本上罪魁祸首是 django 1.3 的 autoload.py 文件。基本上 Eclipse 的标准输入不是 tty 类型的设备。解决这个问题的方法是像这样修改 /your-path-to-django/util/autoreload.py:

    index e5a421e..1a4a1a1 100644
    --- a/autoreload_bak.py
    +++ b/usr/local/lib/python2.6/dist-packages/django/utils/autoreload.py
    @@ -73,11 +73,12 @@ def code_changed():
    
     def ensure_echo_on():
         if termios:
    -        fd = sys.stdin.fileno()
    -        attr_list = termios.tcgetattr(fd)
    -        if not attr_list[3] & termios.ECHO:
    -            attr_list[3] |= termios.ECHO
    -            termios.tcsetattr(fd, termios.TCSANOW, attr_list) 
    +        if sys.stdin.isatty():
    +            fd = sys.stdin.fileno()
    +            attr_list = termios.tcgetattr(fd)
    +            if not attr_list[3] & termios.ECHO:
    +                attr_list[3] |= termios.ECHO
    +                termios.tcsetattr(fd, termios.TCSANOW, attr_list)
    
     def reloader_thread():
         ensure_echo_on()
    

    这应该允许您在 Eclipse 中运行 runserver,即使没有 --noreload 选项。

    注意:您仍然需要应用此补丁来消除子/父进程问题,请参见此处: How to enable Eclipse debugging features in a web application?

    【讨论】:

      【解决方案3】:

      当我尝试从 Eclipse 简单地运行 django 程序时,我遇到了 exact 同样的错误。如果我右键单击该项目,然后选择 Django -> Custom Command 和“runserver”,它将失败。我终于发现,通过单击 Eclipse 工具栏上的 Run 按钮,它可以工作。尽管如此,我发现这并不总是确定的。我正在运行最新的 PyDev,2.0。和你一样,每次都从 Eclipse 之外的命令行运行它。

      【讨论】:

        【解决方案4】:

        您是否尝试过为 Eclipse 安装 PyDev 插件?它确实使 Eclipse 用户可以轻松开发 Python 应用程序,尤其是 Django 应用程序。只需创建新的 Django 项目,您将获得配置良好的环境,并且 manage.py 可用于从项目上下文菜单中运行。

        【讨论】:

        • 是的,我当然安装了 PyDev。无论我将调试配置定义为“PyDev Django”配置还是“Python Run”配置,我都会收到相同的错误...
        【解决方案5】:

        您的系统上是否有多个版本的 Python?如果从终端打开的版本与 PyDev 解释器正在使用的版本不同,则可能会导致操作环境出现问题/差异。

        【讨论】:

          【解决方案6】:

          你能在 Eclipse>Windows>preferences>Pydev>Python 中检查你使用的 python 版本。给出你在那里使用的确切 python 版本。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-13
            • 2013-11-08
            • 2019-06-24
            • 1970-01-01
            相关资源
            最近更新 更多