我遵循transcrypt提供的入门部分,创建了一个名为hello的文件夹,然后创建了两个文件hello.py、hello.html
我的目标是在客户端运行一个函数,并将结果输出到网页
hello.py
from datetime import datetime
import time
import random
def FUN():
for i in range(random.randrange(1, 9)):
time.sleep(random.randrange(10 , 30 ))
print (f"Current time {datetime.now()} , Number {i}")hello.html
<script type="module">import * as hello from './__target__/hello.js'; window.hello = hello;</script>
<p>
<div id = "FUN">...</div>
<button onclick="hello.FUN()">Do code</button>使用python3 -m http.server启动服务器并浏览到hello.html
当我按下do code按钮时,什么也得不到
[08/May/2021 04:30:16] "GET /hello.html HTTP/1.1" 200 -
127.0.0.1 - - [08/May/2021 04:30:17] code 404, message File not found
127.0.0.1 - - [08/May/2021 04:30:17] "GET /__target__/hello.js HTTP/1.1" 404 -
127.0.0.1 - - [08/May/2021 04:30:17] code 404, message File not found
127.0.0.1 - - [08/May/2021 04:30:17] "GET /favicon.ico HTTP/1.1" 404 -我使用命令pip3 install transcrypt安装了代码转换
但是当我运行这个命令时,python -m transcrypt -b -m -n hello.py
它中止,并显示以下输出
Saving target code in: /home/kali/n3w/__target__/org.transcrypt.__runtime__.js
Saving target code in: /home/kali/n3w/__target__/re.translate.js
Saving target code in: /home/kali/n3w/__target__/re.js
Saving target code in: /home/kali/n3w/__target__/warnings.js
Error while compiling (offending file last):
File '/home/kali/n3w/hello.py', line 1, at import of:
File '/home/kali/.local/lib/python3.9/site-packages/wget.py', line 562, at import of:
File '/usr/lib/python3.9/optparse.py', line 90, at import of:
File '/usr/lib/python3.9/gettext.py', line 718, at import of:
File '/usr/lib/python3.9/locale.py', line 658, at import of:
File '_bootlocale', line 8, namely:
Import error, can't find any of:
/home/kali/n3w/locale.py
/home/kali/n3w/locale.js
/home/kali/.local/lib/python3.9/site-packages/transcrypt/modules/locale.py
/home/kali/.local/lib/python3.9/site-packages/transcrypt/modules/locale.js
/home/kali/n3w/locale.py
/home/kali/n3w/locale.js
/home/kali/n3w/_bootlocale.py
/home/kali/n3w/_bootlocale.js
/home/kali/.local/lib/python3.9/site-packages/transcrypt/modules/_bootlocale.py
/home/kali/.local/lib/python3.9/site-packages/transcrypt/modules/_bootlocale.js
/home/kali/n3w/_bootlocale.py
/home/kali/n3w/_bootlocale.js
/home/kali/n3w/_locale.py
/home/kali/n3w/_locale.js
/home/kali/.local/lib/python3.9/site-packages/transcrypt/modules/_locale.py
/home/kali/.local/lib/python3.9/site-packages/transcrypt/modules/_locale.js
/home/kali/n3w/_locale.py
/home/kali/n3w/_locale.js
/usr/lib/python3.9/_locale.py
/usr/lib/python3.9/_locale.js
/usr/lib/python3.9/lib-dynload/_locale.py
/usr/lib/python3.9/lib-dynload/_locale.js
/home/kali/.local/lib/python3.9/site-packages/_locale.py
/home/kali/.local/lib/python3.9/site-packages/_locale.js
/home/kali/testing_0505/npm_socket/batavia/_locale.py
/home/kali/testing_0505/npm_socket/batavia/_locale.js
/usr/local/lib/python3.9/dist-packages/_locale.py
/usr/local/lib/python3.9/dist-packages/_locale.js
/usr/lib/python3/dist-packages/_locale.py
/usr/lib/python3/dist-packages/_locale.js
/usr/lib/python3.9/dist-packages/_locale.py
/usr/lib/python3.9/dist-packages/_locale.jsTranscrypt站点有如何设置小演示的步骤,但没有详细说明每个命令的作用
发布于 2021-05-08 20:45:52
Transcrypt目前适用于Python 3.7。一个新版本正在制作中,但可能还需要一段时间。致以亲切的问候雅克·德·胡奇
发布于 2021-05-12 18:14:25
这里有一些信息,也许会有帮助。
要使用3.7版本,您可能必须键入'python3.7‘或类似的内容,这取决于您使用的操作系统。要在键入'python‘时查看它使用的是哪个版本,您可以使用:
python --版本
要查看python的位置(您可能也可以在那里找到3.7版本),请使用以下命令:
python #在哪里取决于您的操作系统
例如:使用内置的' venv‘模块:在你的项目文件夹中:python3.7python venv package_dir #上面创建了一个名为package_dir的目录,#本地项目python包可以放到这个目录中。#然后'activate',之后你可以在package_dir中使用' python‘#来引用python的版本,#和'pip’来引用pip3等: source package_dir/bin/activate #现在将在package_dir中安装代码转换,而不是全局。pip安装转加密
例如,我注意到random.randrange isn't implemented,但randint是。有关兴趣,请参阅CPython source code中的randrange,这暗示了为什么它不在代码转换中。randint(a,b)与randrange(a,b+ 1)相同。
看看Transcrypt的时间实现,睡眠被排除在外,因为在当时,在浏览器中处理它需要一个循环(阻塞)。
因此,假设你想使用a non-blocking js version of sleep,因为它的性能和占用空间很小,并且决定使用randint来满足你的需求,并且你想使用randint,下面是你想要的样子:
from datetime import datetime
import random
# Add a js function that can be called by your python code.
__pragma__ ('js', '{}', '''
// Will not block main thread.
function async_sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms * 1000));
}
''')
# We're using async / await to avoid blocking the main thread.
async def FUN():
for i in range(random.randint(1, 9 - 1)):
await async_sleep(random.randint(10 , 30 - 1))
current_time = f"Current time {datetime.now()} , Number {i}"
# To output to the DOM, use js DOM functions.
document.getElementById('FUN').innerHTML += current_time + '<br>'作为比较,休眠的线程阻塞版本可能如下所示。
from datetime import datetime
import random
__pragma__ ('js', '{}', '''
// Bad, will block main thread.
function blocking_sleep(sec) {
var unixtime_ms = new Date().getTime();
while(new Date().getTime() < unixtime_ms + sec * 1000) {}
}
''')
def FUN():
for i in range(random.randint(1, 9 - 1)):
blocking_sleep(random.randint(10 , 30 - 1))
current_time = f"Current time {datetime.now()} , Number {i}"
# print() outputs to the dev console.
print (current_time)
document.getElementById('FUN').innerHTML += current_time + '<br>'https://stackoverflow.com/questions/67445604
复制相似问题