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 – 但失败了。
您可以通过三种方式解决此问题:
更改 PYTHONPATH 中目录的顺序。这不是一个真正好的解决方案,因为您现在无法导入 dir1/tests,而不是无法导入 dir2/tests。
重命名 tests 包,使它们具有唯一的名称。
如果 dir1 和 dir2 具有相同的父目录,您可以将该父目录添加到 PYTHONPATH,然后导入myTest 作为 dir1.tests.myTest
.
我的 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.
之前列出了 dir1PYTHONPATH 成为 sys.path
的一部分。导入时 Python 会按照给定的顺序尝试 sys.path
中的目录,直到找到具有匹配名称的 package/module。
在您的示例中,这意味着 Python 首先查看 dir1,从那里找到并导入 tests 包,然后尝试从该包中导入 myTest – 但失败了。
您可以通过三种方式解决此问题:
更改 PYTHONPATH 中目录的顺序。这不是一个真正好的解决方案,因为您现在无法导入 dir1/tests,而不是无法导入 dir2/tests。
重命名 tests 包,使它们具有唯一的名称。
如果 dir1 和 dir2 具有相同的父目录,您可以将该父目录添加到 PYTHONPATH,然后导入myTest 作为
dir1.tests.myTest
.