将模块复制到Django中,“没有名为[moduleName]的模块”

0 投票
2 回答
1943 浏览
提问于 2025-04-15 14:34

我经常遇到这个问题……要知道,我对Django还很陌生,Python也只是个小白。

比如说,每次我在新电脑上安装了Python和Django后,查看我的Django项目时,它总是找不到我创建或复制的项目/应用。

现在我有一个正在运行的应用,我下载了一个第三方的Django模块,并把它安装到我的应用目录里,还在设置中包含了它,但网页服务器却因为找不到这个模块而停止工作。

这是我第一次导入第三方模块。以前当找不到我自己创建的模块时,我会重命名文件夹,然后运行“manage.py startapp appname”,再删除它创建的文件夹,把我原来的文件夹名字改回来,这样问题就解决了……

但这显然是个临时解决办法,我想知道到底发生了什么,以及应该怎么正确处理这个问题。

我不可能是唯一遇到这个问题的人,但我在这个网站上找不到其他类似的问题。

这个问题在OS X和Windows 7上都会出现。

2 个回答

0

你的第三方 Django 模块应该可以通过 PYTHONPATH 被找到,因为 Django 模块其实就是一个 Python 模块。现在有两种方法可以做到这一点:

  1. 创建一个文件夹(你可以选择任何地方),把你的第三方 Django 模块放在里面。然后把这个文件夹设置为环境变量 $PYTHONPATH。比如在 Linux 系统上,你可以这样做:

    export PYTHONPATH=/home/me/pythonmodules/

  2. 同样,创建一个文件夹(随便你想放在哪里),把第三方 Django 模块放进去。如果你是在 Unix 系统上,可以创建一个符号链接,把这个文件夹链接到 Python 的 site-packages 目录。你可以用这个命令来找到你的 Python site-packages 目录在哪里:

    python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

2

Django的工作方式和Python的工作方式差不多。当你运行命令django-admin.py startproject name时,系统会创建一个文件夹,这个文件夹会自动加入到你的Python路径中。这意味着你在这个文件夹里放的任何东西都可以被访问到。不过,你需要注意在安装的应用列表中写入应用的名称。如果你的应用放在project/apps/appname这个路径下,你需要在安装的应用列表中写成'app.appname'

现在,有几种方法可以将其他地方的第三方应用添加到你的项目中。你可以把它们添加到你的Python路径中,或者直接放到Python路径里,或者创建一个指向Python路径的链接。不过,你也可以在manage.py文件中添加sys.path.insert(...),这样可以把你喜欢的文件夹添加到Python路径中。这样做的好处是,你只会为这个项目添加文件夹到Python路径,而不会影响到其他项目,让你的Python路径保持更整洁。

撰写回答