在 Django 中使用 Python 的 importlib 时"No module"错误 - 路径有问题吗?



我在我的django项目中对python的 importlib做错了什么,但无法弄清楚。我认为与我不了解的道路有关。

当我将这些语句添加到我的项目的views.py文件时,说明了错误的最简单示例:

import test32                          # a file I created.  Is legal Python.
import importlib                       # Django is using Python 2.7
importlib.import_module                # confirms that the method exists
#importlib.import_module( 'test32' )

这可以正常工作,直到我删除最后一行为止。然后我有一个错误:

ImportError at /
No module named test32
Request Method:     GET
Request URL:    http://localhost:4321/
Django Version:     1.8
Exception Type:     ImportError
Exception Value:    
No module named test32
Exception Location:     /Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/importlib/__init__.py in import_module, line 37
Python Executable:  /Volumes/project663/bin/python
Python Version:     2.7.3
Python Path:    
['/Volumes/project663/overall_project',
 '/Volumes/project663/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
 '/Volumes/project663/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg',
 '/Volumes/project663/lib/python2.7/site-packages/Django-1.8-py2.7.egg',
 '/Volumes/project663/lib/python27.zip',
 '/Volumes/project663/lib/python2.7',
 '/Volumes/project663/lib/python2.7/plat-darwin',
 '/Volumes/project663/lib/python2.7/plat-mac',
 '/Volumes/project663/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Volumes/project663/lib/python2.7/lib-tk',
 '/Volumes/project663/lib/python2.7/lib-old',
 '/Volumes/project663/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Volumes/project663/lib/python2.7/site-packages']

我尝试了import_module语句的许多变体,并在名称之前使用点,并使用package关键字,但它们都没有用。这种方法不难使用,所以我敢肯定我缺少明显的东西。

我真正想做的是将test32.py放在子目录中,但首先我想在与views.py相同的目录中使用它。

谢谢!

一种可能性是,在Python 2中,您仍然可以使用

进行相对导入
import test32

语法,这与importlib无法使用。Python 2.7的importlib文档说:

此模块是更多可用的次数 来自Python 3.1的同名包装的完整包装 进口的完整实施。这里提供了什么 帮助简化从2.7到3.1。

我读到,作为importlib的功能,就像Python3的import一样,在其中应使用点syntax明确指定相对导入。

所以类似:

importlib.import_module('.test32', 'full.app.path')

可以工作。请注意" Test32"前面的点,我不知道您的完整应用路径,但是它会像'ProjectName.AppName'一样(基本上,Django Project中其他地方使用的导入。

<</p>

相关内容

最新更新