星鉴网>IPFS技术>如何在Python应用程序中使用IPFS存储不同类型的数据

如何在Python应用程序中使用IPFS存储不同类型的数据

2018/10/29 17:16:02 809人阅读

【导读】 在这篇文章中,我将讨论如何在Python应用程序中使用分散的IPFS来存储不同类型的数据。

  在这篇文章中,我将讨论如何在Python应用程序中使用分散的IPFS来存储不同类型的数据。

  

  什么是IPFS?

  

  来自维基百科:

  

  星际文件系统(IPFS)是一种协议/网络,旨在创建在分布式文件系统中存储和共享超媒体的内容可寻址的对等方法。IPFS最初由Juan Benet设计,现在是一个在社区帮助下开发的开源项目。

  

  您可以将它理解为区块链形式的Amazon S3主机,所有信息都可以在分散的网络节点中存储及获取。IPFS不仅系统可扩展,而且可靠,系统里的数据将永久存在,网络中也不会再出现404网页找不到等情况。


  

  因此,IPFS的可能性是无穷无尽的,可以用于文件存储,可以作为虚拟主机,可以制作消息传递系统。

  

  安装

  

  从这里https://dist.ipfs.io/#go-ipfs下载并安装文件。由于我的电脑是OSX系统,所以我下载并解压缩go-ipfs_v0.4.13_darwin-amd64.tar.gz文件,执行install.sh进行安装。

  

  要确保安装设置是否正确,可以在控制台上运行ipfs --version或ipfs 。如果设置正确,那么您可以看到如下所示:

  

  ➜ IPFS ipfs --version

  

  它打印出来

  

  ipfs version 0.4.13

  

  看到这些提示,我们可以确认已经安装成功了。现在我们可以初始化本地IPFS节点了,为此运行以下命令:

  

  ipfs init

  

  运行时,它打印如下:

  

  ➜  IPFS ipfs init  

  initializing IPFS node at /Users/AdnanAhmad/.ipfs

  generating 2048-bit RSA keypair...done 

  peer identity: QmaJcDSAceC6nDZ4CEz8F6mkiGcATjWbCE8JAfbiVxY7oW

  to get started, enter:

  ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

  

  当你在命令行执行ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme时,它应该显示如下:

  

 

  

  基本上ipfs cat 显示了文件的内容。如果执行ipfs get ,你将在本地下载它。

  

  IPFS守护进程

  

  当您运行ipfs daemon命令时,它将在您的机器上启动一个节点,该节点将与其他可用节点连接。这个概念与Blockchain类似,有许多节点可用,您可以启动自己的节点,与其他节点同步。如果您愿意,可以通过在Swarm 和Bootstrap 中设置IP来设置私有节点。例如,这些是默认值:

  

  "Addresses": {

  "API": "/ip4/127.0.0.1/tcp/5001",

  "Announce": [],

  "Gateway": "/ip4/127.0.0.1/tcp/8080",

  "NoAnnounce": [],

  "Swarm": [

  "/ip4/0.0.0.0/tcp/4001",

  "/ip6/::/tcp/4001"

  ] 

  }, 

  "Bootstrap": [

  "/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",

  "/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",

  "/dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",

  "/dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",

  "/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",

  "/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",

  "/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",

  "/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",

  "/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd",

  "/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",

  "/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",

  "/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",

  "/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"

  ],

  

  你可以运行ipfs config show查看它。

  

  当你输入 ipfs daemon 会显示以下输出结果:

  

  Initializing daemon...

  Adjusting current ulimit to 2048...

  Successfully raised file descriptor limit to 2048.

  Swarm listening on /ip4/127.0.0.1/tcp/4001

  Swarm listening on /ip4/192.168.1.3/tcp/4001

  Swarm listening on /ip6/::1/tcp/4001

  Swarm listening on /p2p-circuit/ipfs/QmaJcDSAceC6nDZ4CEz8F6mkiGcATjWbCE8JAfbiVxY7oW

  Swarm announcing /ip4/127.0.0.1/tcp/4001

  Swarm announcing /ip4/192.168.1.3/tcp/4001

  Swarm announcing /ip4/39.57.97.236/tcp/49388

  Swarm announcing /ip6/::1/tcp/4001

  API server listening on /ip4/127.0.0.1/tcp/5001

  Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080

  Daemon is ready

  

  您可以通过http://localhost:8080/ipfs并添加文件对象的哈希来访问Web界面。此时,当您运行ipfs refs local命令时,将打印本地节点上存在的内容:

  

  ➜  IPFS ipfs refs local 

  QmdL9t1YP99v4a2wyXFYAQJtbD9zKnPrugFLQWXBXb82sn

  QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V

  QmXgqKTbzdh83pQtKFb19SpMCpDDcKR2ujqk3pKph9aCNF

  QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv

  Qma4NNR8dUSDt2BvLYYtgdMLF8J3usKrT9kDFhHzfpB7oq

  QmNcNo8TXi92Da91fDfzCMbYF5ScaHEJmQG1jqCEbkS7Kt

  QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y

  QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y

  QmPhk6cJkRcFfZCdYam4c9MKYjFG9V29LswUnbrFNhtk2S

  QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7

  QmSKboVigcD3AY4kLsob117KJcMHvMUu6vNFqk1PQzYUpp

  QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm

  QmZZRTyhDpL5Jgift1cHbAhexeE1m2Hw8x8g7rTcPahDvo

  Qme7RW9zfGgYujJt6CJ5yKiMkvV9zPSSkbB4hgipee3j6S

  QmYQoke9bEqzBLWPGqyjhUYc3TwBEkn4wed2kUmAbxvLFu

  QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n

  

  您将可以通过 http://localhost:8080/ipfs/QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7在浏览器上查找到内容。


  

  保存

  

  当您在IPFS网络上发布文件时,它会分布存储在连接的节点上。IPFS提供了一个垃圾回收机制,无用的文件将被删除。为了使您的数据永远存在,您可以通过运行命令来固定文件:ipfs pin add <hash_of_content>

  

  <hash_of_content>是您文件哈希值。当输入这个命令后,它将不会被删除。同时,您也可以通过运行命令ipfs pin rm <hash_content>取消固定。

  

  到目前为止,我们看到了如何通过命令行与IPFS进行交互,但是如何自动化它甚至在你的python中使用还没有说明,让我们继续下去吧!

  

  发展

  

  我没有做任何有难度的事情,只是通过命令行界面调用内容。通过学习,您可以实现图像托管服务或消息应用程序或您自己的分散式Amazon S3!

  

  首先安装IPFS Python API,运行命令 pip install ipfsapi

  

  运行ipfs daemon 并在您的磁盘中创建本地Python文件来启动本地守护程序。

  

  if __name__ == '__main__':

  # Connect to local node

  try:

  api = ipfsapi.connect('127.0.0.1', 5001)

  print(api)

  except ipfsapi.exceptions.ConnectionError as ce:

  print(str(ce))

  

  如果已连接,您将看到ipfsapi.client.Client object at 0x104af5a90,其他情况如:ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=5001): Max retries exceeded with url: /api/v0/version?stream-channels=true (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused',))

  

  好了,现在连接成功了,我们添加一个新文件:

  

  new_file = api.add('new.txt')

  

  它将添加一个新文件。如果输入print() ,你可以看到如下的返回dict对象:

  

  {'Name': 'new.txt', 'Hash': 'QmWvgsuZkaWxN1iC7GDciEGsAqphmDyCsk3CVHh7XVUUHq', 'Size': '28'}

  

  现在让我们通过浏览器访问http://localhost:8080/ipfs/QmWvgsuZkaWxN1iC7GDciEGsAqphmDyCsk3CVHh7XVUUHq/

  

  它将显示新添加的文件。

  

  为了查看您调用的文件的内容,您可以输入api.cat('QmWvgsuZkaWxN1iC7GDciEGsAqphmDyCsk3CVHh7XVUUHq'),它将打印文件的内容,这与您通过命令行执行的操作结果相同。

  

  结论

  

  IPFS是一种实现Web的新方法,这是一种使事物可扩展且可靠的新协议。您可以将其视为在区块链上运行的分散存储系统。作为Python开发人员,您可以使用这些简单易用的API来集成新的或现有的Python应用程序。Github上提供了代码。


  本文翻译自博客:ADNAN'S RANDOM BYTES

4

参与讨论

登录后参加评论......

全部评论 0

作者

返回顶部