Snapcraft python 带有模块的脚本,暂存问题

Snapcraft python script with module, staging issues

我正在构建一个 snap 来测试 python 脚本和 python SDK 与 snapcraft 的集成,当两个 python 'parts' 时似乎有冲突在同一个快照中构建。

使用多个 python 模块构建快照的最佳方法是什么?

我有一个简单的脚本,可以导入 SDK,然后打印一些信息。我还在另一个文件夹中有 python SDK 库 (https://help.iotconnect.io/documentation/sdk-reference/device-sdks-flavors/download-python-sdk/)。

我已经定义了这两个部分,每个部分都可以单独构建(snapcraft build PARTNAME),但是 python 内部结构似乎在下一步 'staging' 它们在一起时发生冲突.

结构树输出

tree
.
├── basictest
│   ├── basictest.py
│   ├── __init__.py
│   └── setup.py
├── iotconnect-sdk-3.0.1
│   ├── iotconnect
│   │   ├── assets
│   │   │   ├── config.json
│   │   │   └── crt.txt
│   │   ├── client
│   │   │   ├── httpclient.py
│   │   │   ├── __init__.py
│   │   │   ├── mqttclient.py
│   │   │   └── offlineclient.py
│   │   ├── common
│   │   │   ├── data_evaluation.py
│   │   │   ├── infinite_timer.py
│   │   │   ├── __init__.py
│   │   │   └── rule_evaluation.py
│   │   ├── __init__.py
│   │   ├── IoTConnectSDKException.py
│   │   ├── IoTConnectSDK.py
│   │   └── __pycache__
│   │       ├── __init__.cpython-38.pyc
│   │       └── IoTConnectSDK.cpython-38.pyc
│   ├── iotconnect_sdk.egg-info
│   │   ├── dependency_links.txt
│   │   ├── not-zip-safe
│   │   ├── PKG-INFO
│   │   ├── requires.txt
│   │   ├── SOURCES.txt
│   │   └── top_level.txt
│   ├── PKG-INFO
│   ├── README.md
│   ├── setup.cfg
│   └── setup.py
└── snap
    └── snapcraft.yaml

9 directories, 30 files

snapcraft.yaml

name: basictest
base: core20
version: '0.1'
summary: Test snap to verifiy integration with python SDK
description: |
  Test snap to verifiy integration with python SDK

grade: devel
confinement: devmode

apps: 
  basictest:
    command: bin/basictest

parts:
  lib-basictest:
    plugin: python
    source: ./basictest/
    after: [lib-pythonsdk]
    disable-parallel: true
    
  lib-pythonsdk:
    plugin: python
    source: ./iotconnect-sdk-3.0.1/

运行 'snapcraft' 显示大量错误,看起来像是与 python.

内部相关的两个 'parts' 之间的冲突

snapcraft 输出

snapcraft
Launching a VM.
Skipping pull lib-pythonsdk (already ran)
Skipping pull lib-basictest (already ran)
Skipping build lib-pythonsdk (already ran)
Skipping build lib-basictest (already ran)
Failed to stage: Parts 'lib-pythonsdk' and 'lib-basictest' have the following files, but with different contents:
    bin/activate
    bin/activate.csh
    bin/activate.fish
    lib/python3.8/site-packages/_distutils_hack/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/_distutils_hack/__pycache__/override.cpython-38.pyc
    lib/python3.8/site-packages/pip-21.3.1.dist-info/RECORD
    lib/python3.8/site-packages/pip/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/pip/__pycache__/__main__.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/build_env.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/cache.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/configuration.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/exceptions.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/main.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/pyproject.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/main.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/parser.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/cache.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/check.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/completion.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/debug.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/download.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/hash.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/help.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/index.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/install.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/list.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/search.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/show.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/base.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/index/__pycache__/__init__.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/index/__pycache__/collector.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/index/__pycache__/sources.cpython-38.pyc
    lib/python3.8/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-38.pyc
... Tons more removed

Snapcraft offers some capabilities to solve this by use of the following keywords:
    - `filesets`
    - `stage`
    - `snap`
    - `organize`

To learn more about these part keywords, run `snapcraft help plugins`.
Run the same command again with --debug to shell into the environment if you wish to introspect this failure.

主要问题 使用多个 python 模块构建快照的最佳方法是什么?

看起来最好的解决方案是删除库中包含的有问题的构建文件。 'lib-basictest'部分是主要的执行脚本,这里生成的文件应该包含在SDK库版本

这是更新的 lib-pythonsdk 部分

  lib-pythonsdk:
    plugin: python
    source: ./iotconnect-sdk-3.0.1/
    stage:
      - -lib/python3.8/site-packages/pip/
      - -lib/python3.8/site-packages/setuptools/
      - -lib/python3.8/site-packages/wheel/
      - -lib/python3.8/site-packages/_distutils_hack
      - -lib/python3.8/site-packages/pip-21.3.1.dist-info
      - -lib/python3.8/site-packages/pkg_resources
      - -lib/python3.8/site-packages/wheel-0.37.1.dist-info
      - -bin/activate
      - -bin/activate.csh
      - -bin/activate.fish
      - -pyvenv.cfg

这就是我要使用的,除非我缺少某些 'overwrite' 参数?

为了使解决方案更便携并处理不同的版本号,子文件夹可以使用通配符

lib-pythonsdk:
    plugin: python
    source: ./iotconnect-sdk-3.0.1/
    stage:
      - -lib/python3.8/site-packages/pip*
      - -lib/python3.8/site-packages/wheel*
      - -lib/python3.8/site-packages/setuptools/
      - -lib/python3.8/site-packages/_distutils_hack
      - -lib/python3.8/site-packages/pkg_resources
      - -bin/activate
      - -bin/activate.csh
      - -bin/activate.fish
      - -pyvenv.cfg