在Python 3中导入时出错

在Python 3中导入时出错,python,python-3.x,Python,Python 3.x,我有Python 3的结构: my_module/ my_module/ any_name.py tests/ tests.py 然后,我尝试在tests.py中使用: from my_module.any_name import my_class 我收到了错误信息: ModuleNotFoundError: No module named 'my_module' 有人知道问题出在哪里吗?首先,让my_module和my_module/my_

我有Python 3的结构:

my_module/
    my_module/
        any_name.py
    tests/
        tests.py
然后,我尝试在tests.py中使用:

from my_module.any_name import my_class
我收到了错误信息:

ModuleNotFoundError: No module named 'my_module'

有人知道问题出在哪里吗?

首先,让
my_module
my_module/my_module
非常混乱,但我们忽略这一点

为了使
my_模块
工作,外部
my_模块
必须位于您的
sys.path

因此,如果您这样做:

$ cd tests
$ python tests.py
…然后您的
sys.path
将按照您通常的路径,加上
my_模块/tests
。它不包括
my\u模块
,因此您在任何地方都找不到
my\u模块/my\u模块

解决方法包括:

  • 有一个顶级的
    test.py
    ,它从tests导入tests.py和
    tests.run()
  • 从顶级
    my_模块
    目录运行代码作为
    python-m tests.tests
    ,而不是从
    my_模块/tests
    运行代码作为
    python tests.py
  • 手动将
    tests/tests.py
    插入
    os.path.join(uuu path_uuu,../myu模块
    )加入
    sys.path
  • 使用
    setuptools
    /
    pkg\u资源
    ,而不是尝试手动执行所有操作
  • 做所描述的老套的事情。(除非您需要与Python 2.7或3.2或旧版
    distribute
    /
    distutils
    版本的
    pkg\u资源
    兼容,否则您确实不想这样做)

您是如何运行的?您的
\uuuu init\uuuu
文件在哪里?python3 tests/tests.pyI不创建任何init文件。有必要吗?谢谢!运行python-m测试。测试修复我的测试。但是现在我的代码中的其他导入被破坏了。当我在我的\u项目的其他文件中使用import any\u name时,我需要输入.any\u name,当我运行程序“ImportError:尝试在没有已知父包的情况下进行相对导入”时