Apache/Django: ImportError: No module named 'my_project'
Apache/Django: ImportError: No module named 'my_project'
正在尝试使用 apache2 和 mod_wsgi 托管我的 django 项目。我尝试了各种配置,但在浏览器中访问该站点时不断出现导入错误,例如:
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'
这是我的目录结构(/home/user/projects/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 webmaster@localhost
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-path 更改为:
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'
- 这是否意味着我已经克服了无法导入的问题 my_project?
- 我已经 运行 collectstatic 并确保 static_jquery 在我的 STATIC_ROOT 中,它怎么可能无法导入已安装的应用程序?
在 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
。包括上面那行。
我做错了一些事情,导致了我遇到的错误。其中一些对于更有经验的用户来说可能是显而易见的,但希望写下这些课程可以帮助其他人。我知道我必须深入挖掘许多人的位置才能弄清楚其中的一些东西。
我了解到一旦设置了 virtualenv (virtualenv -p /usr/local/bin/python3 <path/to/new/virtualenv/>
顺便说一下),你应该只使用 pip
和 python
(而不是 pip3
和 python3
分别),而 virtualenv 处于活动状态。例如:
(venv) user my_projectMain $ pip install django-bootstrap3
而不是:
(venv) user my_projectMain $ pip3 install django-bootstrap3
我的问题编辑显示我为我的目录结构找到了正确的 WSGIDaemonProcess python 路径。感谢@spectras 的帮助。
接下来是一些文件系统权限设置步骤,我在遵循的指南(link 下面)中完全忽略了这些步骤。
所有这些之后,我仍然得到:ImportError: No module named 'django_static_jquery'
。如果我在 settings.py 中从我的 INSTALLED_APPS 中删除该行,则该站点将正确加载。
最终,这是因为我在我的 Python 3.5.2 virtualenv 中使用针对 Python 3.4 编译的 mod_wsgi,正如上面提到的 @Graham Dumpleton。我一直在安装 mod_wsgi 使用:
sudo apt-get install libapache2-mod-wsgi-py3
它正在使用我的 OS(raspbian 杰西,顺便说一句)附带的 Python 3.4。
但是,由于我手动安装了 Python 3.5.2,因此我还需要手动安装 mod_wsgi 并针对我的 3.5.2 安装进行编译。这是我所做的:
mkdir ~/mod_wsgiPy3.5
cd ~/mod_wsgiPy3.5
wget https://pypi.python.org/packages/84/65/44a10ac5e117abc40078575a3dcf3256545ba20495b7330ba59045ec3503/mod_wsgi-4.5.9.tar.gz
tar -zxvf mod_wsgi-4.5.9.tar.gz
cd mod_wsgi-4.5.9/
./configure --with-python=/usr/local/bin/python3
make
sudo make install
在此之后,apache 不会重新启动,因为 .我发现这是因为我必须在 apache 中激活这个新安装的 mod_wsgi 模块。这是通过以下方式完成的:
sudo a2enmod
wsgi
sudo systemctl restart apache2
/etc/apache2/sites-available/000-default.conf:
...
WSGIDaemonProcess my_project python-path=/home/user/my_projectMain/my_project/my_project python-home=/home/user/my_projectMain/venv
WSGIProcessGroup my_project
WSGIScriptAlias / /home/user/my_projectMain/my_project/my_project/wsgi.py
...
最终目录结构(~/my_projectMain/):
.
├── my_project
│ ├── app
│ ├── db.sqlite3
│ ├── manage.py
│ ├── my_project
│ └── static
└── venv
现在一切正常。我推荐这个指南,因为它帮助了我很多:How To Serve Django Applications with Apache and mod_wsgi on Debian 8。看起来他们有一些用于各种 OSs
正在尝试使用 apache2 和 mod_wsgi 托管我的 django 项目。我尝试了各种配置,但在浏览器中访问该站点时不断出现导入错误,例如:
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'
这是我的目录结构(/home/user/projects/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 webmaster@localhost
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-path 更改为:
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'
- 这是否意味着我已经克服了无法导入的问题 my_project?
- 我已经 运行 collectstatic 并确保 static_jquery 在我的 STATIC_ROOT 中,它怎么可能无法导入已安装的应用程序?
在 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
。包括上面那行。
我做错了一些事情,导致了我遇到的错误。其中一些对于更有经验的用户来说可能是显而易见的,但希望写下这些课程可以帮助其他人。我知道我必须深入挖掘许多人的位置才能弄清楚其中的一些东西。
我了解到一旦设置了 virtualenv (virtualenv -p /usr/local/bin/python3 <path/to/new/virtualenv/>
顺便说一下),你应该只使用 pip
和 python
(而不是 pip3
和 python3
分别),而 virtualenv 处于活动状态。例如:
(venv) user my_projectMain $ pip install django-bootstrap3
而不是:
(venv) user my_projectMain $ pip3 install django-bootstrap3
我的问题编辑显示我为我的目录结构找到了正确的 WSGIDaemonProcess python 路径。感谢@spectras 的帮助。
接下来是一些文件系统权限设置步骤,我在遵循的指南(link 下面)中完全忽略了这些步骤。
所有这些之后,我仍然得到:ImportError: No module named 'django_static_jquery'
。如果我在 settings.py 中从我的 INSTALLED_APPS 中删除该行,则该站点将正确加载。
最终,这是因为我在我的 Python 3.5.2 virtualenv 中使用针对 Python 3.4 编译的 mod_wsgi,正如上面提到的 @Graham Dumpleton。我一直在安装 mod_wsgi 使用:
sudo apt-get install libapache2-mod-wsgi-py3
它正在使用我的 OS(raspbian 杰西,顺便说一句)附带的 Python 3.4。
但是,由于我手动安装了 Python 3.5.2,因此我还需要手动安装 mod_wsgi 并针对我的 3.5.2 安装进行编译。这是我所做的:
mkdir ~/mod_wsgiPy3.5
cd ~/mod_wsgiPy3.5
wget https://pypi.python.org/packages/84/65/44a10ac5e117abc40078575a3dcf3256545ba20495b7330ba59045ec3503/mod_wsgi-4.5.9.tar.gz
tar -zxvf mod_wsgi-4.5.9.tar.gz
cd mod_wsgi-4.5.9/
./configure --with-python=/usr/local/bin/python3
make
sudo make install
在此之后,apache 不会重新启动,因为 .我发现这是因为我必须在 apache 中激活这个新安装的 mod_wsgi 模块。这是通过以下方式完成的:
sudo a2enmod
wsgi
sudo systemctl restart apache2
/etc/apache2/sites-available/000-default.conf:
...
WSGIDaemonProcess my_project python-path=/home/user/my_projectMain/my_project/my_project python-home=/home/user/my_projectMain/venv
WSGIProcessGroup my_project
WSGIScriptAlias / /home/user/my_projectMain/my_project/my_project/wsgi.py
...
最终目录结构(~/my_projectMain/):
.
├── my_project
│ ├── app
│ ├── db.sqlite3
│ ├── manage.py
│ ├── my_project
│ └── static
└── venv
现在一切正常。我推荐这个指南,因为它帮助了我很多:How To Serve Django Applications with Apache and mod_wsgi on Debian 8。看起来他们有一些用于各种 OSs