将模块复制到Django中,“没有名为[moduleName]的模块”
我经常遇到这个问题……要知道,我对Django还很陌生,Python也只是个小白。
比如说,每次我在新电脑上安装了Python和Django后,查看我的Django项目时,它总是找不到我创建或复制的项目/应用。
现在我有一个正在运行的应用,我下载了一个第三方的Django模块,并把它安装到我的应用目录里,还在设置中包含了它,但网页服务器却因为找不到这个模块而停止工作。
这是我第一次导入第三方模块。以前当找不到我自己创建的模块时,我会重命名文件夹,然后运行“manage.py startapp appname”,再删除它创建的文件夹,把我原来的文件夹名字改回来,这样问题就解决了……
但这显然是个临时解决办法,我想知道到底发生了什么,以及应该怎么正确处理这个问题。
我不可能是唯一遇到这个问题的人,但我在这个网站上找不到其他类似的问题。
这个问题在OS X和Windows 7上都会出现。
2 个回答
你的第三方 Django 模块应该可以通过 PYTHONPATH 被找到,因为 Django 模块其实就是一个 Python 模块。现在有两种方法可以做到这一点:
创建一个文件夹(你可以选择任何地方),把你的第三方 Django 模块放在里面。然后把这个文件夹设置为环境变量 $PYTHONPATH。比如在 Linux 系统上,你可以这样做:
export PYTHONPATH=/home/me/pythonmodules/
同样,创建一个文件夹(随便你想放在哪里),把第三方 Django 模块放进去。如果你是在 Unix 系统上,可以创建一个符号链接,把这个文件夹链接到 Python 的 site-packages 目录。你可以用这个命令来找到你的 Python site-packages 目录在哪里:
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
Django的工作方式和Python的工作方式差不多。当你运行命令django-admin.py startproject name时,系统会创建一个文件夹,这个文件夹会自动加入到你的Python路径中。这意味着你在这个文件夹里放的任何东西都可以被访问到。不过,你需要注意在安装的应用列表中写入应用的名称。如果你的应用放在project/apps/appname这个路径下,你需要在安装的应用列表中写成'app.appname'
。
现在,有几种方法可以将其他地方的第三方应用添加到你的项目中。你可以把它们添加到你的Python路径中,或者直接放到Python路径里,或者创建一个指向Python路径的链接。不过,你也可以在manage.py文件中添加sys.path.insert(...)
,这样可以把你喜欢的文件夹添加到Python路径中。这样做的好处是,你只会为这个项目添加文件夹到Python路径,而不会影响到其他项目,让你的Python路径保持更整洁。