Не удается найти модули Python - очередь, веб-сервер - PullRequest
0 голосов
/ 28 апреля 2019

Обновление - 30/04/19:

Спасибо, xyres за помощь мне. Я изменил строку в queue.Queue (), и теперь я получаю следующие ошибки:

$ python3 netgrafio1.py
2019-04-30 16:58:45,470 - DEBUG - [asyncio] - Using selector: EpollSelector
2019-04-30 16:58:45,472 - INFO - [WebSocketServer] - Starting WebSocket server on port 8080
2019-04-30 16:58:45,472 - INFO - [WebSocketServer] - Start collector server
2019-04-30 16:58:45,473 - INFO - [WebSocketServer] - Waiting for incoming data ...
2019-04-30 16:58:45,477 - INFO - [WebServer] - Listening on 5000
Exception in thread Thread-3:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ubuntu/netgrafio/lib/WebServer.py", line 114, in start_server
    http_server = Thread(target=IOLoop.instance().start)
  File "/home/ubuntu/.local/lib/python3.5/site-packages/tornado/ioloop.py", line 201, in instance
    return IOLoop.current()
  File "/home/ubuntu/.local/lib/python3.5/site-packages/tornado/ioloop.py", line 265, in current
    loop = asyncio.get_event_loop()
  File "/usr/lib/python3.5/asyncio/events.py", line 632, in get_event_loop
    return get_event_loop_policy().get_event_loop()
  File "/usr/lib/python3.5/asyncio/events.py", line 578, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-3'.

Traceback (most recent call last):
  File "netgrafio1.py", line 100, in <module>
    main(parse_args(sys.argv[1:]))
  File "netgrafio1.py", line 95, in main
    tcp_server = JSONServer(host, int(params.tcp_port), in_queue)
NameError: name 'JSONServer' is not defined

Обновление - 28/04/19:

  • установлен пип3, торнадо, колба
  • смените 'Queue' на 'queue' в скрипте ниже

Новая ошибка:

    ubuntu@ip-172-31-11-55:~/netgrafio$ python3 netgrafio1.py
Traceback (most recent call last):
  File "netgrafio1.py", line 100, in <module>
    main(parse_args(sys.argv[1:]))
  File "netgrafio1.py", line 81, in main
    in_queue = queue()
TypeError: 'module' object is not callable

Я пытаюсь запустить скрипт, следуя этой ссылке для netgrafio. Обратите внимание, netgrafio1.py - это моя отредактированная версия, пытающаяся исправить импорт.

Это содержимое netgrafio1.py:

.
import sys
import argparse
import logging
try:
    import queue
except ImportError:
    import Queue as queue

# Local packages
#from lib.TCPServer import JSONServer
from lib.WebSocketServer import WebSocketServer
from lib.WebServer import WebServer
try:
    import SocketServer as socketserver
    from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
except ImportError:
    import socketserver
    from http.server import HTTPServer, BaseHTTPRequestHandler



def parse_args(params):
    """ Parse cmd line arguments """
    parser = argparse.ArgumentParser(
        description="netgrafio - visualize your network",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    # Set parameters
    parser.add_argument("--tcp-port", action="store", type=int,
                        help="Specify TCP port to listen for JSON packets", default=8081)
    parser.add_argument("--ws-port", action="store", type=int,
                        help="Specify WebSocket port to send JSON data to", default=8080)
    parser.add_argument("--web-port", action="store", type=str,
                        help="Specify web port to server web application", default=5000)
    parser.add_argument("--host", action="store", default="127.0.0.1",
                        help="Specify host to bind socket on")
    args = parser.parse_args(params)

    return args


def main(params):
    # Global logging settings
    logging.basicConfig(level=logging.DEBUG,
                        format="%(asctime)s - %(levelname)s - [%(name)s] - %(message)s")

    # Init in queue (producer and consumer pattern)
    in_queue = Queue()

    # Set default host
    host = params.host

    # Start WebSocket server
    websocket_server = WebSocketServer(host, int(params.ws_port), in_queue)
    websocket_server.start()

    # Start Web Server
    web_server = WebServer(host, int(params.web_port))
    web_server.start()

    # Start JSON server
    tcp_server = JSONServer(host, int(params.tcp_port), in_queue)
    tcp_server.start()


if __name__ == "__main__":
    main(parse_args(sys.argv[1:]))

# EOF

Когда я запускаю эту команду:

python netgrafio1.py -h

Я получаю эту ошибку:

Traceback (most recent call last):
  File "netgrafio1.py", line 44, in <module>
    from lib.WebSocketServer import WebSocketServer
  File "/home/ubuntu/netgrafio/lib/WebSocketServer.py", line 54, in <module>
    from queue import Queue

Когда я запускаю эту команду:

python3 netgrafio1.py

Я получаю эту ошибку:

Traceback (most recent call last):
  File "netgrafio1.py", line 44, in <module>
    from lib.WebSocketServer import WebSocketServer
  File "/home/ubuntu/netgrafio/lib/WebSocketServer.py", line 46, in <module>
    import tornado.web
ImportError: No module named 'tornado'

Обратите внимание, что у меня установлен торнадо:

pip list | grep tor
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
tornado        5.1.1  

Я пытаюсь запустить netgrafio, чтобы я получил это:

$ python netgrafio.py -h
usage: netgrafio.py [-h] [--tcp-port TCP_PORT] [--ws-port WS_PORT]
                    [--web-port WEB_PORT] [--host HOST]

netgrafio - visualize your network

optional arguments:
  -h, --help           show this help message and exit
  --tcp-port TCP_PORT  Specify TCP port to listen for JSON packets (default:
                       8081)
  --ws-port WS_PORT    Specify WebSocket port to send JSON data to (default:
                       8080)
  --web-port WEB_PORT  Specify web port to server web application (default:
                       5000)
  --host HOST          Specify host to bind socket on (default: 127.0.0.1)

1 Ответ

0 голосов
/ 28 апреля 2019

Когда вы используете команду python ..., ваша ОС, вероятно, работает на Python 2.7. А в Python 2.7 нет модуля queue. В v2.7 он назывался Queue. Он был переименован в queue в v3.

А когда вы запускаете python3 ..., ваша ОС работает под управлением Python 3.x. Хотя эта версия имеет модуль queue, но вы не установили Tornado для Python 3.

Чтобы это исправить, установите Tornado for Python 3:

pip3 install tornado

Затем запустите ваш скрипт, используя команду python3 ....


ОБНОВЛЕНИЕ связано с новой ошибкой.

queue не вызываемый объект; это модуль (то есть файл Python). Пожалуйста, ознакомьтесь с документами для модуля queue. Вам нужно использовать queue.Queue в вашем коде.

in_queue = queue.Queue()
...