簡體   English   中英

使用sys.path.append導入python模塊

[英]import python module using sys.path.append

我有兩個python模塊,我正在嘗試使用sys.path.appendsys.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將找到:

  • module1module1/lib
  • module2module2/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM