使用sys.path.append导入python模块
我有两个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
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时,它会在第一个路径中找到它,然后使用该路径解析子包/模块导入。