Web2Py工作目录

时间:2009-12-30 03:01:34

标签: python directory web2py

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

3 个答案:

答案 0 :(得分:5)

在任何多线程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的问题)。您可以像在任何其他Python程序中一样随意使用导入。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我必须做这件事。我想从控制器中使用几个模块。如果您希望能够使用驻留在控制器中的modules目录中的代码,则可以使用:

# 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