当PyInstaller在Windows上编译时,Python 3.6 HTTP服务器无法到达。

问题描述 投票:1回答:1

我在Python 3.6中使用以下方法创建了一个web服务器 http.server.HTTPServer, http.server.SimpleHTTPRequestHandlersocketserver.ThreadingMixIn. 它的工作原理和预期一样,我可以从本地网络的任何设备访问网页。

我将它编译为 PyInstaller 来创建一个Windows可执行文件。该网页在localhost下可以使用,但它不能从本地网络上的任何设备访问。

我使用了 nmap 从另一台设备上扫描托管Web服务器的计算机,发现Web服务器使用的端口(8080)是打开的,当我正常运行我的脚本(使用Python解释器),一切都能正常工作。然而,当我使用由 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()
python python-3.x windows pyinstaller httpserver
1个回答
0
投票

我运行你的代码,它为我工作。O.S.要求打开连接,一切似乎都很正常。你必须提供某种形式的日志,以便让我们了解发生了什么问题。在我的运行中,我省略了-i开关,因为我没有.ico文件。


0
投票

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

我把我的脚本移到了桌面上,然后编译到这里:Windows防火墙确认显示出来了 (这个),可执行文件运行良好。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.