Brython:如何获得包裹(数学、时间等)

Brython: how do I get packages (math, time, etc.)

因此,作为 Python 的忠实粉丝,我发现 Brython 可以帮助我构建更全面的基于 Web 的 GUI(我希望如此)。

我找到了我决定在本地试用的时钟演示。它由两个文件组成:

  1. html 文件
  2. python时钟代码

这是 clock.html 文件:

    <!doctype html>
    <html>

    <head>
        <meta charset="utf-8">
        <script type="text/javascript"
            src="/brython.js">
            src="/brython_stdlib.js">
        </script>
        <script src="clock.py" type="text/python3"></script>
    </head>

    <body onload="brython();">

    </body>

    </html>

还有 clock.py 文件,这里只是部分文件(在 Brython.info 上找到,按照 link 获取完整代码):

    import time
    import math
    import datetime

    from browser import document as doc
    import browser.timer

    sin, cos = math.sin, math.cos

    ...

    show_hours()
    set_clock()

然后我发出命令:

    mkdir js
    cd js
    python -m brython --install

最后我构建了一个小型服务器来提供我的文件:

mini_server.py:

    from flask import Flask, send_from_directory
    app = Flask(__name__, static_folder='.')

    @app.route('/')
    def example():
            return app.send_static_file('clock.html')

    @app.route('/<name>.js')
    def js_files(name):
        return app.send_static_file('js/' + name + '.js')

    @app.route('/<path:path>')
    def all_files(path):
        return app.send_static_file(path)

    if __name__ == '__main__':
        app.debug=True
        app.run()

所以我得到了这个结构:

clock.html
clock.py
mini_server.py
js/brython.js
js/brython_stdlib.js

现在我的问题是,当 运行 我的服务器转到 http://127.0.0.1:5000/clock.html 我得到:

    Error 404 means that Python module time was not found at url http://127.0.0.1:5000/time.py

好的,我认为这很容易解决,但查看文档我发现只有一种解决方法:

    python -m brython --add_package time

但这抛出:

    add package time...
    Traceback (most recent call last):
      File "C:\Program Files\Python36\lib\runpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      File "C:\Program Files\Python36\lib\runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "C:\Program Files\Python36\lib\site-packages\brython\__main__.py", line 142, in <module>
        main()
      File "C:\Program Files\Python36\lib\site-packages\brython\__main__.py", line 48, in main
        package_file = package.__file__
    AttributeError: module 'time' has no attribute '__file__'

有什么问题?如何或从哪里获取时间、数学和日期时间包?

看起来很简单,但我现在迫切需要一个解决方案。

找到我的问题:

我的clock.html粘贴的很烂,brython_stdlib.js没有加载。数学模块是 brython_stdlib.js 文件的一部分,必须作为脚本与 brython.js 一起加载到 html 文件中。所以像这样:

    <script type="text/javascript" src="/brython.js"></script>
    <script type="text/javascript" src="/brython_stdlib.js"></script>

在我的例子中,我的第二个脚本导入命令有一个拼写错误,它没有被加载(查看问题中的 clock.html 文件)。这给出了控制台输出,让我认为数学文件丢失了:

brython.js:9188 GET http://127.0.0.1:5000/time.py?v=1591284638836 404 (NOT FOUND)
brython.js:9188 GET http://127.0.0.1:5000/time/__init__.py?v=1591284638855 404 (NOT FOUND)
brython.js:9188 GET http://127.0.0.1:5000/Lib/site-packages/time.py?v=1591284638881 404 (NOT FOUND)
brython.js:9188 GET http://127.0.0.1:5000/Lib/site-packages/time/__init__.py?v=1591284638909 404 (NOT FOUND)

所以谢谢你,我希望任何犯同样错误的人都会偶然发现这个 post。