2017-03-02 40 views
3

尝试使用apache2和mod_wsgi托管我的django项目。我已经试过各种配置,但要在浏览器访问该网站,例如当越来越导入错误:Apache/Django:ImportError:没有名为'my_project'的模块

Traceback (most recent call last): 
    File "/home/user/projects/my_projectMain/my_project/my_project/wsgi.py", line 19, in <module> 
    application = get_wsgi_application() 
    File "/usr/local/lib/python3.4/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application 
    django.setup(set_prefix=False) 
    File "/usr/local/lib/python3.4/dist-packages/django/__init__.py", line 22, in setup 
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) 
    File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 53, in __getattr__ 
    self._setup(name) 
    File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 41, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 97, in __init__ 
    mod = importlib.import_module(self.SETTINGS_MODULE) 
    File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 2254, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2212, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
    File "<frozen importlib._bootstrap>", line 2254, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked 
ImportError: No module named 'my_project' 

这里是我的目录结构(/家/用户/项目/ my_projectMain /):

-- my_projectEnv\ (virtualenv w/ python 3.5.2, django 1.10, django-bootstrap3, django-static-jquery==2.1.4) 
-- my_project\ 
|-- app\ 
|-- manage.py 
|-- static\ 
|-- my_project\ 
|-- | -- __init__.py 
|-- | -- __pycache__ 
|-- | -- settings.py 
|-- | -- wsgi.py 
`-- | -- urls.py 

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() 

/etc/apache2/sites-available/000-default.conf:

... 
#ServerName www.example.com 

ServerAdmin [email protected] 
DocumentRoot /var/www/html  

Alias /static /home/user/projects/my_projectMain/my_project/static 
     <Directory /home/user/projects/my_projectMain/my_project/static> 
      Require all granted 
     </Directory> 

     <Directory /home/user/projects/my_projectMain/my_project/my_project> 
      <Files wsgi.py> 
       Require all granted 
      </Files> 
     </Directory> 

     WSGIDaemonProcess my_project python-path=/home/user/projects python-home=/home/user/projects/my_projectMain/my_projectEnv 
     WSGIProcessGroup my_project 
     WSGIScriptAlias//home/user/projects/my_projectMain/my_project/my_project/wsgi.py 
... 

我很担心我的目录结构是问题,但也看到很多与wsgi.py中路径相关的其他帖子不正确。


编辑: 如果我改变的python-路径:

WSGIDaemonProcess my_project python-path=/home/user/projects/my_projectMain/my_project/my_project 

我得到:

Traceback (most recent call last): 
    File "/home/user/projects/my_projectMain/my_project/my_project/wsgi.py", line 25, in <module> 
    application = get_wsgi_application() 
    File "/usr/local/lib/python3.4/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application 
    django.setup(set_prefix=False) 
    File "/usr/local/lib/python3.4/dist-packages/django/__init__.py", line 27, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/usr/local/lib/python3.4/dist-packages/django/apps/registry.py", line 85, in populate 
    app_config = AppConfig.create(entry) 
    File "/usr/local/lib/python3.4/dist-packages/django/apps/config.py", line 90, in create 
    module = import_module(entry) 
    File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 2254, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked 
ImportError: No module named 'django_static_jquery' 
  1. 这是否意味着我已经得到了过去,它不能够导入my_project?
  2. 我已经运行了collectstatic并确保static_jquery在我的STATIC_ROOT中,它怎么能不能导入已安装的应用程序?
+0

可能不相关,但不能将Python 3.4编译的mod_wsgi与使用Python 3.5构建的Python虚拟环境配合使用。混合这些流是不好的,会导致各种问题。请参阅http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html,它会对此提出警告。 –

+0

我也注意到了,只要您认为它与上述问题无关,我会稍后再解决。 – brewcrazy

+0

我会先修复它。如果没有正确匹配,没有保证。还要检查你的目录/文件是否具有Apache运行的用户可访问的权限。 –

回答

0

在Apache的配置,WSGIDaemonProcess指令:

python-path是不正确或不完整的。对于my_project是可导入的,您必须将/home/pi/projects/my_projectMain/my_project添加到python路径。

例如:在该文件中

WSGIDaemonProcess my_project python-path=/home/user/projects/my_projectMain/my_project python-home=/home/user/projects/my_projectMain/my_projectEnv 

仔细检查所有的配置,它可能是pi,而不是user最多的地方。包括上面的行。

+0

用户在我的文件中适合任何地方。我只是尝试泛化上面的所有内容,并错过了堆栈跟踪中的一行。 – brewcrazy

+0

'WSGIDaemonProcess my_project python-path =/home/user/projects/my_projectMain/my_project'会产生相同的错误:ImportError:没有名为'my_project'的模块 – brewcrazy

+0

只检查你是否改变了它:它应该是'pi'以及 – spectras