Python Tornado AttributeError:模块“ test”没有属性“ __path__”

Hen*_*Hub 0 python path tornado

我正在尝试仅运行Tornado文档中Hello World代码

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()
Run Code Online (Sandbox Code Playgroud)

除非出现错误: AttributeError: module 'test' has no attribute '__path__'

我只是使用IDLE运行 test.py

我以为这是由于我的Windows 10计算机没有Python可以访问,PATH但是即使在Python 3.6中添加了Python,PATH我仍然遇到相同的错误。有任何想法吗?

屏幕截图是我向其中添加python的方式PATH,我认为我理解正确。

在此处输入图片说明

------ 编辑 ------

我会添加一些我遇到的错误/回溯的屏幕截图。第一个是test.pyWindows 10中在IDLE 3.6中运行时下面的命令提示符。

在此处输入图片说明

如果有导入错误,我可以通过IDLE解释器很好地导入Tornado。 在此处输入图片说明

我也尝试hello World在IPython 3.7中运行此代码,但出现此错误: 在此处输入图片说明

xyr*_*res 5

解决方案:运行不带-m参数的文件。

另一种解决方案是提供不带.py扩展名的文件名:

python -m test
Run Code Online (Sandbox Code Playgroud)

这也将起作用。


说明:

-m参数告诉Python运行Python路径中存在的模块(文件)。它不使用文件名,而是使用模块名。区别在于文件名包含.py后缀,而模块名不包含后缀。

因此,您也可以这样运行test.py文件:python -m test


何时使用-m参数:

-m参数是那里的便利。例如,如果要运行python的默认http服务器(python随附),则可以编写以下命令:

python -m http.server
Run Code Online (Sandbox Code Playgroud)

这将为您启动http服务器。-m参数给您带来的便利是,您可以从系统中的任何位置编写此命令,而python会自动http在系统的中查找被调用的软件包Path

没有-m参数,如果您想运行http服务器,则必须给出其完整路径,例如:

python C:\path\to\python\installation\http\server.py
Run Code Online (Sandbox Code Playgroud)

因此,-marguments使得运行中存在的模块(文件)变得容易Path


使用Tornado,您是否会知道如何杀死Python解释器?A CNTRL-C什么也没做。

我使用Linux,Ctrl-C对我来说工作正常。在Windows上,您可以尝试Ctrl-DCtrl-Z。或这里有一些答案:使用ctrl + c停止python