首页 > 解决方案 > 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.pyModuleNotFoundError: 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>

然后它工作。似乎我必须更改所有导入目录以适应主文件的目录?如果是,是否也有一些与此相关的变量?

我的问题是:

  1. 我怎样才能重新编写__init__.py以便main.py正确执行
  2. 我怎样才能重写multiply.py以便它可以导入add.py

标签: pythonpython-3.x

解决方案


正如@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>


推荐阅读