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

2024-04-28 15:44:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个python模块,我正试图使用sys.path.appendsys.path.insertimport。以下是我的代码

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

我有以下文件夹结构

/home/sam/pythonModules/module1/lib/module1.py
/home/sam/pythonModules/module2/lib/module2.py

我可以导入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

然后我可以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

始终只成功导入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

Tags: 模块pathfrompyimporthomelibsam
3条回答

我不知道你为什么选择用sys.insert来处理你的案子。

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

这将覆盖搜索列表中的第二个元素。我想这是我箱子里的当前文件夹。你想要这个吗?

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

添加到当前搜索列表,使其不覆盖任何内容。但它将是最后一个搜索的地方(在搜索完之前的所有地方之后)。例如,如果您有任何同名文件(无论如何都不是一个好主意),它将首先执行。

from lib.module1 import A

您正在从lib文件夹导入,但该文件夹在哪里?从你的结构来看,它不会出现。

您应该可以使用以下命令导入这两个文件:

from module1 import A
from module2 import B

使用sys.path.insert是无用的,除非您想在PYTHONPATH中将项目的优先级排在另一个项目之前。

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 

您的项目module1/module2也应该作为有效的包进行组织,请参阅官方指南:http://docs.python-guide.org/en/latest/writing/structure/

恐怕你不能那样做。

因为结构:

/home/sam/pythonModules/module1/lib/module1.py
/home/sam/pythonModules/module2/lib/module2.py

你不能两个都放:

  • /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

如果在sys.path数组的/home/sam/pythonModules/module2之前放置/home/sam/pythonModules/module1,则import lib.MODULE将在/home/sam/pythonModules/module1/lib中搜索MODULE

因为只有module1而没有module2在其中,您会得到错误。

你能做的就是

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

sys.path中,并希望Python使用下一行正确导入它们:

from module1 import A
from module2 import B

相关问题 更多 >