好吧,我想使用 WEb2Py,因为它非常好。我只需要将工作目录更改为所有模块/库/应用程序所在的目录,这样我就可以使用它们了。当我使用 web2py 接口/应用程序时,我希望能够导入我的真实程序。我需要这样做,而不是把我所有的应用程序和东西放在 Web2Py 文件夹中......我正在尝试为我的程序提供一个 Web 前端,而不是将程序放在 Web2Py 文件夹中......对不起,如果这很难理解。
3 回答
在任何多线程 Python 程序(不仅是 Python)中,您都不应该使用 os.chdir,并且当您运行多个线程时,您不应该更改 sys.path。它不安全,因为它会影响其他线程。此外,您不应该在循环中使用 sys.path.append(),因为它可能会爆炸。
所有的 Web 框架都是多线程的,请求是循环执行的。某些 Web 框架不允许您在不重新启动 Web 服务器的情况下安装/卸载应用程序,因此如果 os.chdir/sys.path.append 仅在启动时执行,则没有问题。
在 web2py 中,我们希望能够在不重新启动 Web 服务器的情况下安装/卸载应用程序。我们希望应用程序非常动态(例如,根据 http 请求提供的信息定义模型)。我们希望每个应用程序都有自己的模型文件夹,并且我们希望应用程序之间完全分离,这样如果两个应用程序需要同一模块的不同版本,它们就不会相互冲突,因此我们提供了 API 来做到这一点(request.folder ,本地导入)。
您仍然可以使用普通的 os.chdir 和 sys.path.append 但您应该在线程之外进行(这不是 web2py 特定的问题)。你可以在任何你喜欢的地方使用 import,就像在任何其他 Python 程序中一样。
我强烈建议将此讨论移至 web2py 邮件列表。
我不得不做这件事。我想从我的控制器中使用几个模块。如果您希望能够使用位于控制器模块目录中的代码,您可以使用:
# 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
周杰伦