ImportError - 具有相同子文件夹的 PYTHONPATH

ImportError - PYTHONPATH with same subfolders

我的 PYTHONPATH 中有 2 个文件夹。

两个文件夹都有子文件夹 "tests"。

尝试从第二个 "tests" 子文件夹导入时,出现导入错误。

如何解决?

PYTHONPATH = /dir1:/dir2

ll /dir1
drwxrwxr-x  3 me me 4096 tests

ll /dir1/tests
-rw-rw-r--  1 me me 0    __init__.py

ll /dir2
drwxrwxr-x  3 me me 4096 tests

ll /dir2/tests
-rw-rw-r--  3 me me 4096 myTest
-rw-rw-r--  1 me me 0    __init__.py

尝试导入 myTest 时:

import tests.myTest

我收到导入错误:

Traceback (most recent call last):
  File "./tmp.py", line 3, in <module>
    import tests.myTest
ImportError: No module named myTest

眼前的问题是您在 dir2.

之前列出了 dir1

PYTHONPATH 成为 sys.path 的一部分。导入时 Python 会按照给定的顺序尝试 sys.path 中的目录,直到找到具有匹配名称的 package/module。

在您的示例中,这意味着 Python 首先查看 dir1,从那里找到并导入 tests 包,然后尝试从该包中导入 myTest – 但失败了。

您可以通过三种方式解决此问题:

  1. 更改 PYTHONPATH 中目录的顺序。这不是一个真正好的解决方案,因为您现在无法导入 dir1/tests,而不是无法导入 dir2/tests

  2. 重命名 tests 包,使它们具有唯一的名称。

  3. 如果 dir1dir2 具有相同的父目录,您可以将该父目录添加到 PYTHONPATH,然后导入myTest 作为 dir1.tests.myTest.