簡體   English   中英

從不同的文件夾導入 python 模塊

[英]Import python module from different folder

我有一個包含不同文件夾的解決方案,我想創建一個通用的 package 供他們共享可重用代碼。 有很多python packages的例子。 它們都沒有以簡單的方式解決單獨的文件夾場景。

我的文件夾結構是:

Client/
    __init__.py
    --logic.py
Common/
    __init__.py
    -- Constants.py
Server/
    __init__.py
    -- Test.py

我的Test.py看起來像這樣:

from Common import Constant        
print(Constant.TEST_VALUE)  #-- From common package

但是代碼甚至沒有通過import語句。

Exception has occurred: ModuleNotFoundError No module named 'Common'

如果我嘗試使用相對路徑: from..Common import Constant

錯誤:

Exception has occurred: ImportError attempted relative import with no known parent package

我的目的是為CarsServer解決方案重用constant.py文件。 有一些sys.path的例子,我不確定它是否是一個好習慣。 此外,Common 中的代碼將沒有復雜的代碼來繼續安裝它們。

如果這些包是同一個概念項目的一部分,那么只需制作一個包含 package 的包。 現在,只要您從 package 層次結構外部開始,相對導入就會起作用,並確保包含文件夾位於sys.path 簡單的方法是安裝 package (最好是虛擬環境),或從該文件夾啟動python (在這種情況下CarsCommonServer顯示為單獨的包)或就在外面(在這種情況下,包含文件夾是a package 和CarsCommonServer是子包——這可能是你想要的;它更符合你以后安裝代碼的方式)。

如果這些包是碰巧相互依賴的獨立項目,那么 Python 默認沒有理由在任何特定位置查找依賴包 - 除了它通常查找任何內容的位置。 因此,如果確實存在這樣的包含文件夾,您可以再次從包含文件夾啟動python 但是沒有一個很好的項目組織理由來包含一個包含文件夾 - 所以為每個 package 設置一個實際項目,並將它們全部安裝到相同的虛擬環境中。 現在您可以使用絕對語法(但不能使用相對語法,因為這僅適用於 package 層次結構)進行跨包導入。

您可以使用此處找到的代碼:

# Test.py
import sys
# insert at 1, 0 is the script path (or '' in REPL)
sys.path.insert(1, '/path/to/Cars/')
sys.path.insert(1, '/path/to/Common/')

import Audi
import Constants

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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