我有一个用twisted编写的简单web服务器,我正试图用twistd启动它。使用reactor.run()
一切正常,但是当我使用twistd -y
(作为根目录)时,找不到位于直接子目录中的任何包。由于服务器在端口80上运行,所以我以根用户身份运行twistd。manpage for twistd表示:
注意,如果twistd以根用户身份运行,则不会在工作目录中搜索python模块。
很好,但是为什么?我该怎么解决呢?twistd似乎忽略了--rundir .
,即使我显式地设置了该选项。
最佳答案
一般unix的智慧是,在根目录下搜索要执行的任务是个坏主意。有人认为它为特洛伊人打开了大门。在以根用户身份运行时,twistd不会特意将工作目录添加到python模块导入搜索路径中,它基本上是在尝试遵循这一智慧。
正如另一位评论人士所说,您可以显式地将pythonpath设置为包含应用程序所需代码的目录。
您还可以完全跳过以根用户身份运行,并使用authbind
绑定编号较低的端口,而不具有超级用户权限。这就是我所有服务器的部署方式。