问题描述
我是Python新手。尝试使用此模块https://pypi.org/project/sparql-client/
module.py
from sparql import Service
class MyModule:
def my_method(self):
s = Service('https://my-endpoint:8182/sparql',"utf-8","GET")
statement = """
MOVE uri:temp_graph TO uri:user_graph
ADD uri:temp_graph TO uri:user_graph
""".format(user_graph="http://aws.amazon.com/account-uid",temp_graph="http://aws.amazon.com/account-uid-temp")
s.query(statement)
我正在尝试对其进行测试
test_module.py
import unittest
from unittest.mock import patch,Mock
class TestModule(unittest.TestCase):
@patch('sparql.Service',autospec=True)
def test_mymethod(self,sparql_mock):
sparql_instance = sparql_mock.return_value
sparql_instance.query = Mock()
我跑步时得到
File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/unittest/mock.py",line 1564,in <lambda>
getter = lambda: _importer(target)
File "/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/unittest/mock.py",line 1236,in _importer
thing = __import__(import_path)
File "/usr/local/lib/python3.9/site-packages/sparql.py",line 50,in <module>
from base64 import encodestring
ImportError: cannot import name 'encodestring' from 'base64' (/usr/local/Cellar/python@3.9/3.9.0_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/base64.py)
因此它无法导入此行
https://github.com/eea/sparql-client/blob/master/sparql.py#L50
有什么解决方法吗?
解决方法
问题是由您正在运行的base64模块的版本引起的,而已安装的sparql的版本取决于较低版本的base64模块。 sparql依赖于为python3.1构建的base64版本。从那以后,encodestring()和decodestring()就被弃用了。如果必须继续使用此版本的sparql,最好的选择是将python版本从3.9(当前版本)降级到3.1。 选项2将为您已安装的当前版本的base64采用新的规范。这将意味着更新sparql以及您要调用base64弃用方法的任何地方。
如果您选择使用option2,则 打开sparql模块并编辑import语句。更改
from base64 import encodestring
到from base64 import encodebytes
,然后在代码以及您依赖于base64的任何模块中,将任何出现的encodestring替换为encodebytes。那应该可以解决您的问题