【问题标题】:How to import js modules in Python with Transcrypt如何使用 Transcrypt 在 Python 中导入 js 模块
【发布时间】:2020-11-21 12:11:58
【问题描述】:

我有一个非常 Python-ic 的脚本,它可以用 Transcrypt 编译,但问题是我拥有的一个外部依赖项是我需要导入 google-cloud-bigquery。这显然会在转译过程中引发错误,但似乎该 API 可以通过 <script src="https://apis.google.com/js/client.js"> 在 JavaScript 中使用(这是我的目标编译)但是 Transcrypt 转译我的 index.py 文件,我不能只放置这个 JS 脚本在 Python 文件中(我知道),那么我该如何实现呢?

我知道其他模块,例如 Numscrypt,可通过 Transcrypt 获得,但您如何在 Python 文件中实际添加模块?

【问题讨论】:

    标签: python google-bigquery transcrypt


    【解决方案1】:

    在您的 Transcrypt 代码挂起的 HTML 页面中加载 JavaScript 库。然后,您应该能够在您的 Transcrypt 模块中访问 Google 的 JavaScript 客户端库的顶级对象。

    我不熟悉 Google 的 JavaScript 客户端库,但看了一眼文档,我猜 gapiclient.js 暴露的主要对象。

    大致上你可以这样做:首先是 HTML 文件 index.html:

    <html>
        <head>
            <meta charset="utf-8">
            ... other google scripts you might need ... 
            <script src="https://apis.google.com/js/client.js"></script>
        </head>
        <body>
            ... here your page elements...
            <script type="module">import * as main from './__target__/your_google_stuff.js';</script>
        </body>
    </html>
    

    然后在同一个目录中有 Transcrypt 模块your_google_stuff.py

    def do_your_stuff():
    
        def auth_callback(res):
            if res and res.error is None:
                # Authenticated!
                ...do your stuff after authentication here
    
        # here do the authentication, etc
        gapi.client.setApiKey(YOUR_API_KEY) # Note that gapi should be globally available here!
        gapi.auth.authorize({
            'client_id': YOUR_ID,
            ... more atributes here...
            }, auth_callback)
    
    gapi.load(..., do_yor_stuff)
    

    使用 Transcrypt 编译 your_google_stuff.py 并通过提供 index.html 查看结果。

    【讨论】:

      【解决方案2】:

      您需要使用 JavaScript 版本的库,并且如前所述将导入放在 HTML 文件的 &lt;script&gt; 标记中是最简单的方法。由于此时该库将位于全局命名空间中,因此您可以从 Python 程序中的任何位置调用它。

      如果您使用 Parcel 或 Webpack 之类的打包工具并使用 npm 在本地存储库,则可以使用 Node.js require() 函数并将其分配给 Python 变量,例如:

      fabric = require('fabric')
      

      否则,如果您需要从托管位置加载 JS 库并希望在 Python 中执行此操作,您可以使用 JavaScript 使用像 Transcrypt docs 中提到的这样的 Transcrypt pragma 编译器指令来执行此操作:

      fabric = __pragma__ ('js',
          '''
      (function () {{
          var exports = {{}};
          {}  // Puts fabric in exports and in global window
          delete window.fabric;
          return exports;
      }}) () .fabric;
          ''',
          __include__ ('com/fabricjs/fabric_downloaded.js')
      )
      

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 2020-06-06
        • 2014-11-07
        • 2012-05-27
        • 1970-01-01
        • 2021-08-01
        • 2016-07-08
        • 1970-01-01
        • 2020-06-08
        相关资源
        最近更新 更多