0

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

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

4

2 回答 2

1

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

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

fabric = require('fabric')

否则,如果您需要从托管位置加载 JS 库并希望在 Python 中执行此操作,您可以使用 JavaScript 使用 Transcrypt pragma 编译器指令来执行此操作,如Transcrypt 文档中所述:

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')
)
于 2020-08-09T18:30:36.883 回答
0

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

我不熟悉 Google 的 JavaScript 客户端库,但看了一眼 doco,我猜这是client.js暴露gapi的主要对象。

从原理上讲,您可以执行以下操作:首先是 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查看结果。

于 2020-08-04T04:07:13.283 回答