使用Pants构建Django时出现ModuleNotFoundError问题求助
解决Pantsbuild中Django项目的django-filter/django-cors-headers模块找不到问题
问题出在Pantsbuild的依赖管理机制——它不会自动识别你本地安装的Python包,必须显式在BUILD文件中声明所有依赖,才能让Pants将这些包打包到运行环境的PEX文件里。DRF能正常工作大概率是因为它被某个已声明的依赖间接引入了,但django-filter和django-cors-headers需要你手动添加依赖声明。
修改你的BUILD文件如下:
python_requirement( name="django", requirements=["django==4.1.1"], ) # 添加django-filter的依赖声明 python_requirement( name="django-filter", requirements=["django-filter==23.3"], # 替换为你实际使用的版本 ) # 添加django-cors-headers的依赖声明 python_requirement( name="django-cors-headers", requirements=["django-cors-headers==4.2.0"], # 替换为你实际使用的版本 ) python_sources( name="lib", dependencies=[ ":django", ":django-filter", # 新增依赖 ":django-cors-headers", # 新增依赖 "//src/jango/jango", ], ) pex_binary( name="manage", entry_point="manage.py", restartable=True, )
关键说明:
- 每个第三方Python包都需要通过
python_requirement目标声明版本 - 必须将声明好的依赖添加到对应的
python_sources或pex_binary的dependencies列表中,确保Pants构建时包含这些包 - 如果你不确定依赖的具体版本,可以查看你的
requirements.txt(如果有的话),或者直接运行pip show django-filter获取版本号
修改完成后,重新执行./pants run src/jango:manage -- runserver即可解决模块找不到的问题。
内容的提问来源于stack exchange,提问作者Tab
相关产品推荐
相关产品推荐

