Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django can';找不到本地安装的Python模块_Python_Django_Apache - Fatal编程技术网

Django can';找不到本地安装的Python模块

Django can';找不到本地安装的Python模块,python,django,apache,Python,Django,Apache,我正在运行一个基于Django的网站,该网站托管在共享服务器上(即,我只有一个有限的帐户,没有管理员权限)。服务器管理员安装了Python2.7的Django模块,但现在我想添加一个我找到的第三方Django库,名为Django bleach。所以我在本地安装了它,使用 pip install --user django-bleach 然后,按照说明,我在settings.py中将“django漂白剂”添加到我的已安装应用程序列表中。然而,当我点击wsgi.py让Apache重新加载我的代码时

我正在运行一个基于Django的网站,该网站托管在共享服务器上(即,我只有一个有限的帐户,没有管理员权限)。服务器管理员安装了Python2.7的Django模块,但现在我想添加一个我找到的第三方Django库,名为Django bleach。所以我在本地安装了它,使用

pip install --user django-bleach
然后,按照说明,我在
settings.py
中将“django漂白剂”添加到我的已安装应用程序列表中。然而,当我点击
wsgi.py
让Apache重新加载我的代码时,我的Apache日志中出现了一个ImportError。通常这意味着我尝试导入的模块不在PYTHONPATH中,因此我在
wsgi.py
中放置了
print sys.path
语句。情况就是这样:

[Mon Nov 24 13:44:58 2014] [error] sys.path is: ['/extra/www/html/quotes/quotes_django', '/opt/rh/python27/root/usr/lib64/python2.7/site-packages', 
'/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', 
'/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages', '/users/ejt64/.local/lib/python2.7/site-packages',
'/users/ejt64/.local/lib/python2.7/site-packages', '/users/ejt64/.local/lib/python2.7/site-packages']
[Mon Nov 24 13:44:58 2014] [error] mod_wsgi (pid=29372): Target WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py' cannot be loaded as Python module.
[Mon Nov 24 13:44:58 2014] [error] mod_wsgi (pid=29372): Exception occurred processing WSGI script '/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py'.
[Mon Nov 24 13:44:58 2014] [error] Traceback (most recent call last):
[Mon Nov 24 13:44:58 2014] [error]   File "/extra/www/html/quotes/quotes_django/quotes_django/wsgi.py", line 17, in <module>
[Mon Nov 24 13:44:58 2014] [error]     application = get_wsgi_application()
[Mon Nov 24 13:44:58 2014] [error]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Mon Nov 24 13:44:58 2014] [error]     django.setup()
[Mon Nov 24 13:44:58 2014] [error]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/django/__init__.py", line 21, in setup
[Mon Nov 24 13:44:58 2014] [error]     apps.populate(settings.INSTALLED_APPS)
[Mon Nov 24 13:44:58 2014] [error]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/django/apps/registry.py", line 85, in populate
[Mon Nov 24 13:44:58 2014] [error]     app_config = AppConfig.create(entry)
[Mon Nov 24 13:44:58 2014] [error]   File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/django/apps/config.py", line 87, in create
[Mon Nov 24 13:44:58 2014] [error]     module = import_module(entry)
[Mon Nov 24 13:44:58 2014] [error]   File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
[Mon Nov 24 13:44:58 2014] [error]     __import__(name)
[Mon Nov 24 13:44:58 2014] [error] ImportError: No module named django_bleach
但是我的Django应用程序不知何故找不到Django_漂白模块,即使它在正确的位置

附加信息:My
wsgi.py
只是由
django admin startproject
生成的标准信息,外加一条打印语句:

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "quotes_django.settings")

import sys
print >>sys.stderr, "sys.path is: " + str(sys.path)

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
相对于运行apache的用户。哪个用户正在运行apache?通常apache以默认用户“nobody”或“apache”运行。拥有到“~”的相对路径将指向运行apache的用户的主目录

我建议使用virtualenv或指定本地pip包的绝对路径。进入站点包目录并运行
pwd
将让您知道绝对路径。如果运行apache的用户无法读取/写入/执行pip包和目录,那么您可能还需要更改它们的权限

当您进入Python REPL时,它可以正常工作,因为您以用户身份执行所有操作,“~”指向您的主目录

WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages
如果您有权编辑服务器上的apache配置文件,我建议您查看一下Django文档, 事件如果您不使用virtualenv,您仍然需要相应地将其设置为本地站点包目录的绝对路径

WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages

我终于解决了我的问题。事实证明,尽管WSGI搜索的PYTHONPATH上有
/users/ejt64/.local/lib/python2.7/site packages/
,但我忘记了使该路径上的一个目录可执行,因此Apache用户无法访问它

尽管所有目录和文件都是世界可读的,但用户不能读取世界可读的文件,除非它对包含它的所有目录都具有执行权限,而且我的主目录(
/users/ejt64
)是世界可读的,但不是世界可执行的。一旦我使这个目录世界成为可执行的,ImportError就消失了


如果我能让Apache/WSGI/Python在尝试读取PYTHONPATH上的目录时打印一条错误消息,但由于权限原因无法访问该目录,那就太好了。

您不使用
--user
安装它的原因是什么?我不确定您的评论是什么意思。我必须使用
--user
安装django bleach,因为我在此服务器上没有root/sudo权限。您的
wsgi
文件是什么样子的?您可以在那里映射Python版本。My
wsgi.py
是由Django的
startproject
命令生成的。为了以防万一,我将把它包括在我的问题中,但我不知道你所说的“映射python版本”是什么意思。你完全正确,但我在我的问题中误导了你。Apache打印出来的PYTHONPATH实际上包含到用户主目录的绝对路径,而不是
~
路径。我认为在示例中包含我的用户名会让事情变得混乱。
WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages