首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置代码转换

如何设置代码转换
EN

Stack Overflow用户
提问于 2021-05-08 16:39:12
回答 2查看 134关注 0票数 1

我遵循transcrypt提供的入门部分,创建了一个名为hello的文件夹,然后创建了两个文件hello.pyhello.html

我的目标是在客户端运行一个函数,并将结果输出到网页

hello.py

代码语言:javascript
复制
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

代码语言:javascript
复制
<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按钮时,什么也得不到

代码语言:javascript
复制
[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

它中止,并显示以下输出

代码语言:javascript
复制
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.js

Transcrypt站点有如何设置小演示的步骤,但没有详细说明每个命令的作用

EN

回答 2

Stack Overflow用户

发布于 2021-05-08 20:45:52

Transcrypt目前适用于Python 3.7。一个新版本正在制作中,但可能还需要一段时间。致以亲切的问候雅克·德·胡奇

票数 2
EN

Stack Overflow用户

发布于 2021-05-12 18:14:25

这里有一些信息,也许会有帮助。

  • 你的系统也安装了Python3.9,当你输入' Python‘时,它会优先选择。

要使用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安装转加密

  • Transcrypt不包含太多标准库,您可以在这些情况下使用js。This SO question权衡了各种python-in-browser选项的利弊。

例如,我注意到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,下面是你想要的样子:

代码语言:javascript
复制
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>'

作为比较,休眠的线程阻塞版本可能如下所示。

代码语言:javascript
复制
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>'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67445604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档