【问题标题】:How to install ruamel.yaml on a buildroot environment如何在 buildroot 环境中安装 ruamel.yaml
【发布时间】:2018-07-27 16:24:14
【问题描述】:

ruamel.yaml 似乎需要安装 PIP,这不是构建和安装 Python 包的默认 buildroot 解决方案。

  1. 是否可以 - 至少 - 将纯 Python 版本的 ruamel.yaml 安装到 buildroot 映像中 - 以及如何规避 pip 限制?
  2. 是否可以交叉构建ruamel.yaml

强制RUAMEL_NO_PIP_INSTALL_CHECK 环境。变种。没有帮助:

test compiling test_ruamel_yaml
running install
Checking .pth file support in ...
Failed to import the site module
ModuleNotFoundError: No module named '_sysconfigdata_m_linux_arm-linux-gnueabihf'
error: command '.../output/host/bin/python' failed with exit status 1
package/pkg-generic.mk:310: recipe for target '.../output/build/python-ruamel-yaml-0.15.45/.stamp_target_installed' failed

【问题讨论】:

    标签: ruamel.yaml


    【解决方案1】:

    ruamel.yaml 确实需要 pip 从 PyPI 安装(使用适合您平台的 .tar.gz.whl),这是 documented

    原因是启用嵌套包安装所需的修复仅针对pip(而不是easy_installpython setup.py安装)实施。

    但这并不妨碍您使用ruamel.yaml,尤其是在您不需要C 扩展(在加载时检查)的情况下。

    您可以从 bitbucket 中签出标记版本,也可以从 PyPI 中解压缩 .tar.gz 并将结果移动到您的站点包目录:

    $ virtualenv /tmp/ruamel_yaml_no_pip
    Using base prefix '/opt/python/3.7'
    New python executable in /tmp/ruamel_yaml_no_pip/bin/python
    Installing setuptools, pip, wheel...done.
    $ cd /tmp/ruamel_yaml_no_pip/
    $ source bin/activate
    (ruamel_yaml_no_pip) $ mkdir lib/python3.7/site-packages/ruamel/
    (ruamel_yaml_no_pip) $ touch lib/python3.7/site-packages/ruamel/__init__.py 
    (ruamel_yaml_no_pip) $ wget -q https://files.pythonhosted.org/packages/63/a5/dba37230d6cf51f4cc19a486faf0f06871d9e87d25df0171b3225d20fc68/ruamel.yaml-0.15.45.tar.gz
    (ruamel_yaml_no_pip) $ python -m ruamel.yaml
    /tmp/ruamel_yaml_no_pip/bin/python: Error while finding module specification for 'ruamel.yaml' (ModuleNotFoundError: No module named 'ruamel')
    (ruamel_yaml_no_pip) $ tar xf ruamel.yaml-0.15.45.tar.gz 
    (ruamel_yaml_no_pip) $ mv ruamel.yaml-0.15.45 lib/python3.7/site-packages/ruamel/yaml
    (ruamel_yaml_no_pip) $ python -c 'from ruamel.yaml import YAML; print(YAML().load("{hello: world}")["hello"])'
    world
    (ruamel_yaml_no_pip)
    (ruamel_yaml_no_pip) $ python -c 'from ruamel.yaml import __with_libyaml__ as X; print(X)'
    False
    

    (网址复制自0.15.45 project download page

    对于开发,我通常只是从 virtualenv 的站点包创建一个软链接到我的 ruamel 目录。

    我不知道这是否会转化为 buildroot 环境(如果是,请发布您的结果)。

    【讨论】:

      【解决方案2】:

      我忽略了 buildroot 文档。

      有一个关键参数需要定义:SETUP_TYPE = setuptools 而不是SETUP_TYPE = distutils

      使用以下sn-p:

      PYTHON_RUAMEL_YAML_VERSION = 0.15.45
      PYTHON_RUAMEL_YAML_SOURCE = ruamel.yaml-$(PYTHON_RUAMEL_YAML_VERSION).tar.gz
      PYTHON_RUAMEL_YAML_SITE = https://pypi.python.org/packages/63/a5/dba37230d6cf51f4cc19a486faf0f06871d9e87d25df0171b3225d20fc68
      PYTHON_RUAMEL_YAML_SETUP_TYPE = setuptools
      PYTHON_RUAMEL_YAML_LICENSE = MIT
      PYTHON_RUAMEL_YAML_LICENSE_FILES = LICENSE
      
      PYTHON_RUAMEL_YAML_ENV += RUAMEL_NO_PIP_INSTALL_CHECK=1
      
      $(eval $(python-package))
      

      ruamel.yaml 完美安装在目标图像上。

      【讨论】:

        猜你喜欢
        • 2014-10-11
        • 1970-01-01
        • 2013-12-02
        • 2012-11-09
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-28
        相关资源
        最近更新 更多