[ZODB-Dev] unable to import ZODB: class ConflictError, AttributeError

Alexandre Garel alex.garel at tarentis.com
Thu Jun 14 09:34:03 UTC 2012


Le 14/06/2012 11:20, Ralf Hauenschild a écrit :
> Am 14.06.2012 10:58, schrieb Alexandre Garel:
>> Le 14/06/2012 10:06, Ralf Hauenschild a écrit :
>>> Am 14.06.2012 09:18, schrieb Marius Gedminas:
>>>> On Wed, Jun 13, 2012 at 10:58:01PM +0200, Ralf Hauenschild wrote:
>>>>> Am 13.06.2012 19:36, schrieb Alexandre Garel:
>>>>>> Le 13/06/2012 18:57, Ralf Hauenschild a écrit :
>>>>>>> Hello guys,
>>>>>>>
>>>>>>> i've been desperately trying to install ZODB3 via the following ways:
>>>>>>> - easy_install ZODB3
>>>>>>> - installation of Zope2
>>>>>>> - manual installation of ZODB3, preceeded by installation of the
>>>>>>> requested packages from pypi
>>>>>>>
>>>>>>> I'm using Ubuntu and Python 2.6.
>>>>>>>
>>>>>>> Whe trying to import ZODB, I'm still getting the following error:
>>>>>>>
>>>>>>>
>>>>>>> python
>>>>>>> Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
>>>>>>> [GCC 4.4.3] on linux2
>>>>>>> Type "help", "copyright", "credits" or "license" for more information.
>>>>>>>>>> import ZODB
>>>>>>> Traceback (most recent call last):
>>>>>>>   File "<stdin>", line 1, in<module>
>>>>>>>   File "/usr/local/lib/python2.6/dist-packages/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/__init__.py",
>>>>>>> line 28, in<module>
>>>>>>>     from DB import DB, connection
>>>>>>>   File "/usr/local/lib/python2.6/dist-packages/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/DB.py",
>>>>>>> line 28, in<module>
>>>>>>>     from ZODB.Connection import Connection
>>>>>>>   File "/usr/local/lib/python2.6/dist-packages/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/Connection.py",
>>>>>>> line 33, in<module>
>>>>>>>     from ZODB.blob import Blob, rename_or_copy_blob,
>>>>>>> remove_committed_dir
>>>>>>>   File "/usr/local/lib/python2.6/dist-packages/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/blob.py",
>>>>>>> line 35, in<module>
>>>>>>>     from ZODB.POSException import POSKeyError
>>>>>>>   File "/usr/local/lib/python2.6/dist-packages/ZODB3-3.10.5-py2.6-linux-x86_64.egg/ZODB/POSException.py",
>>>>>>> line 71, in<module>
>>>>>>>     class ConflictError(POSError,
>>>>>>> transaction.interfaces.TransientError):
>>>>>>> AttributeError: 'module' object has no attribute 'TransientError'
>>>> You need a newer version of the 'transaction' package.  Unfortunately
>>>> the changelog athttp://pypi.python.org/pypi/transaction  doesn't say
>>>> which version added TransientError, but why not get the latest one?
>>>>
>>>>>>> Can anybody help me, please?
>>>>>> The problem may be  with a system wide installed version of transaction.
>>>>>>
>>>>>> I would say, try in a virtualenv with no site packages :
>>>>>>
>>>>>> $ virtualenv -p /usr/bin/python2.6 --no-site-packages myproject
>>>>>> $ cd myproject
>>>>>> $ . bin/activate
>>>>>> $ pip install ZODB3
>>>>>>
>>>>>> Hope this helps,
>>>>> Unfortunately, the error remains :(
>>
>> You mean in the global python ? For sure ! My goal was to make it 
>> work in the virtualenv.
>>
>>
>> [-- snip --]
>>> Any further ideas?
>>> Python path is set in the global environment. In the virtualenv, it 
>>> was not set, but everything worked there anyway.
>>
>> You have a non compatible version of transaction installed globally, 
>> so you won't run ZODB3 with your global environment. So Install / 
>> develop your software  in the isolated virtualenv. Is there a problem 
>> with that ?
>>
>> If you need it for system script, the shebang just have to use the 
>> virtualenv python interpreter : #! /path/to/virtualenv/bin/python.
>>
>> Regards,
>> Alex
>>
>>
>
>
> Is there a way to uninstall the incompatible transaction version and 
> install the correct one? It would be very undesirable to use "#! 
> /path/to/virtualenv/bin/python" in every skript as we have a lot of 
> other imports, packages, modules... All this should be organized in 
> the same way. For our customers, it would be very annoying to keep all 
> the necessary steps in mind to make it work.
> Is it possible to fix this problem?


I think the transaction package was installed by the package manager of 
your system. On debian this is python-transaction. Most of the time it 
was installed for another package needs it (your package manager shall 
tell you which).

You may decide to ship with a certain distribution, and in this case you 
have to use their packages for ZODB, or an older ZODB version compatible 
with installed transaction package.

But installing thinks in virtualenv is most of the time sane as it keeps 
things under control and avoid conflict between products on same system.

If you give more detail on your target environment maybe someone can 
give less general advices.

Hope this helps,

Alex
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.zope.org/pipermail/zodb-dev/attachments/20120614/ea31c8d4/attachment-0001.html>


More information about the ZODB-Dev mailing list