[英]import python module using sys.path.append
我有兩個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
但不能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
恐怕您不能那樣做。
由於結構:
/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
在module1/lib
和 module2
在module2/lib
當您嘗試像這樣導入時:
from lib.module1 import A
from lib.module2 import B
如果將/home/sam/pythonModules/module1
/home/sam/pythonModules/module2
放在sys.path
數組中的/home/sam/pythonModules/module2
之前,則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
僅當您要在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
也應構造為有效的程序包,請參見官方指南: http : //docs.python-guide.org/en/latest/writing/structure/
我不確定您為什么選擇使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.