问题导入Zope.deprecation

时间:2011-09-18 06:02:42

标签: python pylons zope

我正在尝试使用new-ish Pyramid framework构建应用程序。我是金字塔的新手,不知道Zope做了什么(其重要性将变得明显)。我遵循了基本教程,但是当我尝试运行应用程序时,我得到了这个回溯:

Traceback (most recent call last):
  File "tasks.py", line 4, in <module>
    from pyramid.config import Configurator
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pyramid-1.2-py2.6.egg/pyramid/__init__.py", line 1, in <module>
    from pyramid.request import Request
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pyramid-1.2-py2.6.egg/pyramid/request.py", line 1, in <module>
    from zope.deprecation import deprecate
ImportError: No module named deprecation

我尝试使用setuptools安装Pyramid:

sudo easy_install pyramid

其中,其他输出的很多包括:

Searching for zope.deprecation
Reading http://pypi.python.org/simple/zope.deprecation/
Best match: zope.deprecation 3.5.0
Downloading http://pypi.python.org/packages/source/z/zope.deprecation/zope.deprecation-3.5.0.tar.gz#md5=1e7db82583013127aab3e7e790b1f2b6
Processing zope.deprecation-3.5.0.tar.gz
Running zope.deprecation-3.5.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-ZiLy8j/zope.deprecation-3.5.0/egg-dist-tmp-yGFSor
Adding zope.deprecation 3.5.0 to easy-install.pth file

我认为应该涵盖它。

我也试过通过macports安装zope:

sudo port install zope

sudo port install py26-zopeinterface

我还尝试在运行脚本之前运行sudo port load zope,但没有帮助。

我还尝试从http://pypi.python.org/pypi/zope.interface下载源代码并在目录中手动构建它。

任何想法我做错了什么?

---- ---- EDIT

一个猜测是setuptools将zope组件安装到我系统的默认Python框架(这是一个Enthought发行版)中,但是我的默认python环境是Macports安装的环境,所以Macports zope模块可能有一些但不是全部组件,例如zope.deprecate。

5 个答案:

答案 0 :(得分:3)

该文档包含有关如何使用virtualenv安装Pyramid的信息。我非常非常非常建议以这种方式使用virtualenv。已安装在主Python中的系统包将与Pyramid的要求进行奇怪的交互。

答案 1 :(得分:1)

您可能会从更熟悉Pyramid的人那里得到答案,但问题是pyramid.request取决于zope.deprecation并且未安装/可用。你需要详细说明“我已经尝试使用...安装zope”,以便我帮助你。

确保您从安装到的同一个python中运行金字塔。如果是这种情况,则应在那里安装zope.deprecation包。你从python -c "import zope.deprecation ; print import zope.deprecation"获得了什么?

答案 2 :(得分:0)

我通过安装zope.deprecation OS软件包解决了这个问题:

sudo apt-get install zope.deprecation

答案 3 :(得分:0)

只需重新安装金字塔即可修复。

答案 4 :(得分:0)

我将课程移到子模块时遇到了问题。 问题是软件的另一个组成部分是从“OLD”模块导入类。还有继承的循环问题。

所以解决方案是使用zope.deferredimport。代码如下所示:

import warnings
import zope.deferredimport

warnings.simplefilter("default")
zope.deferredimport.initialize()
zope.deferredimport.deprecated(
    "Import from openprocurement.contracting.core.tests.base instead",
    BaseContractWebTest='openprocurement.contracting.core.tests.base:BaseContractWebTest',
)

所以现在,当使用“OLD”导入的任何软件组件时  模块没有获得ImportError。类从“NEW”模块导入。警告显示如下:

DeprecationWarning: BaseContractWebTest is deprecated. Import from openprocurement.contracting.core.tests.base instead

就是这样。 zope.deferred的主要部分负责循环导入。这救了我的命。