我的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–失败。
你可以用三种方法来解决这个问题:
-
更改PYTHONPATH中目录的顺序。这不是一个真正好的解决方案,因为您现在无法导入dir2/tests,而不能导入dir1/tests。
-
重命名测试包,使其具有唯一的名称。
-
如果dir1和dir2具有相同的父目录,则可以将该父目录添加到PYTHONPATH,然后将myTest导入为
dir1.tests.myTest
。