我真的束手无策,try 了多种解决方案,包括使用setup.py文件,将相对导入更改为绝对导入,反之亦然,包重组,确保每个包都是__init__. py文件等等.任何帮助将不胜感激.下面我简化了我的项目.

我的项目 struct 如下:

myProject
   |
   |__ src
        |
        |__ foo
        |     - __init__.py
        |    |
        |    |__ bar
        |          - __init__.py
        |         |
        |         |__ baz
        |              - __init__.py
        |              - baz_functions.py
        |              - baz_watch.py
        |
        | - __init__.py
        | - project_code.py
        | - main.py

至于档案:

main.py

import project_code

if __name__ == '__main__':
    project_code.run()

project_code.py

import foo.bar.baz.baz_functions

def run():
    print('Hello World!')

baz_watch.py

from baz_functions import function_1, function_2

print('Watching...')

baz_functions.py

def function_1():
   print('I am function 1')

def function_2():
   print('I am function 2')

当然,没有project_code.py中的:import foo.bar.baz.baz_functions,代码运行正常.

我得到的错误是:

Traceback (most recent call last):
  File "C:\xxx\xxx\xxx\myProject\src\main.py", line 1, in <module>
    import project_code
  File "C:\xxx\xxx\xxx\myProject\src\project_code.py", line 1, in <module>
    import foo.bar.baz.baz_functions
  File "C:\xxx\xxx\xxx\myProject\src\foo\bar\baz\baz_watch.py", line 1, in <module>
    from baz_functions import function_1, function_2
ModuleNotFoundError: No module named 'baz_functions'

推荐答案

baz_functions不是顶级模块;它存在于包foo.bar.baz中,并且使用absolute导入,必须这样导入.

relative导入可以使用.来引用与导入模块相同的包中的模块:

from .baz_functions import function1, function2

Python相关问答推荐

仅从风格中获取 colored颜色 循环

如何计算两极打印机中 * 所有列 * 的出现次数?

大小为M的第N位_计数(或人口计数)的公式

加速Python循环

Python中绕y轴曲线的旋转

如果值发生变化,则列上的极性累积和

实现自定义QWidgets作为QTimeEdit的弹出窗口

Asyncio:如何从子进程中读取stdout?

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

在matplotlib中删除子图之间的间隙_mosaic

找到相对于列表索引的当前最大值列表""

为什么'if x is None:pass'比'x is None'单独使用更快?

通过追加列表以极向聚合

Cython无法识别Numpy类型

统计numpy. ndarray中的项目列表出现次数的最快方法

提取数组每行的非零元素

数据框,如果值在范围内,则获取范围和

利用SCIPY沿第一轴对数组进行内插

替换包含Python DataFrame中的值的<;

如何在Polars中将列表中的新列添加到现有的数据帧中?