在 Django 中导入 python 模块时出错

Posted

技术标签:

【中文标题】在 Django 中导入 python 模块时出错【英文标题】:Error importing a python module in Django 【发布时间】:2010-11-25 09:54:16 【问题描述】:

在我的 Django 项目中,以下行引发 ImportError:“No module named elementtree”。

  from elementtree import ElementTree 

但是,该模块已安装(即,我可以运行交互式 python shell,并键入没有任何 ImportError 的确切行),并且包含该模块的目录位于 PYTHONPATH 上。但是当我在浏览器中访问任何页面时,它以某种方式找不到模块,并抛出 ImportError。这可能是什么原因造成的?

【问题讨论】:

Django 使用的 Python 版本是否与您在 shell 中使用的相同? 好问题。如何找出正在使用的 python django? 【参考方案1】:

你能在 django shell 中导入elementtree吗:

python manage.py shell

假设您有多个 python 版本并且不知道使用哪个版本来运行您的站点,请将以下内容添加到您的视图中并将python_ver 推送到您的模板中,它将显示您正在使用的 Python 版本:

import sys
python_ver = sys.version

您还可以在 settings.py 中以编程方式显式添加 elementtree 的路径:

import sys
sys.path.append('path to where elementtree resides')

【讨论】:

谢谢!使用 sys.path.append() 手动将 elementtree 添加到 python 路径就可以了。 如果你只是在破解这可能会奏效。如果这打算成为生产代码,那么如果您以这种方式破解 sys.path,您的 QA 人员将不会喜欢您。相反,您可能想看看 virtualenvs,它可以让您安装特定版本的 django、elementtree 和其他 python 模块,而不会造成很多混淆。【参考方案2】:

我也遇到过跨平台问题,ElementTree 可以从不同系统上的不同模块中获得......这最终对我有用:

try:
    import elementtree.ElementTree as ET
except:
    import xml.etree.ElementTree as ET

可能对你有帮助,也可能没有帮助......

【讨论】:

【参考方案3】:

进入你的安装目录

例子:

C:\Python26\Lib\site-packages

并检查 elementtree 和 django 是否都在其中。

如果它们都不存在,那么您可能有多个安装目录用于不同版本的 Python。


无论如何,您都可以通过运行以下命令来解决您的问题:

python setup.py 安装

运行两次,一次在 django 的下载中,一次在 elementtree 的下载中。它将两个下载安装到您当前的默认 python 中。

参考文献:

Installation documentation for ElementTree Installation documentation for Django

【讨论】:

elementtree 在我的安装目录($HOME/lib/python/)中,但我想我有多个安装目录(都在PYTHONPATH上,但不知道是否需要做除此之外的任何事情)。我也在使用本地 python(which python 给我 $HOME/local/bin/python,而不是通常的 /usr/bin/python)。 添加了更多关于如何修复的细节。

以上是关于在 Django 中导入 python 模块时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中导入 fastparquet 时 snappy 出错

在python中导入Tkinter时出错[重复]

在 Ubuntu 上的 python 中导入 OOSheet 时出错

在Python中导入BeautifulSoup时出错

在 macOS 10.14.6 上的 Python 3.7.4 中导入 ssl 时出错

在 python 3.4 中导入 tensorflow 时出错“无法加载本机 TensorFlow 运行时”