我是一个非常新的金字塔学习者,我只是按照创建一个新的金字塔项目的文档:我成功地安装了包含金字塔1.5包的virtualenv并运行项目发展模式与'pserve'。apache/mod_wsgi上的金字塔:ImportError:没有模块命名的注册表
但是,使用Apache + mod_wsgi的时候,这是另一个故事:我得到这个错误到Apache的错误日志:
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] File "/home/eric/perso/projects/Pyratest/pyramid.wsgi", line 8, in <module>
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] from pyramid.paster import get_app, setup_logging
...
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] File "/home/eric/perso/projects/venv/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/threadlocal.py", line 3, in <module>
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] from pyramid.registry import global_registry
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] File "/home/eric/perso/projects/venv/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/registry.py", line 5, in <module>
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] from zope.interface.registry import Components
[Fri May 02 09:08:53 2014] [error] [client 127.0.0.1] ImportError: No module named registry
我加了sys.path中转储到我pyramid.wsgi:
import sys
print "=" * 80
for p in sys.path:
print p
from pyramid.paster import get_app, setup_logging
ini_path = '/home/eric/perso/projects/Pyratest/production.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')
我可以看到apache用户可以访问zope/interface/registry.py的路径。 此路径位于sys.path的最开始处,因此不应该在某处存在路径冲突。
我的Apache虚拟主机的定义:
Listen 9999
NameVirtualHost localhost:9999
<VirtualHost localhost:9999>
ServerAdmin [email protected]
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
ErrorLog /var/log/apache2/pyramid-test-error.log
LogLevel warn
CustomLog /var/log/apache2/pyramid-test-access.log combined
ServerSignature On
Alias /static/ /home/eric/perso/projects/Pyratest/pyratest/static/
<Location "/static/">
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/javascript
</IfModule>
Options Indexes FollowSymLinks MultiViews
Order allow,deny
allow from all
</Location>
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
WSGIDaemonProcess pyramid-test user=eric group=eric processes=4 threads=1 python-path=/home/eric/perso/projects/Pyratest/:/home/eric/perso/projects/venv/lib/python2.7/site-packages
WSGIProcessGroup pyramid-test
WSGIScriptAlias//home/eric/perso/projects/Pyratest/pyramid.wsgi
<Directory /home/eric/perso/projects/venv>
WSGIProcessGroup eric
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
当我运行手动VENV Python解释器,我可以导入zope.interface.registry没有任何问题。我不明白为什么用mod_wsgi,它不起作用。 我尝试了很多次,通过创建许多venv和只使用easy_install或pip填充,有或没有--no-site-packages,我已经采用了最新版本的virtualenv,distribute,pip,setuptools,但仍然一样问题。只有一个常量:只有zope.interface.registry似乎无法访问:为什么这个而不是其他金字塔包?
UPDATE 1:的registry.py和pyc文件是可读:
[email protected]:~/perso/projects$ . ./venv/bin/activate
(venv)[email protected]:~/perso/projects$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zope.interface.registry
>>> print zope.interface.registry.__file__
/home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.pyc
>>>
(venv)[email protected]:~/perso/projects$ ls /home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.pyc
/home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.pyc
(venv)[email protected]:~/perso/projects$ ls -la /home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.pyc
-rw-rw-r-- 1 eric eric 25127 mai 2 08:54 /home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.pyc
(venv)[email protected]:~/perso/projects$ ls -la /home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.py
-rw-rw-r-- 1 eric eric 18877 mai 2 08:54 /home/eric/perso/projects/venv/lib/python2.7/site-packages/zope.interface-4.1.1-py2.7-linux-x86_64.egg/zope/interface/registry.py
更新2:这里是安装的软件包:
(venv)[email protected]:~/perso/projects/venv$ pip freeze
Chameleon==2.15
Mako==0.9.1
MarkupSafe==0.21
PasteDeploy==1.5.2
Pygments==1.6
Pyratest==0.0
WebOb==1.3.1
argparse==1.2.1
pyramid==1.5
pyramid-chameleon==0.1
pyramid-debugtoolbar==2.0.2
pyramid-mako==1.0.2
repoze.lru==0.6
translationstring==1.1
venusian==1.0a8
waitress==0.8.8
wsgiref==0.1.2
zope.deprecation==4.1.1
zope.interface==4.1.1
更新3:我终于找到了一种启动金字塔的方法,但它太奇怪了,我不能认为这是一个解决方案:
- use pip install instead of easy_install
- add "import pip" at the top of the pyramid.wsgi file (!!!)
更新4:我重做这里的文档Running a Pyramid Application under mod_wsgi的确切的过程,那就是:一个modwsgi目录,virtualenv中内内的virtualenv终于Pyratest:还是一样的东西:不阿帕奇mod_wsgi的工作:导入错误:没有模块命名注册表
更新5:我决定从头开始安装一个全新的ubuntu 12.04通过使用vagrant,通过这种方式,一切工作正常。所以问题是为什么它不能在我平常的桌面上工作:对于这两个,它不工作...我对他们运行Django没有任何问题,可能有一些调音与金字塔冲突...
该死的......这真是丑陋,但我自己也碰到过这种情况,不得不应用类似的可怕黑客攻击来重新开始工作重建venv);顺便说一下,在我的情况下,这个项目已经在venv下了,我已经按照指南在mod_wsgi下运行Pyramid了。非常感谢发布解决方案(尽管我一定希望找到更清洁的解决方案!) –
看起来有一个[稍微更清洁的选项](http://blog.dscpl.com.au/2014/09/using- python-virtual-environments-with.html),但它取决于比我目前得到的更新版本的mod_wsgi –