3

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

4

3 回答 3

5

在任何多线程 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 邮件列表。

于 2010-01-01T00:23:12.180 回答
0

os.chdir可让您更改操作系统的工作目录,但出于您的目的(启用一堆模块和 c 的导入,这些模块被限制在某个奇怪的地方),将所需的目录添加到sys.path似乎更好。

于 2009-12-30T03:09:36.840 回答
0

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

# 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

周杰伦

于 2010-01-26T02:40:40.367 回答