使用 sys.path.append 导入 python 模块

pra*_*tom 4 python python-2.7

我有两个 python 模块,我正在尝试import使用sys.path.appendsys.path.insert。以下是我的代码

import sys
sys.path.insert(1, "/home/sam/pythonModules/module1")
sys.path.append("/home/sam/pythonModules/module2")

from lib.module1 import A
from lib.module2 import B
Run Code Online (Sandbox Code Playgroud)

我有以下文件夹结构

/home/sam/pythonModules/module1/lib/module1.py
/home/sam/pythonModules/module2/lib/module2.py
Run Code Online (Sandbox Code Playgroud)

我可以导入 lib.module1 但不能导入 lib.module2。如果我这样做

import sys
sys.path.insert(1, "/home/sam/pythonModules/module2")
sys.path.append("/home/sam/pythonModules/module1")

from lib.module1 import A
from lib.module2 import B
Run Code Online (Sandbox Code Playgroud)

那么我可以import module2但不能module1

出现上述导入错误的原因可能是什么?

我尝试append而不是insert按照以下方式,但它仍然不起作用

import sys
sys.path.append("/home/sam/pythonModules/module1")
sys.path.append("/home/sam/pythonModules/module2")

from lib.module1 import A
from lib.module2 import B
Run Code Online (Sandbox Code Playgroud)

始终仅sys.path.append成功导入第一个模块。

sys.path.append但我通过以下方式对路径进行了一些更改,然后它就起作用了。两个模块均已成功导入

 import sys
 sys.path.append("/home/sam/pythonModules/module1")
 sys.path.append("/home/sam/pythonModules/module2/lib")

 from lib.module1 import A
 from module2 import B
Run Code Online (Sandbox Code Playgroud)

Ili*_*ija 5

恐怕你不能那样做。

由于结构:

/home/sam/pythonModules/module1/lib/module1.py
/home/sam/pythonModules/module2/lib/module2.py
Run Code Online (Sandbox Code Playgroud)

你不能把两者都放在:

  • /home/sam/pythonModules/module1
  • /home/sam/pythonModules/module2

sys.path期望 Python 会找到:

  • module1module1/lib
  • module2module2/lib

当您尝试导入时:

from lib.module1 import A
from lib.module2 import B
Run Code Online (Sandbox Code Playgroud)

如果您将/home/sam/pythonModules/module1before放入数组/home/sam/pythonModules/module2sys.path,则 thenimport lib.MODULE将搜索MODULEin /home/sam/pythonModules/module1/lib

由于其中只有 onlymodule1和 no module2,因此会出现错误。

你能做的就是把两者都放在

  • /home/sam/pythonModules/module1/lib/
  • /home/sam/pythonModules/module2/lib/

sys.path期望 Python 通过下一行正确导入它们:

from module1 import A
from module2 import B
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是当 Python 搜索“lib”包时,它会在第一个路径中找到它,然后使用该路径来解析子包/模块导入。 (2认同)