【问题标题】:Local module import tree possibility?本地模块导入树的可能性?
【发布时间】:2022-08-09 11:59:08
【问题描述】:

在我的本地包中,有一个模块树,如下所示:

# source/main.py
from source import worker
def run():
    return worker.func()
# source/worker.py
def func():
    return \'hello\'

我想用 PyScript 演示这个包(在我的包需要安装之前),但不想为了 PyScript 重写整个包。这个 \"index.htm\" 调用主运行().直到 main 想要导入工人模块,以便它可以调用它的函数().

<head>
    ..
    <py-env> 
        paths:
        - source/main.py
        - source/worker.py
    </py-env>
</head>
<body>
    <py-script>
import main
main.run()
    </py-script>
</body>

\"import worker\" 可以工作,但正如我上面所说,它是 \"从源头import worker\" 并且不能仅仅为了使其在 PyScript 中工作而进行更改。

我可以以某种方式定义本地模块导入的根在 \"source\" 之上,并且像 \"import source.module.py\" 这样的导入应该可以工作吗?

  • 您是使用 Web 服务器还是提供 Web 服务器功能的应用程序来提供这些文件?
  • 文件由网络服务器提供。

标签: import pyscript


【解决方案1】:

这是不可能的从源头进口工人因为 source 不是一个模块,它是一个文件夹。 Pyscript 与 python 不同。整个上下文是不同的。也没有必要。如果你声明节点,你可以让它一起工作并且可以访问py-env 和 py-script如下所示。
应用程序根文件夹中的 index.html:

<html>
    <head>
        <link rel="stylesheet" pyscript.css" />
        <script defer src="pyscript.js"></script>       
    <!--<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
        <script defer src="https://pyscript.net/alpha/pyscript.js" onerror=scriptLoadFailure('pyscr ipt.js')></script>      -->
        <py-env> 
paths:
    ./source/worker.py
    ./source/main.py
        </py-env>
    </head>
    
    <body>
        <py-script src="./source/worker.py"></py-script>
        <py-script src="./source/main.py"></py-script>
    </body>
</html>

py-env 中的模块声明为正好有 4 个空格缩进(无制表符)并从应用程序根文件夹(./) 后跟子文件夹和模块。在正文部分,两个模块都声明为py-script 节点的 src 属性。这样,它们就像联合和可操作的,无需进口一个或另一个,也无需从一个进口的东西。您可以从任何需要的地方调用该函数。
这些模块都在源子文件夹中(尽管我更喜欢将 main 与 index.html 一起放在应用程序根目录中)。 main.py 中只有一个变化,我在其中调用了 run() 函数,因为它被排除在 html 之外。
./source/ 子文件夹中的模块是

#
# source/main.py
def run():
    return func()
run()

#
#
# source/worker.py
def func():
    return 'hello'

在浏览器中打开它,你会看到 hello(用 Chrome 和 Edge 测试),这意味着 main.py 中的 run() 命令已经从 worker.py 中调用了 func() 函数,而没有导入任何东西。 如果你真的需要保留这些进口,我可以建议的是替换这些进口,最终如下所示。它可以使用任何编辑器完成,并且可以使用 python 和 pyscript。

try:
    from source import worker
except:
    pass

问候...

【讨论】:

  • 不幸的是,这个答案没有帮助。这个包(例如包含 main.py 和 worker.py)不是我们可以摆弄的。他们从源代码导入模块,实际上是从许多其他子目录。我想让 Pyscript 或 Pyodide 处理这棵树。很明显 Pyscript 与 Python 不同,这就是这里的问题。我正在寻找 Pyscript 或 Pyodide 可以模拟它的解决方案。让我强调一下:任何在“源”下的东西,它都不能改变。
  • 我很抱歉,但我没有其他可以提供的。恐怕没有pyscript(在这个阶段)“处理树”的解决方案。也许别人可以...
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2017-07-16
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多