2015-09-25 83 views
3

導入模塊我有一個Python 3項目多數民衆贊成結構是這樣的:無法從同級目錄

/project 
    __init__.py 
    /models 
     __init__.py 
     my_model.py 
     base_model.py 
    /tests 
     __init__.py 
     test.py 

test.py我想導入my_model。我的第一次嘗試是from models import my_model,它投了一個ImportError: No module named 'models'This question建議將__init__.py文件添加到每個目錄,這沒有幫助。 Another post說要修改與路徑:

import sys; import os 
sys.path.insert(0, os.path.abspath('..')) 

但是,這將引發一個錯誤,當my_model,嘗試從base_model進口。

這看起來很簡單,但我很難過。有沒有人有任何想法?

回答

1

使用絕對導入無處不在:from project.models import my_model,應該可以在您項目的任何地方都能正常工作,也不需要混淆路徑。

+0

當我從'project.models'導入時,我仍然得到'ImportError'。我三重檢查了根文件夾是否有'__init __。py'和一切。 – Rob

+1

''測試/''還有''__init __。py''嗎?我現在注意到它在您的列表中缺失。 – proycon

+0

儘管我有點承諾不會弄亂路徑,你的項目目錄的父目錄應該在你的''PYTHONPATH''(或''sys.path.insert()''它) – proycon

0

添加同級目錄sys.path應該工作:

import sys, os 
sys.path.insert(0, os.path.abspath('../models')) 
import my_model 
1

答案取決於你如何啓動test.py. 我知道做相對導入的唯一方法是將文件放入包中。爲了讓Python解釋器知道你在包中是以某種方式導入它的。

用途:

from ..models import my_model 
在test.py

,並推出以下項目文件夾中的Python解釋器。

然後,您將能夠無誤地導入project.tests.test。

+0

我直接啓動test.py從命令行。當我嘗試'從..models導入my_model'時,它給我一個錯誤'父模塊''未加載,不能執行相對導入'。我確保根目錄有一個'__init __。py'文件。 – Rob