【问题标题】:Web2Py Working DirectoryWeb2Py 工作目录
【发布时间】:2009-12-30 03:01:33
【问题描述】:

嗯,我想使用 WEb2Py,因为它非常好.. 我只需要将工作目录更改为所有模块/库/应用程序所在的目录,以便我可以使用它们。当我使用 web2py 接口/应用程序时,我希望能够导入我的真实程序。我需要这样做,而不是把我所有的应用程序和东西放在 Web2Py 文件夹中......我试图给我的程序一个 Web 前端,而不把程序放在 Web2Py 文件夹中......对不起,如果这很难理解。

【问题讨论】:

    标签: python directory web2py


    【解决方案1】:

    在任何多线程 Python 程序(不仅是 Python)中,您都不应使用 os.chdir,并且当您运行多个线程时,您不应更改 sys.path。它不安全,因为它会影响其他线程。此外,您不应该在循环中使用 sys.path.append(),因为它可能会爆炸。

    所有的 Web 框架都是多线程的,请求是循环执行的。一些 Web 框架不允许您在不重新启动 Web 服务器的情况下安装/卸载应用程序,因此如果 os.chdir/sys.path.append 仅在启动时执行,则没有问题。

    在 web2py 中,我们希望能够在不重新启动 Web 服务器的情况下安装/卸载应用程序。我们希望应用程序非常动态(例如,根据 http 请求提供的信息定义模型)。我们希望每个应用程序都有自己的模型文件夹,并且我们希望应用程序之间完全分离,这样如果两个应用程序需要同一模块的不同版本,它们就不会相互冲突,因此我们提供了 API 来做到这一点(request.folder , local_import)。

    您仍然可以使用普通的 os.chdir 和 sys.path.append,但您应该在线程之外进行(这不是 web2py 特定的问题)。你可以在任何你喜欢的地方使用 import,就像在任何其他 Python 程序中一样。

    我强烈建议将此讨论移至 web2py 邮件列表。

    【讨论】:

    • 我发现 web2py 在更改工作目录时会发疯。在任何体面的 python web 框架中,你不应该对开发人员强制执行不必要的规则,也不应该假设工作目录不会改变。例如,web2py.py 使用其运行“功能”(--run)的脚本运行的任何脚本都可能会更改目录。一个简单的解决方案是让 Web 框架在启动时获取工作目录的副本并始终使用它。
    【解决方案2】:

    os.chdir 允许您更改操作系统的工作目录,但出于您的目的(允许导入一组被限制在某个陌生地方的模块和 c),最好将所需的目录添加到 sys.path 而不是.

    【讨论】:

      【解决方案3】:

      我必须这样做。我想从我的控制器中使用几个模块。如果您希望能够使用位于控制器模块目录中的代码,您可以使用:

      # use this in your controller code
      impname = local_import('module_in_modules', reload=True)
      # reload true  will ensure that it will re load whenever
      # there are changes to the module
      

      【讨论】:

        猜你喜欢
        • 2016-01-19
        • 2011-11-03
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 2015-10-03
        • 2014-12-08
        • 2012-07-22
        • 1970-01-01
        相关资源
        最近更新 更多