[英]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
我的目的是為Cars
和Server
解決方案重用constant.py
文件。 有一些sys.path
的例子,我不確定它是否是一個好習慣。 此外,Common 中的代碼將沒有復雜的代碼來繼續安裝它們。
如果這些包是同一個概念項目的一部分,那么只需制作一個包含 package 的包。 現在,只要您從 package 層次結構外部開始,相對導入就會起作用,並確保包含文件夾位於sys.path
上。 簡單的方法是安裝 package (最好是虛擬環境),或從該文件夾啟動python
(在這種情況下Cars
, Common
和Server
顯示為單獨的包)或就在外面(在這種情況下,包含文件夾是a package 和Cars
、 Common
和Server
是子包——這可能是你想要的;它更符合你以后安裝代碼的方式)。
如果這些包是碰巧相互依賴的獨立項目,那么 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.