Avoiding cyclic imports, but how...?

未关闭
#503 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
28/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
javascript, python
领域
compilers

调研方向

Start by reproducing the recursion error from the minimal mylib example using test.py and test.html, then inspect the generated JavaScript around the imports in mylib/a.py, mylib/b.py, mylib/examine.py, and mylib/init.py. Compare the Transcrypt output with CPython's behavior and determine whether cyclic imports can be supported or need a documented limitation and workaround.

由索引模型根据 Issue 内容生成。

描述

Hi, I'm still trying to port a library that initially was written to run with PyJS to Transcrypt, and got into one more issue where I was not able to find any running solution. I am trying to describe the problem in a much simpler test case, which does exactly the same and runs in the same problem, a "too much recursion" message in the browser.

.
├── mylib
│   ├── a.py
│   ├── b.py
│   ├── examine.py
│   └── __init__.py
├── test.html
└── test.py

mylib/a.py:

from mylib import examine

class A(object):
        def examine(self):
                examine.examine()

mylib/b.py:

from mylib.a import A

class B(A):
        pass

mylib/examine.py:

import mylib

def examine():
        for key in dir(mylib):
                print(key)

mylib/__init__.py:

from mylib.a import A
from mylib.b import B

import mylib.examine

The reason for the function examine() in mylib.examine is, that it both should be callable outise of A or in context of A, and it examines the contents of the mylib module, its objects and classes.

CPython compiles and runs this without compromise. The Transcrypt-generated output runs into an recursion error, because mylib.examine imports examine. According to issue #106, cyclic imports are a problem. So, surely, this is more a question how I have to style my code, but I can't find a solution right now... can this problem be solved in any way?

主要语言
Python
星标
2.9k
派生
218
PR 合并指标
30 天内没有已合并 PR

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

TranscryptOrg/Transcrypt 的其他 Issue

查看 TranscryptOrg/Transcrypt 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。