Python 从子文件夹引用Django应用程序

Python 从子文件夹引用Django应用程序,python,django,Python,Django,我引用的是一个Python填充脚本中的Django应用程序 当填充脚本与my_project放在同一个文件夹中时,效果很好,如下所示: if __name__ == '__main__': print "Starting population script..." os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings') from persons.models import Person,

我引用的是一个Python填充脚本中的Django应用程序

当填充脚本与
my_project
放在同一个文件夹中时,效果很好,如下所示:

if __name__ == '__main__':
    print "Starting population script..."
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')
    from persons.models import Person, Contact
    populate()
但现在我正试图将我的填充脚本(它不是Django应用程序)移动到名为
population/
的子文件夹中。尝试此操作时会引发以下错误:

导入错误:没有名为persons.models的模块

因此,我尝试将导入更改为绝对导入:
从我的_project.persons.models导入人员,联系

然而,这会产生导入错误:没有名为my_project.persons.models的模块

我也尝试了相对导入,来自.my_project.persons.models import Person,联系人,但这会产生
ValueError:尝试在非包中进行相对导入

我做错了什么


我正在Windows下的virtualenv中使用Django 1.6和Python 2.7。

通过编辑编辑我的答案,以下是解决方案:

 #append the app path to your PYTHONPATH before the import
 import sys
 import os

 sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

这里似乎没有任何Django特有的东西,看起来你只是没有适当地设置你的
PYTHONPATH
。你在使用virtualenv吗?@Dorian:是的,我在使用virtualenv。让我更新这个问题。当你启动脚本时,你是否在你的虚拟环境中?或者在任何情况下,您是使用您的virtualenv python解释器启动它,还是仅使用默认解释器?@Dorian:启动脚本时,我可以确认我使用的是正确的virtualenv。注意:当脚本不在populate/子文件夹中(但与Django应用程序位于同一文件夹中)时,它会正常工作。