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

使用sys.path.append导入python模块,python,python-2.7,Python,Python 2.7,我有两个python模块,我正试图使用sys.path.append和sys.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 我有以下文件夹结构 /home/s

我有两个python模块,我正试图使用
sys.path.append
sys.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
我有以下文件夹结构

/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
然后我可以
导入模块2
,但不能
导入模块1

上述导入错误的原因是什么

我试着用下面的方式添加
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

仅当您希望在
PYTHONPATH
中优先于另一个项目时,才使用
sys.path.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 

您的项目
module1
/
module2
也应作为有效的包进行结构化,请参见官方指南:

我不确定您为什么选择使用
sys.insert

sys.path.insert(1, "/home/sam/pythonModules/module1")
这将覆盖搜索列表中的第二个元素。我想这是我的当前文件夹(在pyCharm中)。你想要这个吗

sys.path.append("/home/sam/pythonModules/module2")
添加到当前搜索列表,使其不会覆盖任何内容。但它将是最后一个搜索的地方(在搜索所有以前的搜索之后)。例如,如果您有任何同名的文件(无论如何这不是一个好主意),它将首先执行

from lib.module1 import A
您正在从
lib
文件夹导入,但该文件夹在哪里?从您的结构来看,它不会出现

您应该能够使用以下方法导入这两种内容:

from module1 import A
from module2 import B

恐怕你不能那样做

由于结构原因:

/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能够找到:

  • module1/lib中的
    module1
  • module2/lib中的
    module2
当您尝试导入时,如:

from lib.module1 import A
from lib.module2 import B
如果在
sys.path
数组中将
/home/sam/pythonModules/module1
放在
/home/sam/pythonModules/module2
之前,则
import lib.MODULE
将在
/home/sam/pythonModules/module1/lib
中搜索
模块

因为其中只有
module1
而没有
module2
,所以会出现错误

你能做的就是把两者都放进去

  • /home/sam/pythonModules/module1/lib/
  • /home/sam/pythonModules/module2/lib/
sys.path
中,希望Python能正确地导入它们,并在下一行:

from module1 import A
from module2 import B

sys.path
上同时使用
append
insert
有什么原因吗?lib在哪里?我在文件夹结构中犯了一个错误。我已经改正了,我试过了,但没用。只有第一个模块导入成功。您是否在
/lib
包中有
\uuuu init\uuuuuuuuuupy
模块?是的,我在
/lib
包中有空的
/sam/pythonModules/module1
/home/sam/pythonModules/module2
都是不同的路径名。是的,但是当Python搜索
lib
package时,它会在第一个路径中找到它,然后使用该路径解析子包/模块导入。