【问题标题】:App Engine Development Server Does Not Reload Code When ChangedApp Engine 开发服务器在更改时不会重新加载代码
【发布时间】:2013-04-29 03:46:46
【问题描述】:

我正在开发一个将在 Google App Engine 之上运行的 python 应用程序。我使用以下目录结构设置我的应用程序:

approot/
  app.yaml
  index.yaml
  myapp.py
  controllers/
   some_controller.py
   some_controller1.py
  models/
  views/

...etc...

我的问题是,当我进行更改时,开发服务器不会总是自动重新加载我的代码,即使 Google 的文档说它会这样做。

它重新加载我的代码的唯一一次是当我所做的更改位于我的应用程序的顶级目录中时。子目录中的任何内容(例如控制器)都将被忽略。每次进行更改时,我都必须停止并启动服务器。

我发现这确实阻碍了我的开发进度,尤其是因为没有重启按钮,你实际上必须点击停止然后开始。

有没有办法解决这个问题,还是我做错了?我真的很喜欢有一个组织良好的项目,并且不想将我的所有文件都转储到顶级目录中。

【问题讨论】:

  • 我很犹豫是否提交错误,因为我不知道我做错了什么,或者这是否是一个实际的错误。哎呀,这甚至可能是我所知道的功能请求:)
  • 如果它没有做你想做的事,那就是短板。如果没有人报告过类似的事情,那么它就不是重复的。即使项目所有者不同意您对它应该如何工作的看法,也应该记录在案。提交错误报告!
  • @macinhosh 我在 Eclipse 中使用 pydev 插件,即使在子目录中也没有重新启动服务器就可以看到更改。你用的是哪个操作系统?

标签: python google-app-engine sdk devserver


【解决方案1】:

重载机制可能与默认导入机制和内置__import__ 函数相关联。如果您(或您的框架)以其他巧妙的方式加载模块,重新加载器可能不会注意到。一种可能的解决方法是在 myapp.py 模块中显式导入关键模块。

【讨论】:

  • 我正在使用 from ... import ... 这会属于默认导入机制吗?我对 Python 还是很陌生,所以请原谅我的无知 :)
  • 您正在更改的模块是否以这种方式导入myapp.py
  • 在 myapp.py 中是的,我有类似的内容:“from SomeController import SomeController” SomeController 是在 controllers/SomeController.py 中声明的类,其路径相对于 myapp.py
  • 如果您有兴趣,可以从我的错误报告中下载一些复制此问题的示例代码:code.google.com/p/googleappengine/issues/detail?id=4830
【解决方案2】:

仔细检查你是否安装了 pyobjc

开发服务器会这样抱怨:

用户警告:不支持检测源代码更改,因为您的 Python 版本不包含 PyObjC (http://pyobjc.sourceforge.net/)。请安装 PyObjC,如果不可行,请在 http://code.google.com/p/appengine-devappserver2-experiment/issues/list 提交错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多