嗯,我想用WEb2Py,因为它很不错..我只需要将工作目录更改为我所有模块/库/应用程序所在的目录,这样我就可以使用它们了。当我使用web2py界面/应用程序时,我希望能够导入我的实际程序。我需要这样做,而不是把我所有的应用程序和东西放在Web2Py文件夹中……我正在尝试为我的程序提供一个web前端,而不是将程序放在Web2Py文件夹中。如果这很难理解,我很抱歉。
发布于 2009-12-30 11:09:37
os.chdir允许您更改操作系统的工作目录,但出于您的目的(允许导入一堆模块&c,它们被限制在某个奇怪的位置),似乎更好的做法是将所需的目录添加到sys.path中。
发布于 2010-01-01 08:23:12
在任何多线程Python程序中(不仅仅是Python),您不应该使用os.chdir,并且当您有多个线程在运行时,也不应该更改sys.path。这是不安全的,因为它会影响其他线程。此外,您不应该在循环中使用sys.path.append(),因为它可能会爆炸。
所有web框架都是多线程的,请求都是在循环中执行的。一些web框架不允许您在不重新启动web服务器的情况下安装/卸载应用程序,因此,如果os.chdir/sys.path.append仅在启动时执行,则没有问题。
在web2py中,我们希望能够在不重新启动web服务器的情况下安装/卸载应用程序。我们希望应用程序具有很强的动态性(例如,根据http请求提供的信息定义模型)。我们希望每个应用程序都有自己的models文件夹,我们希望应用程序之间完全分离,这样如果两个应用程序需要使用同一模块的不同版本,它们就不会相互冲突,所以我们提供了API来实现(request.folder,local_import)。
你仍然可以使用普通的os.chdir和sys.path.append,但是你应该在线程之外进行(而且这不是web2py特有的问题)。您可以像在任何其他Python程序中一样,在任意位置使用import。
我强烈建议将此讨论转移到web2py邮件列表。
发布于 2010-01-26 10:40:40
我不得不这么做。我有几个模块想从我的控制器中使用。如果您希望能够使用驻留在控制器的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杰伦
https://stackoverflow.com/questions/1978188
复制相似问题