在 buildroot 中添加一个 pypi python 包

Ark*_*aik 0 python linux module package buildroot

我正在尝试将 python3-functionfs 模块集成到 buildroot 中。我可以选择它,make menuconfig但是当我运行时make,甚至没有下载包。

该包可在此处获得:functionfs-0.3 pypi 页面
下载地址在此处:functionfs-0.3 下载链接
这里还有 github存储库functionfs git 存储库 我使用的是 Buildroot 2017.02 版本。

这是我的 Config.in 文件:

config BR2_PACKAGE_PYTHON3_FUNCTIONFS
    bool "python3-functionfs"
    depends on BR2_PACKAGE_PYTHON3
    help
        Pythonic API for linux’s functionfs.
        functionfs is part of the usb gadget subsystem. Together with usb_gadget’s configfs integration, allows userland to declare and implement an USB device.

    https://pypi.python.org/pypi/functionfs
Run Code Online (Sandbox Code Playgroud)

这是我的 .mk 文件:

################################################################################
#
# python3-functionfs
#
################################################################################

PYTHON_FUNCTIONFS_VERSION = 0.3
PYTHON_FUNCTIONFS_SOURCE = functionfs-$(PYTHON_FUNCTIONFS_VERSION).tar.gz
PYTHON_FUNCTIONFS_SITE = https://pypi.python.org/packages/e3/2d/56e0d9ffe0da7c116a6724ee538375689dd59e34dbe1676edf6b66b52be4
PYTHON_FUNCTIONFS_LICENSE = GPLv3+
PYTHON_FUNCTIONFS_LICENSE_FILE = COPYING
PYTHON_FUNCTIONFS_SETUP_TYPE = setuptools

$(eval $(python-package))
Run Code Online (Sandbox Code Playgroud)

该文档还在17.8.3 中提到。从 PyPI 存储库生成 python 包

如果您想要为其创建 Buildroot 包的 Python 包在 PyPI 上可用,您可能需要使用位于 utils/ 中的 scanpypi 工具来自动化该过程。

您可以在此处找到现有 PyPI 包的列表。

scanpypi 需要在您的主机上安装 Python 的 setuptools 包。

在 buildroot 目录的根目录下时,只需执行以下操作:

utils/scanpypi foo bar -o package

这将在包文件夹中生成包 python-foo 和 python-bar 如果它们存在于https://pypi.python.org

找到外部 python 模块菜单并将您的包插入其中。请记住,菜单中的项目应按字母顺序排列。

请记住,您很可能必须手动检查包是否有任何错误,因为有些东西是生成器无法猜测的(例如,依赖于任何 python 核心模块,如 BR2_PACKAGE_PYTHON_ZLIB)。另外,请注意许可证和许可证文件是猜测的,必须检查。您还需要手动将包添加到 package/Config.in 文件中。

如果您的 Buildroot 包不在官方 Buildroot 树中,而是在 br2-external 树中,请使用 -o 标志,如下所示:

utils/scanpypi foo bar -o other_package_dir

这将在 other_package_directory 而不是 package.json 中生成包 python-foo 和 python-bar。

选项 -h 将列出可用选项:

utils/scanpypi -h

但是我util/在 buildroot 主目录中没有文件夹。该脚本位于support/scripts/scanpypi但当我运行它时出现以下错误:

$ support/scripts/scanpypi functionfs -o package
Traceback (most recent call last):
  File "support/scripts/scanpypi", line 47, in <module>
    import setuptools
  File "/usr/local/lib/python2.7/dist-packages/setuptools/__init__.py", line 11, in <module>
    from setuptools.extern.six.moves import filterfalse, map
  File "/usr/local/lib/python2.7/dist-packages/setuptools/extern/__init__.py", line 1, in <module>
    from pkg_resources.extern import VendorImporter
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 40, in <module>
    from pkgutil import get_importer
ImportError: cannot import name get_importer
Run Code Online (Sandbox Code Playgroud)

这可以通过重命名support/scripts/pkgutil.py和来解决support/scripts/pkgutil.pyc

但是,我想了解当我尝试自己创建包并且没有下载时发生了什么。


有人知道为什么在运行 make 时没有下载 functionfs-0.3.tar.gz 吗?

Tho*_*oni 5

您的软件包未下载,因为您的软件包名称与 .mk 文件中的变量名称不匹配。基本上,您必须匹配三件事:

  • BR2_PACKAGE_<FOO>Config.in 中的选项
  • 文件名和目录名必须是 package/<foo>/<foo>.mk
  • .mk 文件中的变量必须命名 <FOO>_SOMETHING

您没有说 .mk 文件的名称是什么,但至少您的选项已命名,BR2_PACKAGE_PYTHON3_FUNCTIONFS而 make 变量已命名PYTHON_FUNCTIONFS_SOMETHING

这解释了为什么没有下载它。

然后,关于scanpypi脚本,它肯定utils/在最新版本的Buildroot目录中。它曾经在support/scripts几个版本之前出现过。因此,基本上您正在查看在线的 Buildroot 文档(并与最新版本匹配),但您使用的是较旧的 Buildroot 版本。您可以通过运行构建与您的 Buildroot 版本匹配的 Buildroot 文档make manual-html