我有以下三个层次的文件夹 struct :folder1包含folder1_1,它也包含folder1_1_1.现在我们有一个.每个文件夹中的py文件(除了显然需要的'init.py',很抱歉,我不知道如何将这两行放在前后).

folder1  
L __init__.py  
L file1.py  
L folder1_1  
  L __init__.py  
  L 文件1_1.py  
  L folder1_1_1  
    L __init__.py  
    L 文件1_1_1.py

文件内容

from folder1_1.file1_1 import Test1_1 as lvl2
class Test1:
    randomnumber = 1
    sum = randomnumber  + lvl2.sum
    print (sum)

文件1_1.py

from folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
class Test1_1:
    somenumber = 1
    sum = somenumber + lvl3.someothernumber
    print (sum)

文件1_1_1.py

class Test1_1_1:
    someothernumber = 1

So each file imports from the directly lower folder. One step works: When I run 文件1_1.py the import from file1_1_1 works fine, and it produces the desired result (2)

但file1中的"2级"导入失败:

  File "c:\Users\DSCO\Documents\folder1\folder1_1\文件1_1.py", line 1, in <module>
    from folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
ModuleNotFoundError: No module named 'folder1_1_1'

我怎样才能以这种方式导入?或者我需要重新排列我的文件夹吗?在实际的代码中,这个 struct 涉及到file1_1,它有许多指向file1_1_1的导入语句,而file1_1实际上是许多文件.这就是为什么要使用单独的子文件夹(folder1_1_1)

推荐答案

PEP 366在这里可能很有趣,但在本例中,您不需要-m标志.在您的例子中,唯一的区别是folder1_1/file1_1中的导入.皮耶.我从运行它的条目name开始导入,所以包含folder1_1.您还可以在以下答案中看到更多信息:

最接近你的例子是:

文件树

➜ tree
.
├── 文件1.py
└── folder1_1
    ├── __init__.py
    ├── file1_1.py
    └── folder1_1_1
        ├── __init__.py
        └── file1_1_1.py

文件1.py

#!/usr/bin/env python3
from folder1_1.file1_1 import Test1_1 as lvl2


class Test1:
    randomnumber = 1
    sum = randomnumber + lvl2.sum
    print(sum)


if __name__ == "__main__":
    t1 = Test1()

文件夹1_1/文件1_1.py

from folder1_1.folder1_1_1.file1_1_1 import Test1_1_1 as lvl3


class Test1_1:
    somenumber = 1
    sum = somenumber + lvl3.someothernumber
    print(sum)

文件夹1_1/文件夹1_1_1/文件1_1_1.py

class Test1_1_1:
    someothernumber = 1
    print(someothernumber)

现在,如果从顶部文件夹运行:

./文件1.py

它产生以下输出:

1
2
3

Python相关问答推荐

使用新的类型语法正确注释ParamSecdecorator (3.12)

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

Python 约束无法解决n皇后之谜

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

在线条上绘制表面

Telethon加入私有频道

如何从.cgi网站刮一张表到rame?

在极性中创建条件累积和

ThreadPoolExecutor和单个线程的超时

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

未知依赖项pin—1阻止conda安装""

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

Flash只从html表单中获取一个值

Geopandas未返回正确的缓冲区(单位:米)

从列表中获取n个元素,其中list [i][0]== value''

Pandas:填充行并删除重复项,但保留不同的值

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

pyspark where子句可以在不存在的列上工作

如何将参数名作为参数传入到函数中?

搜索结果未显示.我的URL选项卡显示:http://127.0.0.1:8000/search?";,而不是这个:";http://127.0.0.1:8000/search?q=name";