代码之家  ›  专栏  ›  技术社区  ›  Shan-Desai askovpen

在为Yocto创建配方时,python3中没有名为'datetime'的模块,但是python2.7中存在datetime

  •  1
  • Shan-Desai askovpen  · 技术社区  · 6 年前

    主机

    Debian 9.4服务器

    约克托分行

    krogoth , BitBake Build Tool Core version 1.30.0

    工作流工具

    devtool

    它们应该可以作为 蟒蛇3.5

    我想为以下对象创建食谱:

    1. pynmea2 v1.7.1
    2. influxdb-python v5.2.0

    在我的工作中,我使用以下步骤 $BUILD_DIR

    1. devtool add pynmea2 https://github.com/Knio/pynmea2/archive/v1.7.1.tar.gz
    2. devtool add influxdb-python https://github.com/influxdata/influxdb-python/archive/v5.2.0.tar.gz

    我从工具那里得到食谱。我换了衣服 RDEPENDS_${PN} += "python-re" RDEPENDS_${PN} += "${PYTHON_PN}-re" .inc 文件夹。这些文件在Github中提到

    Gists for pynmea2 and influxdb-python

    图像创建

    对于本地测试,我从 workspace 文件夹(由自动创建) )到 local.conf

    烧录硬件的图像。

    在董事会上,我负责 python3 我想看看是否可以导入这些包。以下是shell的输出:

    平马2 :

    Python 3.5.1 (default, Sep 25 2018, 19:27:54)
    [GCC 5.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pynmea2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3.5/site-packages/pynmea2/__init__.py", line 13, in <module>
        from .types import *
      File "/usr/lib/python3.5/site-packages/pynmea2/types/__init__.py", line 3, in <module>
        from .talker import *
      File "/usr/lib/python3.5/site-packages/pynmea2/types/talker.py", line 3, in <module>
        from ..nmea_utils import *
      File "/usr/lib/python3.5/site-packages/pynmea2/nmea_utils.py", line 2, in <module>
        import datetime
    ImportError: No module named 'datetime'
    

    使用XDB python :

    Python 3.5.1 (default, Sep 25 2018, 19:27:54)
    [GCC 5.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import influxdb
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python3.5/site-packages/influxdb/__init__.py", line 9, in <module>
        from .client import InfluxDBClient
      File "/usr/lib/python3.5/site-packages/influxdb/client.py", line 14, in <module>
        import requests
      File "/usr/lib/python3.5/site-packages/requests/__init__.py", line 58, in <module>
        from . import utils
      File "/usr/lib/python3.5/site-packages/requests/utils.py", line 12, in <module>
        import cgi
      File "/usr/lib/python3.5/cgi.py", line 30, in <module>
        from email.parser import FeedParser
      File "/usr/lib/python3.5/email/parser.py", line 12, in <module>
        from email.feedparser import FeedParser, BytesFeedParser
      File "/usr/lib/python3.5/email/feedparser.py", line 27, in <module>
        from email import message
      File "/usr/lib/python3.5/email/message.py", line 16, in <module>
        from email import utils
      File "/usr/lib/python3.5/email/utils.py", line 30, in <module>
        import datetime
    ImportError: No module named 'datetime'
    

    如果我运行 python 命令板上的命令并尝试 import datetime ,模块存在。

    datetime 作为模块提供 python 3.5 ?

    代码段

    IMAGE_INSTALL_append = " python3 python3-dev python3-enum pynmea2 influxdb-python python3-pyserial " 
    

    我还明确补充说 IMAGE_INSTALL_append = " python3-datetime" 文件。但还是一样的错误。

    python-3.5-manifest.inc

    SUMMARY_${PN}-modules="All Python modules"
    RDEPENDS_${PN}-modules="${PN}-2to3 ${PN}-argparse ${PN}-asyncio ${PN}-audio ${PN}-codecs ${PN}-compile ${PN}-compression ${PN}-core ${PN}-crypt ${PN}-ctypes ${PN}-curses ${PN}-datetime ${PN}-db ${PN}-debugger ${PN}-difflib ${PN}-distutils ${PN}-doctest ${PN}-email ${PN}-enum ${PN}-fcntl ${PN}-gdbm ${PN}-html ${PN}-idle ${PN}-image ${PN}-importl
    ib ${PN}-io ${PN}-json ${PN}-lang ${PN}-logging ${PN}-mailbox ${PN}-math ${PN}-mime ${PN}-mmap ${PN}-multiprocessing ${PN}-netclient ${PN}-netserver ${PN}-numbers ${PN}-pickle ${PN}-pkgutil ${PN}-pprint ${PN}-profile ${PN}-pydoc ${PN}-re ${PN}-readline ${PN}-reprlib ${PN}-resource ${PN}-selectors ${PN}-shell ${PN}-signal ${PN}-smtpd ${PN}-sqlit
    e3 ${PN}-sqlite3-tests ${PN}-stringold ${PN}-subprocess ${PN}-syslog ${PN}-terminal ${PN}-tests ${PN}-textutils ${PN}-threading ${PN}-tkinter ${PN}-unittest ${PN}-unixadmin ${PN}-xml ${PN}-xmlrpc  "
    ALLOW_EMPTY_${PN}-modules = "1"
    

    清单文件已存在 在里面?如果有必要,我应该在文件中更改什么(我应该把它加进去吗 meta-custom 层?)

    2 回复  |  直到 6 年前
        1
  •  1
  •   User3219    6 年前

    看一看这个 python-3.5-manifest.inc source/poky/meta/recipes-devtools/python/python-3.5-manifest.inc

    IMAGE_INSTALL_append += "python3-datetime"

        2
  •  0
  •   Shan-Desai askovpen    6 年前

    解决方案

    我看到一小段 This particular blogpost 其中提到使用 python-modules INSTALL_IMAGE_append .

    python-3.5-manifest.inc 问题中提到的文件;我看到 -modules 将提供我的应用程序运行所需的所有基本模块。

    试验

    因此,在 local.conf 我添加的文件 IMAGE_INSTALL_appends = " python3-modules" 并将图像加载到硬件上。这个事实非常有效。

    现在在python3外壳中,我没有收到任何 datetime

    的代码段 本地.conf 现在

    IMAGE_INSTALL_append = " python3-modules influxdb-python pynmea2 pyserial"
    

    这个很好用。

    附笔

    在这一点上我不确定我是否应该补充 ${PYTHON_PN}-modules RDEPENDS_${PN} 关于 influxdb-python pynmea2 .

    更新

    GitHub gists 现在又加上 RDEPENDS 在董事会上也很有效。

    缺点

    作为一个整体,我理解添加 python3-modules 因为它需要在rootfs中添加很多模块,所以会增加您的图像占用空间。但是这些模块对于运行许多类型的应用程序来说似乎很重要,所以它有一个好处。