Проблема импорта Zope.deprecation - PullRequest
3 голосов
/ 18 сентября 2011

Я пытаюсь создать приложение, используя 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

Я пытался установить Pyramid с помощью setuptools:

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

Который, я думал, должен охватить это.

Я также пытался установить zope через macports:

sudo port install zope

sudo port install py26-zopeinterface

Я также пытался запустить sudo port load zope перед запуском скрипта, но ничего не помогло.

Я также попытался загрузить исходный код из http://pypi.python.org/pypi/zope.interface и собрать его вручную в каталоге.

Есть идеи, что я делаю не так?

---- РЕДАКТИРОВАТЬ ----

Можно предположить, что setuptools устанавливает свои компоненты zope в стандартную платформу Python моей системы (котораяэто дистрибутив Enthought), но моя среда Python по умолчанию - та, в которой установлен Macports, так что, возможно, модуль Macports zope содержит некоторые, но не все компоненты, такие как zope.deprecate.

Ответы [ 5 ]

3 голосов
/ 19 сентября 2011

Документация содержит информацию о том, как использовать virtualenv для установки Pyramid. Очень, очень рекомендуется использовать virtualenv таким образом. Системные пакеты, уже установленные в вашем основном Python, будут странно взаимодействовать с требованиями Pyramid.

1 голос
/ 18 сентября 2011

Вы можете получить ответ от кого-то, более знакомого с Pyramid, но проблема здесь в том, что pyramid.request зависит от zope.deprecation, и он не установлен / недоступен.Вам нужно будет подробнее рассказать о том, «Я пытался установить zope с помощью ...», чтобы я мог вам помочь.

Убедитесь, что вы используете пирамиду из того же самого питона, который вы установили.к.Если это так, то пакет zope.deprecation должен быть установлен там.Что вы получаете от python -c "import zope.deprecation ; print import zope.deprecation"?

0 голосов
/ 16 мая 2018

У меня была проблема с перемещением класса в подмодуль. Проблема заключалась в том, что другой компонент программного обеспечения импортировал класс из «старого» модуля. Также была проблема с наследованием.

Таким образом, решение было использовать 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. Класс импортируется из «НОВОГО» модуля. И предупреждение отображается так:

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

Так вот и все. Основная часть zope.deferred позаботилась о импорте цикла. Это спасло мою жизнь.

0 голосов
/ 09 августа 2017

Просто переустановите пирамиду, чтобы исправить.

0 голосов
/ 11 апреля 2017

Я решил это путем установки пакета ОС zope.deprecation:

sudo apt-get install zope.deprecation
...