我的目錄結構是這樣的Python的進口問題,我有
main/src/domain/entities.py
-entities.py has some classes
main/tests/test.py
在
test.pt
我從domain.entities import MyCLass
兩個測試和域目錄的有有__init__.py
的。
雖然沒有找到我想要的模塊。 我運行test.py與python3 test.py
任何想法爲什麼?
我的目錄結構是這樣的Python的進口問題,我有
main/src/domain/entities.py
-entities.py has some classes
main/tests/test.py
在
test.pt
我從domain.entities import MyCLass
兩個測試和域目錄的有有__init__.py
的。
雖然沒有找到我想要的模塊。 我運行test.py與python3 test.py
任何想法爲什麼?
是sys.path中的main/src嗎? Python通過搜索sys.path中的目錄來解析模塊名稱。例如「import ../module.py」無效。要解決你的問題做這樣的事情:在你的「主/測試/ test.py」文件中加入:
import sys, os
sys.path.insert(0, os.path.abspath("../src"))
# Then try
from domain.entries import MyClass
您還需要確保主/ src目錄/域包含INIT的.py文件。 你也不需要init .py在main/tests中,除非你要將它的父目錄添加到你的路徑並導入tests.something。
希望這會有所幫助。
從我寫的內容不清楚,但基本上爲了導入「some_module」,包含目錄「some_module」的目錄需要在sys.path中,而不是「some_module」本身。 – 2012-01-10 02:35:20
感謝您的回覆,除了sys.path.insert()之外,還有更簡單更優雅的方法嗎? – 2012-01-10 02:39:54
這只是你需要習慣於python的東西。需要注意的是,如果你在目錄src的unix上嘗試類似'export PYTHONPATH ='pwd''的東西,那麼你可以設置一個名爲PYTHONPATH的環境變量。我通常會將它放在一個vars.sh文件中,然後將其源代碼。但那也不完美。請注意,如果您導入當前模塊的子項,則上述技巧不是必需的,因此您可能希望將該代碼放入tests/utils.py,然後將導入實用程序作爲任何測試文件的第一行,放在#!之後。當然線。 – 2012-01-10 02:48:53
您需要__ini__.py
在每個目錄包
main/__init__.py
main/src/__init__.py
main/src/domain/__init__.py
main/src/domain/entities.py
main/tests/__init__.py
我在每個目錄中都嘗試過它,但仍無法正常工作 – 2012-01-10 02:43:38
這是容易得多利用的sys.path內,但如果你想不涉及與全局搞亂,然後在這裏它的解決方案是。
__init__.py
文件包含在與要導入的模塊相同的文件夾中。from path.to.file.filename import MyClass
我測試過這種特殊的方法片刻之前。我的文件夾層次結構是main.py
和兩個嵌套文件夾domains/entities
。 每個文件夾除最高級別(即main.py
所在的級別)之外都有一個__init__.py
文件。
畫報:
main.py
project/
__init__.py
domains/
__init__.py
entities/
__init__.py
module1.py
後您使用的是進口的聲明以及代碼。 – Makoto 2012-01-10 02:24:35
我正在使用domains.entities導入MyClass,但嘗試過所有變種 – 2012-01-10 02:40:30