微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有sparql-client的Python-ImportError:无法从'base64'导入名称'encodestring'

如何解决具有sparql-client的Python-ImportError:无法从'base64'导入名称'encodestring'

我是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 encodestringfrom base64 import encodebytes,然后在代码以及您依赖于base64的任何模块中,将任何出现的encodestring替换为encodebytes。那应该可以解决您的问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?