我有两个python模块,我正试图使用sys.path.append
和sys.path.insert
来import
。以下是我的代码
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
我不知道你为什么选择用
sys.insert
来处理你的案子。这将覆盖搜索列表中的第二个元素。我想这是我箱子里的当前文件夹。你想要这个吗?
添加到当前搜索列表,使其不覆盖任何内容。但它将是最后一个搜索的地方(在搜索完之前的所有地方之后)。例如,如果您有任何同名文件(无论如何都不是一个好主意),它将首先执行。
您正在从
lib
文件夹导入,但该文件夹在哪里?从你的结构来看,它不会出现。您应该可以使用以下命令导入这两个文件:
使用
sys.path.insert
是无用的,除非您想在PYTHONPATH
中将项目的优先级排在另一个项目之前。您的项目
module1
/module2
也应该作为有效的包进行组织,请参阅官方指南:http://docs.python-guide.org/en/latest/writing/structure/恐怕你不能那样做。
因为结构:
你不能两个都放:
/home/sam/pythonModules/module1
和/home/sam/pythonModules/module2
在
sys.path
中,Python将发现:module1
在module1/lib
和module2
在module2/lib
中当您尝试导入时,例如:
如果在
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使用下一行正确导入它们:相关问题 更多 >
编程相关推荐