我有一个非常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文件中添加该模块?
您需要使用该库的JavaScript版本,如前所述,将导入放入HTML文件的<script>
标记中是最简单的方法。由于此时库将位于全局命名空间中,因此可以从Python程序中的任何位置对其进行调用。
如果您使用Parcel或Webpack这样的bundler,并使用npm在本地存储库,则可以使用Node.jsrequire()
函数并将其分配给Python变量,如:
fabric = require('fabric')
否则,如果您需要从托管位置加载JS库,并希望在Python中加载,则可以使用JavaScript使用Transcrypt pragma编译器指令来完成,如Transcrypt-docs:中所述
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')
)
在Transcrypt代码挂起的HTML页面中加载JavaScript库。然后,您应该能够在Transcrypt模块中访问Google JavaScript客户端库的顶级对象。
我不熟悉谷歌的JavaScript客户端库,但通过浏览文档,我猜gapi
是Client.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.查看结果