Mutalyzer py.test 失败并出现 python-magic 错误
Mutalyzer py.test fails with python-magic error
我正在尝试安装 mutalyzer 2.0.14 on Centos 6.7
using Anaconda Python 2.7
as per these 说明。
我的安装很顺利,但是当我尝试 运行 py.test
套件时遇到一系列失败。
我怀疑 libmagic
的 OS 版本与 python2.7 包 python-magic
.[=23= 之间存在版本冲突]
如果有人能解释这里发生了什么,或者更好地建议解决这个问题,我将非常感兴趣。
我的 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)[root@localhost mutalyzer]#
我们之前收到一份报告,称一名用户试图在 CentOS 6 上安装 Mutalyzer,他们也 运行 遇到了 libmagic 的问题。我不认为这已经解决,除了他们切换到 CentOS 7.
不幸的是,我们的资源非常有限,而 Debian 是我们自己使用的唯一 OS 这就是我们可以实际支持的全部。当然,我们很乐意接受补丁或文档更新:)
感谢使用 Mutalyzer!
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.py
中的Magic.list
方法仍然会失败。这不是一个紧迫的问题,因为它似乎没有在 mutalyzer
代码库中被调用。
我正在尝试安装 mutalyzer 2.0.14 on Centos 6.7
using Anaconda Python 2.7
as per these 说明。
我的安装很顺利,但是当我尝试 运行 py.test
套件时遇到一系列失败。
我怀疑 libmagic
的 OS 版本与 python2.7 包 python-magic
.[=23= 之间存在版本冲突]
如果有人能解释这里发生了什么,或者更好地建议解决这个问题,我将非常感兴趣。
我的 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)[root@localhost mutalyzer]#
我们之前收到一份报告,称一名用户试图在 CentOS 6 上安装 Mutalyzer,他们也 运行 遇到了 libmagic 的问题。我不认为这已经解决,除了他们切换到 CentOS 7.
不幸的是,我们的资源非常有限,而 Debian 是我们自己使用的唯一 OS 这就是我们可以实际支持的全部。当然,我们很乐意接受补丁或文档更新:)
感谢使用 Mutalyzer!
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.py
中的Magic.list
方法仍然会失败。这不是一个紧迫的问题,因为它似乎没有在 mutalyzer
代码库中被调用。