Apache+mod_wsgi部署cookiecutter-django遇ImportError问题求助
你这明显是踩了包名冲突的坑——安装的第三方config包和Cookiecutter-Django项目自带的config核心包重名了,这直接引发了后续一系列错误。我给你一步步梳理解决办法:
第一步:卸载错误安装的第三方config包
先把这个添乱的包删掉,它完全不是你需要的:
pip uninstall config
这个第三方config包是给Python 2.x设计的,在Python 3.5里本身就有语法兼容问题,更关键的是它的名字和你项目里包含settings的config包完全重复。Python导入模块时会优先找到这个第三方单文件模块,而不是你项目里带__init__.py的config包,所以才会出现'config' is not a package的报错。
第二步:确保Apache/mod_wsgi用对Python环境
你本地python3 manager.py runserver能正常跑,说明开发环境没问题,但Apache大概率没正确加载你的虚拟环境:
- 先检查mod_wsgi绑定的Python版本:执行
mod_wsgi-express module-config,看输出里的Python路径是不是指向你的/usr/local/pulseenv虚拟环境的Python3.5。如果不是,得重新编译mod_wsgi绑定到你的虚拟环境Python。 - 在Apache配置文件里明确指定虚拟环境和项目路径:
# 替换成你的实际项目路径和虚拟环境路径 WSGIDaemonProcess my_django_app python-home=/usr/local/pulseenv python-path=/path/to/your/cookiecutter-project WSGIProcessGroup my_django_app WSGIScriptAlias / /path/to/your/cookiecutter-project/config/wsgi.py <Directory /path/to/your/cookiecutter-project/config> <Files wsgi.py> Require all granted </Files> </Directory>
第三步:确认项目config包结构正确
你的项目根目录下的config文件夹必须有__init__.py(空文件也行),这样Python才会把它识别为合法包。同时检查config/wsgi.py的配置:
import os import sys # 把项目根目录加入Python路径(防止Apache没自动识别) sys.path.append('/path/to/your/cookiecutter-project') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")
第四步:调整文件权限
确保Apache运行用户(通常是www-data或apache)能读取项目所有文件和文件夹:
chown -R www-data:www-data /path/to/your/cookiecutter-project chmod -R 755 /path/to/your/cookiecutter-project
做完这些后重启Apache,应该就能正常加载你的Django项目了。
内容的提问来源于stack exchange,提问作者Brad Rhoads
相关产品推荐
相关产品推荐

