14. 包管理器与模块管理

14.1. 点击下载包管理器

14.2. PikaPackage包管理器

PikaScript有官方支持的包管理器PikaPackage,用于模块管理,可以提供内核、模块下载、模块发布、内核、模块版本切换功能,方便分发开发好的模块,以及管理模块的版本。

PikaPackage是一个windows平台的单体应用程序。基于go语言开发,集成了go-git组件,能够在不安装git的情况下,实现git仓库的拉取、更新和版本切换功能。

PikaPcakge所在的目录是 https://gitee.com/Lyon1998/pikascript/tree/master/tools/pikaPackageManager

14.3. PikaPackage的工作流程

_images/59aa08a00bc1ea6d0fede3e80091f0bd.svg

pikaPackage会自动完成上图所示的一系列流程。

  • 首先是检查/tmp/pikascript文件夹是否存在,没有的话会先clone一份pikascript仓库。

/tmp目录指的是pikaPackage.exe当前所处的磁盘的根目录里的tmp文件夹。 比如,如果pikaPackage.exe在C盘,那么/tmp就是C:/tmp,如果在D盘,那么/tmp就是D:/tmp。 clone仓库使用的是gitee源,所以不用担心网络连接问题,国内也非常快。

  • 更新仓库到最新状态。

  • 读取当前requestment.txt文件中的模块。

下面是一个requestment.txt文件的例子,这个文件的格式与主流python的pip包管理器格式一致,填写模块名和版本号即可拉取对应的模块。目前只支持==符号,表示严格匹配版本号。还有一个特殊的版本是latest,表示拉取最新的模块,这个最新指的是pikascript仓库中master分支的最新版本。如果你是模块的使用者而非开发者,请注意尽一切可能避免使用latest版本。因为latest版本在不断变动,新版本的模块可能导致兼容性问题。

  1. pikascript-core==v1.6.1
  2. PikaStdLib==v1.6.1
  3. PikaStdDevice==v1.6.0
  4. STM32G0==v1.2.0
  5. PikaPiZero==v1.1.3
  • pikaPackage.exe检查/tmp/pikascript/packages.toml文件,这是一个仓库中的模块描述文件,这个文件描述了所有可用的模块及其版本。下面是截取的部分packages.toml文件,在这个文件里,有pikascript-core,PikaStdLib,PikaStdDevice,STM32四个模块可供拉取,而每个模块下的release部分描述了可以使用的版本。

模块版本的格式为”<版本名> “,在requestment.txt中填写相应的版本名即可拉取对应版本的模块。

如果你也想发布模块,就可以仿照填写packages.toml文件,包管理器就可以识别到你发布的模块了。

  1. [[packages]]
  2. name = "pikascript-core"
  3. releases = [
  4. "v0.8.1 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  5. "v0.8.2 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  6. "v0.8.3 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  7. "v0.9.0 332ef8afb0692cddd194782a07e30f2688d0f813",
  8. "v0.10.0 c86eaefa4516dd82b1050fa74a7d85399459d5ed",
  9. "v1.0.0 7b816b1546ef91a03f77760d4b10806ab956d452",
  10. "v1.1.0 845d1fc6520237e2238087800f72608dcb81afa6",
  11. "v1.1.1 c77e42450ed0eb09fcd7bb2b7d7c2b7eeeb55a2e",
  12. "v1.1.2 f6ad2c78f49162ab3f898abc6a0a4d87777ce655",
  13. "v1.1.3 6539072bf7bebb242ea40f8595bfb5c9aae3de7f",
  14. "v1.2.0 ce3df083b68fbfc85e64e6793fe07a6736d6f29f",
  15. "v1.2.1 e29a77527fd753c4eb811b047899534472bfc8ec",
  16. "v1.2.2 5316ede928b01a20571103616a64666abbc40e0a",
  17. "v1.2.3 5ae86929851ff6a62342a7072b77e9cf5be85f1c",
  18. "v1.2.4 b7ac057d75e88736cc844de0bafb447a48f2fb6d",
  19. "v1.2.5 db51f0520a673074a14ef0f5c4434da0d5c3425f",
  20. "v1.2.6 044a2a8f0905c6ca90c633759f397323ce57eefd",
  21. ]
  22. [[packages]]
  23. name = "PikaStdLib"
  24. releases = [
  25. "v1.0.1 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  26. "v1.1.0 0b3b866dbacc363c7b6b3899faa0cbcaccd59d5e",
  27. "v1.2.0 ca29e112687525ee7511bd30418d368754627a00",
  28. "v1.2.1 5ae86929851ff6a62342a7072b77e9cf5be85f1c",
  29. "v1.2.2 b7ac057d75e88736cc844de0bafb447a48f2fb6d",
  30. ]
  31. [[packages]]
  32. name = "PikaStdDevice"
  33. releases = [
  34. "v1.3.0 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  35. "v1.4.0 29c3c5b3b0cb4d3e41e6a2a0aef9e2826bc6f7ba",
  36. "v1.4.1 6539072bf7bebb242ea40f8595bfb5c9aae3de7f",
  37. "v1.4.2 5ae86929851ff6a62342a7072b77e9cf5be85f1c",
  38. ]
  39. [[packages]]
  40. name = "STM32"
  41. releases = [
  42. "v1.0.0 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  43. "v1.0.1 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  44. "v1.0.2 af42fd61884dc7048628b0d3bafaa42697f6e8ea",
  45. "v1.1.0 a18910b5dc349c64297bba3a13b7044f41d48e5f",
  46. "v1.1.1 91818aab0fa87b007e84866d479af5ac507339fe",
  47. "v1.2.0 6bd4aac6e9aba2a603da602be8583021da1272c0",
  48. "v1.3.0 7b816b1546ef91a03f77760d4b10806ab956d452",
  49. "v1.4.0 29c3c5b3b0cb4d3e41e6a2a0aef9e2826bc6f7ba",
  50. "v1.4.1 6539072bf7bebb242ea40f8595bfb5c9aae3de7f",
  51. "v1.4.2 8866710f653ad005f5c3edc5e6417ad31075b7d5",
  52. "v2.0.0 e29a77527fd753c4eb811b047899534472bfc8ec",
  53. "v2.0.1 5ae86929851ff6a62342a7072b77e9cf5be85f1c",
  54. ]
  • pikaPackage.exe去/tmp/pikascript/pacakge文件夹中寻找和packages.toml同名的文件夹,然后切换至指定的commit id,再拷贝该文件夹到当前的pikascript-lib文件夹下。

如果你想发布一个模块,则在pikascript/package目录下新建一个和模块同名的文件夹,再将该模块包含的所有文件拷贝到该文件夹内即可。提交该文件夹并获得commit id后,再将commit id填写进packages.toml描述文件中。

注意:为限制模块的复杂度,提高可维护性,模块文件夹内不支持嵌套的文件夹。

  • 模块文件夹中包含的*.py文件会被自动拷贝一份到当前文件夹下,这是为了能够识别到该python模块(python 在import模块时,只识别当前文件夹内的模块文件。)

14.4. 错误排查

如果在使用中疑似遇到问题,可以在cmd中运行pikaPackage.exe,查看完整的日志信息。 _images/1639382545595-8a1bdb35-f995-4fc2-a23d-f60b0d3cc9aa.pngimage.png _images/1639382594452-b9ab5fa4-3712-4852-8ce0-42cee9345ac9.pngimage.png