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



我的PYTHONPATH中有两个文件夹。

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

当尝试从第二个"tests"子文件夹导入时,我得到ImportError。

如何解决这一问题?

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

我得到ImportError:

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中的目录,直到找到具有匹配名称的包/模块。

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

你可以用三种方法来解决这个问题:

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

  2. 重命名测试包,使其具有唯一的名称。

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

最新更新