Django的INSTALLED_APPS无法识别已安装的自定义PyPi包是什么原因
PyPI安装自定义DRF包后出现ModuleNotFoundError的排查方案
以下是优先级从高到低的排查方向:
- 包名与导入名不匹配:这是最常见的问题。PyPI上的分发包名(你
pip install的名称,比如drf-custom-tools)和实际可导入的模块名可以完全不同,很多开发者会把分发包名用横杠命名,实际模块名用下划线命名(比如实际导入名是drf_custom_tools)。你需要确认site-packages下的文件夹名称,INSTALLED_APPS里必须填这个文件夹的准确名称,而不是你上传到PyPI的分发包名。 setup.py/pyproject.toml的包路径配置错误:- 检查是否正确声明了要打包的模块:如果你用setuptools,需要确认是否调用了
find_packages(),或者手动填写的packages列表包含了你的DRF应用模块 - 如果你的应用代码放在
src/目录下,必须额外配置package_dir={"": "src"},否则打包后会把src目录直接打包到分发包中,安装后模块路径会变成src.你的应用名而不是直接的应用名
- 检查是否正确声明了要打包的模块:如果你用setuptools,需要确认是否调用了
- 缺失
__init__.py文件:Django识别INSTALLED_APPS中的应用时,要求应用根目录下必须存在__init__.py文件(可以是空文件),如果你打包时遗漏了这个文件,即使文件夹存在也会被识别为普通目录而非Python模块。 - 打包命令错误导致构建产物异常:你第三步的构建命令拼写错误,正确命令是
python setup.py bdist_wheel sdist,你误写为sdit,可能导致wheel包的结构异常。你可以本地解压生成的.whl文件,直接检查内部的目录结构是否符合预期。 - 大小写或拼写错误:类Unix系统(Linux、macOS)的文件系统是大小写敏感的,如果你本地Windows开发时写的是
MyDrfApp,实际打包的模块名是mydrfapp,大小写不匹配就会报错。另外也需要确认INSTALLED_APPS中填写的名称没有拼写错字符。 - 虚拟环境冲突:确认你安装包用的虚拟环境,和运行Django项目用的是同一个虚拟环境,避免安装到全局Python环境而项目用的是虚拟环境导致找不到包。
内容的提问来源于stack exchange,提问作者Jeet Patel
相关产品推荐
相关产品推荐

