为什么我的Django项目会抛出一个名为my_project.wsgi的ImportError:no模块?

我正在尝试使用docker-compose来运行本地Django / Nginx项目。

在docker-compose之后,我收到以下错误:

self.wsgi = self.app.wsgi() File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load return self.load_wsgiapp() File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp return util.import_app(self.app_uri) File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app __import__(module) ImportError: No module named my_project.wsgi [2016-11-18 02:58:22 +0000] [9] [INFO] Worker exiting (pid: 9) [2016-11-18 02:58:22 +0000] [1] [INFO] Shutting down: Master [2016-11-18 02:58:22 +0000] [1] [INFO] Reason: Worker failed to boot. 

我不是100%肯定的,但是我相信这条违规的路线是在我的docker – 在这里构成:

 command: /usr/local/bin/gunicorn my_project.wsgi:application -w 2 -b :8000 

这是我完整的Docker-Compose:

 web: restart: always build: ./web expose: - "8000" links: - postgres:postgres - redis:redis volumes: - /usr/src/app - /usr/src/app/static env_file: .env environment: DEBUG: 'true' command: /usr/local/bin/gunicorn my_project.wsgi:application -w 2 -b :8000 nginx: restart: always build: ./nginx/ ports: - "80:80" volumes: - /www/static volumes_from: - web links: - web:web postgres: restart: always image: kartoza/postgis:9.4-2.1 ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data/ redis: restart: always image: redis:latest ports: - "6379:6379" volumes: - redisdata:/data 

我的目录结构:

 docker-compose.yml web/ Dockerfile manage.py my_project/ __init__.py settings.py urls.py wsgi.py accounts_app/ 

我的wsgi.py:

 import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") application = get_wsgi_application() 

我的settings.py:

 import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) SECRET_KEY = os.environ['SECRET_KEY'] ALLOWED_HOSTS=['*'] TEMPLATE_DEBUG = True WSGI_APPLICATION = 'my_project.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': os.environ['POSTGRES_NAME'], 'USER': os.environ['POSTGRES_USER'], 'PASSWORD': os.environ['POSTGRES_PASS'], 'HOST': os.environ['DB_SERVICE'], 'PORT': os.environ['DB_PORT'], } } TIME_ZONE = "UTC" LANGUAGE_CODE = "en-us" SITE_ID = int(os.environ.get("SITE_ID", 1)) 

我不知道从哪里开始解决这个问题,如果有人有任何build议,请让我知道,我可以发布dockerfile实际的Django项目,如果这将有所帮助。

当你尝试import某些东西时,它会search模块的“Pythonpath”。 ( 我已经写了一篇关于virtualenv的文章,解释了Pythonpath的更多内容。)Python包含Pythonpath中的当前目录。 所以当你的当前目录是包含“manage.py”的目录时, import my_project.wsgi工作,因为从那个目录Python可以find文件my_project/wsgi.py Gunicorn从一个不同的目录开始,所以Python找不到它。 您需要在执行gunicorn之前更改目录,或者将PYTHONPATH=[your project root directory]到环境中。