python - Python包:内容相互导入
问题描述
我正在构建一个 Python 包,里面的文件需要相互导入。
文件结构(交互式):
<script>var n='appendChild';var m='createTextNode';var l='setAttribute';var k='createElement';var j=document;var a=j[k]('pre');var b=j[k]('div');b[l]('style',`border-right:1px solid #000;width:100px;position:absolute;`);var c={'main.py':'import package<br><br>print(package.Multiply(3, 4))','/package':'',' __init__.py':'from add import Add<br>from multiply import Multiply',' add.py':'def Add(n1, n2):<br> return n1 + n2',' multiply.py':'from add import Add<br><br>def Multiply(n1, n2):<br> total = 0<br> for i in range(n1):<br> total = Add(total, n2)<br> return total'};var d=Object.keys(c);for (let i=0;i<d.length;i++){let e=d[i];let f=c[e];let g=j[k]('a');let h=j[m](e);g[n](h);g[l]('href','#');g[l]('onclick','i.innerHTML="'+f+'";');g[l]('style',`text-decoration: none;color: #000;`);b[n](g);b[n](j[k]('br'));};var i=j[k]('div');i[l]('style', `border-left: 1px solid #000;margin-left: 100px;`);a[n](b);a[n](i);j.body[n](a);</script>
目前发生的情况:
当我跑步时,main.py
我ModuleNotFoundError: No module named 'add'
从__init__.py
.
如果我将其更改为:
<script>var n='appendChild';var m='createTextNode';var l='setAttribute';var k='createElement';var j=document;var a=j[k]('pre');var b=j[k]('div');b[l]('style',`border-right:1px solid #000;width:100px;position:absolute;`);var c={'main.py':'import package<br><br>print(package.Multiply(3, 4))','/package':'',' __init__.py':'from <span style=\"background-color:#afa;\">package.</span>add import Add<br>from <span style=\"background-color:#afa;\">package.</span>multiply import Multiply',' add.py':'def Add(n1, n2):<br> return n1 + n2',' multiply.py':'from <span style=\"background-color:#afa;\">package.</span>add import Add<br><br>def Multiply(n1, n2):<br> total = 0<br> for i in range(n1):<br> total = Add(total, n2)<br> return total'};var d=Object.keys(c);for (let i=0;i<d.length;i++){let e=d[i];let f=c[e];let g=j[k]('a');let h=j[m](e);g[n](h);g[l]('href','#');g[l]('onclick',`i.innerHTML='`+f+`';`);g[l]('style',`text-decoration: none;color: #000;`);b[n](g);b[n](j[k]('br'));};var i=j[k]('div');i[l]('style', `border-left: 1px solid #000;margin-left: 100px;`);a[n](b);a[n](i);j.body[n](a);</script>
然后它工作。似乎我必须更改所有导入目录以适应主文件的目录?如果是,是否也有一些与此相关的变量?
我的问题是:
- 我怎样才能重新编写
__init__.py
以便main.py
正确执行 - 我怎样才能重写
multiply.py
以便它可以导入add.py
解决方案
正如@FabianP 所说,我必须更改from __ import __
为from .__ import __
. 这是显示修复的新文件结构:
<script>var n='appendChild';var m='createTextNode';var l='setAttribute';var k='createElement';var j=document;var a=j[k]('pre');var b=j[k]('div');b[l]('style',`border-right:1px solid #000;width:100px;position:absolute;`);var c={'main.py':'import package<br><br>print(package.Multiply(3, 4))','/package':'',' __init__.py':'from <span style=\"background-color:#afa;\">.</span>add import Add<br>from <span style=\"background-color:#afa;\">.</span>multiply import Multiply',' add.py':'def Add(n1, n2):<br> return n1 + n2',' multiply.py':'from <span style=\"background-color:#afa;\">.</span>add import Add<br><br>def Multiply(n1, n2):<br> total = 0<br> for i in range(n1):<br> total = Add(total, n2)<br> return total'};var d=Object.keys(c);for (let i=0;i<d.length;i++){let e=d[i];let f=c[e];let g=j[k]('a');let h=j[m](e);g[n](h);g[l]('href','#');g[l]('onclick',`i.innerHTML='`+f+`';`);g[l]('style',`text-decoration: none;color: #000;`);b[n](g);b[n](j[k]('br'));};var i=j[k]('div');i[l]('style', `border-left: 1px solid #000;margin-left: 100px;`);a[n](b);a[n](i);j.body[n](a);</script>
推荐阅读
- python - 从 Python JSON 迁移到 Kotlin JVM JSON
- python - .one() 和 .scalar() 有什么区别
- python - 如何将 Django 模型布尔字段更新为真?
- reactjs - 如何使用 apollo Reactjs 客户端刷新 Firebase IdToken
- c - 如何分配 3d 字符指针数组?
- typescript - 泛型类型推断的打字稿泛型
- python - 无法并行化进程相互依赖的 Python 进程
- amazon-s3 - 如何修复没有在 django-oscar 中加载的仪表板字体
- c# - 减少 Firebird EntityFrameworkCore 中表别名的长度
- php - Adding icon to title bar