2015-12-31 62 views
0

我正尝试在Centos 6.7上使用Anaconda Python 2.7按照these的说明安装mutalyzer 2.0.14Mutalyzer py.test以python-magic错误失败

我的安装很好,但是当我尝试运行py.test套件时,我遇到了一系列失败。

我怀疑操作系统版本libmagic和python2.7包python-magic之间存在版本冲突。

如果有人能够解释这里发生了什么或者更好地解决这个问题,我会非常感兴趣。

我libmagic安装:

$ rpm -qa | grep 'file-' 
file-libs-5.04-21.el6.x86_64 
file-5.04-21.el6.x86_64 
file-devel-5.04-21.el6.x86_64 

通讯Python包:

$ source activate py27 
discarding /opt/anaconda2/bin from PATH 
prepending /opt/anaconda2/envs/py27/bin to PATH 
(py27) $ pip list | grep magic 
Magic-file-extensions (0.2, /home/chris.guest/temp/mutalyzer/src/magic-file-extensions) 
python-magic (0.4.10) 

py.test是这样开始的:

# py.test 
======================================================= test session starts ======================================================= 
platform linux2 -- Python 2.7.11, pytest-2.8.2, py-1.4.30, pluggy-0.3.1 
rootdir: /home/chris.guest/temp/mutalyzer, inifile: 
collected 610 items/3 errors 

tests/test_backtranslator.py ...... 
tests/test_base.py . 
tests/test_crossmap.py ....................... 
tests/test_grammar.py ........................................................................................ 
tests/test_mapping.py .............................. 
tests/test_migrations.py . 
tests/test_mutator.py ................................................................................................................................................................ 
tests/test_ncbi.py ............................................................................................................ 
tests/test_parsers_genbank.py .......... 

而且有很多错误的结束。许多测试,因为undefined symbol: magic_list失败:

_________________________________________ ERROR at setup of test_batch_unicode[sqlite://] _________________________________________ 

    @pytest.fixture 
    def website(): 
>  return create_app().test_client() 

tests/test_website.py:29: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mutalyzer/website/__init__.py:35: in create_app 
    from mutalyzer.website.views import website 
mutalyzer/website/views.py:26: in <module> 
    from mutalyzer import (announce, backtranslator, File, Retriever, Scheduler, 
mutalyzer/File.py:23: in <module> 
    import magic   # open(), MAGIC_MIME, MAGIC_NONE 
src/magic-file-extensions/magic.py:94: in <module> 
    _list = _libraries['magic'].magic_list 
/opt/anaconda2/envs/py27/lib/python2.7/ctypes/__init__.py:378: in __getattr__ 
    func = self.__getitem__(name) 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CDLL 'libmagic.so.1', handle 160cc50 at 7f23b97340d0>, name_or_ordinal = 'magic_list' 

    def __getitem__(self, name_or_ordinal): 
>  func = self._FuncPtr((name_or_ordinal, self)) 
E  AttributeError: /usr/lib64/libmagic.so.1: undefined symbol: magic_list 

/opt/anaconda2/envs/py27/lib/python2.7/ctypes/__init__.py:383: AttributeError 
______________________________________ ERROR at setup of test_batch_unicode_email[sqlite://] ______________________________________ 

    @pytest.fixture 
    def website(): 
>  return create_app().test_client() 

tests/test_website.py:29: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
mutalyzer/website/__init__.py:35: in create_app 
    from mutalyzer.website.views import website 
mutalyzer/website/views.py:26: in <module> 
    from mutalyzer import (announce, backtranslator, File, Retriever, Scheduler, 
mutalyzer/File.py:23: in <module> 
    import magic   # open(), MAGIC_MIME, MAGIC_NONE 
src/magic-file-extensions/magic.py:94: in <module> 
    _list = _libraries['magic'].magic_list 
/opt/anaconda2/envs/py27/lib/python2.7/ctypes/__init__.py:378: in __getattr__ 
    func = self.__getitem__(name) 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <CDLL 'libmagic.so.1', handle 160cc50 at 7f23b984ef50>, name_or_ordinal = 'magic_list' 

    def __getitem__(self, name_or_ordinal): 
>  func = self._FuncPtr((name_or_ordinal, self)) 
E  AttributeError: /usr/lib64/libmagic.so.1: undefined symbol: magic_list 

/opt/anaconda2/envs/py27/lib/python2.7/ctypes/__init__.py:383: AttributeError 
============================================== 548 passed, 65 error in 41.42 seconds ============================================== 
(py27)[[email protected] mutalyzer]# 

回答

0

与Centos 6.7打包在一起的magiclib版本缺少magic_list函数。

我能够使这个补丁src/magic-file-extensions/magic.py,使py.test运行没有错误。

$ diff -u src/magic-file-extensions/magic.old.py src/magic-file-extensions/magic.py 
--- src/magic-file-extensions/magic.old.py 2015-12-31 14:04:50.769635453 +1100 
+++ src/magic-file-extensions/magic.py 2016-01-11 15:17:49.987270845 +1100 
@@ -91,9 +91,13 @@ 
_check.restype = c_int 
_check.argtypes = [magic_t, c_char_p] 

-_list = _libraries['magic'].magic_list 
-_list.restype = c_int 
-_list.argtypes = [magic_t, c_char_p] 
+try: 
+ _list = _libraries['magic'].magic_list 
+ _list.restype = c_int 
+ _list.argtypes = [magic_t, c_char_p] 
+except AttributeError, e: 
+ _list = None 
+  

_errno = _libraries['magic'].magic_errno 
_errno.restype = c_int 

虽然眼前AttributeError与此补丁来处理,在src/magic-file-extensions/magic.pyMagic.list方法仍然会失败,如果它被调用。这不是一个直接的问题,因为它似乎不在mutalyzer代码库中调用。

+0

@MartijnVermaat如果您认为它会有帮助,请随时将此补丁添加到'mutalyzer'代码库。 – ChrisGuest

1

我们必须试图在CentOS 6安装Mutalyzer用户的一个早期的报告,他们也遇到了与libmagic烦恼。我不认为这个问题已经解决,除了他们改用CentOS 7.

不幸的是,我们的资源非常有限,Debian是我们自己使用的唯一的操作系统,这些都是我们切实可以支持的。当然,我们很乐意接受补丁或文档更新:)

感谢您使用Mutalyzer!

+0

这不提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 - [来自评论](/ review/low-quality-posts/10739374) – grahamj42

+1

对不起,我试图离开这作为评论,但被禁止,因为它需要一定的声誉。另外,由于我是被引用软件(Mutalyzer)的主要维护者,因此这是关于如何运行Mutalyzer的最具权威性的答案:升级到CentOS 7或在Debian上运行它。我相信为@ChrisGuest所要求的问题提供* a *修正。如果问题是关于如何在CentOS 6上使用python-magic的更一般的话,我会同意我没有答案。 –

+0

@MartijnVermaat感谢您对此作出回应。我会将问题留待一段时间,看看是否有其他人对此有回应。 如果一切都失败了,我可能会得到一个Centos7盒子委托。 – ChrisGuest