如何在“没有名为 xyz 的模块”错误上获得更多诊断输出?

kjo*_*kjo 5 python django

我在本地目录中有一个 django 项目,当我从本地 django 服务器运行它时可以正常工作,如

python manage.py runserver.py 8000
Run Code Online (Sandbox Code Playgroud)

但是,如果我克隆该项目所在的本地 git 存储库(并且是最新的),如下所示:

git clone my_django_project my_django_project_clone
Run Code Online (Sandbox Code Playgroud)

我从克隆的目录中尝试了上面相同的命令,服务器立即失败:

Error: No module named xyz
Run Code Online (Sandbox Code Playgroud)

服务器根本不产生其他输出,即使我使用-v 3标志运行它。

有没有办法获得更多关于为什么这个(据说)工作 django 站点的相同克隆失败的诊断信息?

Mik*_*maa 4

这就是我解决问题的方法

  1. 启动交互式 Python 提示符

     python -vvv   # -vvv notes to print out import trace information
    
    Run Code Online (Sandbox Code Playgroud)
  2. 类型

     import xyz
    
    Run Code Online (Sandbox Code Playgroud)

如果有效,则意味着该模块是有效的 Python 安装。如果它不适用于 Django,那么可能是循环导入的问题以及 Django 初始化代码本身的问题。settings.pyDjango 在读取文件、扫描所有 Django 应用程序等时做了很多幕后魔法,因此循环导入通常是 Python 无法加载模块的原因。另外,这也可能是 Django 吞咽了原始ImportError异常,并且在初始化 Django 时不打印嵌套异常,而实际上是错误的。在这种情况下,手动输入import xyz应该会显示真正的错误。

  1. 如果模块加载失败,那么下一步就是输入

    import sys
    for p in sys.path: print(p)  # print p for Python 2.x
    
    Run Code Online (Sandbox Code Playgroud)

这将显示 Python 拉入模块的所有目录。您的模块可能不在这些目录中的任何一个中,因此您需要确保

A) 您将自己的模块附加到 Python sys.path 列表或正确使用PYTHONPATH环境变量来加载您自己的包。设置路径可能取决于 Django 版本、Python 版本以及 Django 的运行方式。例如,您运行manage.py命令的当前工作目录可能包含也可能不包含。如果该模块位于当前文件夹中,您可以尝试以下操作:

   PYTHONPATH=. python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

B) 您正确安装了第三方软件包。安装第三方Python包的正确方法是为您的开发项目使用pip具有隔离Python环境的工具virtualenv。如果您将 Python 包安装到系统范围的 Python 安装(/usr/lib/python在 UNIX 上),尤其是使用sudo pip,则不能保证结果有效。