Web2Py 工作目录

3 投票
3 回答
1846 浏览
提问于 2025-04-15 17:28

我想用Web2Py,因为它挺不错的。
我只需要把工作目录改成我所有模块、库和应用程序所在的文件夹,这样我就能使用它们了。我希望在使用Web2Py的界面或应用时,能够导入我的真实程序。我想这样做,而不是把所有的应用和东西都放进Web2Py的文件夹里……我想给我的程序加一个网页前端,但又不想把程序放在Web2Py的文件夹里……抱歉,如果这样说让你觉得难以理解。

3 个回答

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

Jay

5

在任何多线程的Python程序中(不仅仅是Python),你不应该使用os.chdir,也不应该在有多个线程运行时更改sys.path。这是因为这样做会影响到其他线程,安全性不高。而且,你也不应该在循环中使用sys.path.append(),因为这样可能会导致问题。

所有的网络框架都是多线程的,请求都是在一个循环中执行的。有些网络框架不允许你在不重启网络服务器的情况下安装或卸载应用程序,因此如果os.chdir/sys.path.append只在启动时执行,那就没有问题。

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

你仍然可以正常使用os.chdir和sys.path.append,但要在线程外进行(这并不是web2py特有的问题)。你可以像在其他Python程序中一样,随意使用import。

我强烈建议将这个讨论移到web2py的邮件列表中。

0

os.chdir 这个功能可以让你改变操作系统的工作目录,但对于你的需求(比如导入一些模块,这些模块可能放在一些奇怪的地方),更好的办法是把需要的目录添加到 sys.path 里。

撰写回答