在Windows上由PyInstaller编译时,无法访问Python 3.6 HTTP服务器

2024-03-29 12:05:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用http.server.HTTPServerhttp.server.SimpleHTTPRequestHandlersocketserver.ThreadingMixIn在Python3.6中创建了一个web服务器。它工作正常,我可以从本地网络上的任何设备访问该网页

我用PyInstaller编译它来创建一个Windows可执行文件。该网页可与localhost一起使用,但无法从本地网络上的任何设备访问

我使用另一个设备的nmap来扫描托管web服务器的计算机,当我正常运行脚本(使用Python解释器)时,web服务器使用的端口(8080)似乎是打开的,并且一切正常。但是,当我使用PyInstaller生成的可执行文件时,端口未打开,网页无法访问

可执行文件不会产生任何错误,除此之外,一切正常。
我已尝试以管理员身份运行.exe文件,并禁用我的防病毒/防火墙。它不起作用

这是我的PyInstaller命令:
pyinstaller --runtime-tmpdir "" --onefile -i icon.ico script.py

下面是我的python文件中的相关代码:

import http.server  
import socketserver

port = 8080

class ThreadingSimpleServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
    pass #using this so the webserver can handle mutliple requests at a time

class myWebServer(http.server.SimpleHTTPRequestHandler):

    def do_POST(self):
        #does stuff

try:
   server = ThreadingSimpleServer(('', port), myWebServer)
   server.serve_forever()

except KeyboardInterrupt:
    print('^C received, shutting down the program.')
    server.socket.close()

Tags: 文件端口import服务器webhttp可执行文件网页
2条回答

我运行你的代码,它对我有效。O.S.询问有关打开连接的问题,一切似乎都正常。为了让我们了解出了什么问题,您必须制作某种日志。在我的运行中,我省略了-i开关,因为我没有.ico文件

好的,我解决了这个问题,但我仍然不明白是什么原因造成的。从一开始,我就在AppData中的一个文件夹中构建脚本:它不工作,并且没有显示Windows防火墙警告/确认

我将脚本移到桌面并在这里编译:Windows防火墙确认显示(this one),可执行文件运行良好

我想可能防火墙之前已经标记了我的程序,并且所有后续的构建都被列入黑名单或者类似的东西,所以我尝试在原始位置编译脚本,但这次我重命名了它,并删除了以前生成的所有文件:它也不起作用(并且没有防火墙确认/警告)

所以现在我很确定这个错误是由防火墙引起的,它与构建的位置有关,但我真的不明白为什么

相关问题 更多 >