При создании рецепта для Yocto нет модуля с именем datetime в python3, но в python2.7 существует datetime - PullRequest
0 голосов
/ 26 сентября 2018

хост-компьютер

Сервер Debian 9.4

Yocto branch

krogoth, BitBake Build Tool Core version 1.30.0

инструмент рабочего процесса

devtool

Требования

Они должны быть доступны в виде python3.5 пакетов на оборудовании

Я хочу создать рецепты для:

  1. pynmea2 v1.7.1
  2. influenxdb-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 Gist

GitHub Gists

Gists для pynmea2 и influenxdb-python

Создание изображений

для локальных тестов я добавляю эти рецепты из папки workspace (автоматически создаваемой devtool) в local.conf в `IMAGE_INSTALL_append =" influenxdb-python pynmea2 "

и записываю образ для оборудования.

Board

На плате я запускаю оболочку python3, чтобы посмотреть, смогу ли я импортировать эти пакеты.Вот вывод из оболочки:

pynmea2 :

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'

influenxdb-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?

local.conf фрагмент

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

Редактировать

Я такжеявно добавлено IMAGE_INSTALL_append = " python3-datetime" в файл local.conf.Но все та же ошибка.

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"

файл манифеста уже содержит datetime?Что я должен изменить в файле, если это необходимо?(Должен ли я добавить его в слой meta-custom?)

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Решение

Я увидел небольшой фрагмент Этот конкретный блог , в котором упоминается python-modules в INSTALL_IMAGE_append.

Посмотрев файл python-3.5-manifest.incупоминается в вопросе;Я увидел, что -modules предоставит мне все основные модули, необходимые для запуска моего приложения.

Test

Следовательно, в файле local.conf я добавил IMAGE_INSTALL_appends = " python3-modules" и загрузилизображение на оборудовании.Этот факт работал отлично.

Теперь в оболочке python3 я не получаю никаких ошибок datetime.

Фрагмент для local.conf сейчас

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

Thisотлично работает.

ps

На данный момент я не уверен, стоит ли мне добавлять ${PYTHON_PN}-modules в RDEPENDS_${PN} для рецептов influxdb-python и pynmea2.

ОБНОВЛЕНИЕ

Я обновил GitHub gists , который теперь добавил ${PYTHON_PN}-modules в RDEPENDS и теперь работает на доске.

Недостаток

Как я понимаю, добавление python3-modules увеличило бы размер вашего изображения, так как для этого нужно добавить много модулей в rootfs.Но эти модули, по-видимому, важны для запуска многих типов приложений, поэтому в этом есть свои преимущества.

0 голосов
/ 27 сентября 2018

Посмотрите на файл python-3.5-manifest.inc внутри source/poky/meta/recipes-devtools/python/python-3.5-manifest.inc

Попробуйте явно вытянуть в python-datetime с:

IMAGE_INSTALL_append += "python3-datetime"

...