Python 以root用户身份运行twistd,模块不';找不到

Python 以root用户身份运行twistd,模块不';找不到,python,twisted,Python,Twisted,我有一个用Twisted编写的简单web服务器,我正试图用twistd来启动它。使用reactor.run()一切正常,但是当我使用twistd-y(作为根目录)时,我的直接子目录中的包都找不到。我以root用户身份运行twistd,因为服务器在端口80上运行。报告说: 注意,如果twistd作为root运行,则不会在工作目录中搜索Python模块 那很好,但是为什么呢?我怎样才能工作呢?twistd似乎忽略了--rundir.,即使我显式地设置了该选项。UNIX的一般智慧是,在工作目录中搜索根

我有一个用Twisted编写的简单web服务器,我正试图用twistd来启动它。使用
reactor.run()
一切正常,但是当我使用
twistd-y
(作为根目录)时,我的直接子目录中的包都找不到。我以root用户身份运行twistd,因为服务器在端口80上运行。报告说:

注意,如果twistd作为root运行,则不会在工作目录中搜索Python模块


那很好,但是为什么呢?我怎样才能工作呢?twistd似乎忽略了
--rundir.
,即使我显式地设置了该选项。

UNIX的一般智慧是,在工作目录中搜索根目录下要执行的内容是一个坏主意。有人认为它为特洛伊木马打开了大门。在以root用户身份运行时,twistd不会特意将工作目录添加到Python模块导入搜索路径中,它基本上是在尝试遵循这一智慧

正如另一位评论者所说,您可以自己显式地将PYTHONPATH设置为包含包含应用程序所需代码的目录


您还可以完全跳过以root用户身份运行,并使用
authbind
绑定编号较低的端口,而不具有超级用户权限。这就是我所有服务器的部署方式。

是否尝试设置PYTHONPATH变量?嗯,我可以手动调整搜索路径,就像这样:import sys.path.insert(0,“.”),但这太差劲了。“.”应始终位于搜索路径中。我想我的问题是,难道没有人使用twistd在知名端口上运行服务吗?不要依赖rundir。请参阅等待,使用authbind,我可以在<1024个端口上运行,而不必成为root,并且我不需要重新编译内核?太好了,希望我早点知道。