Snapcraft Python2 сборка с помощью python-dev

Только начинаю пачкать мои руки мгновенно. Я пытаюсь перенести проект Python в приложение Snappy. Код Python опирается на Numpy 1.5.1, которая основана на установке Python-Dev.

Мой раздел деталей Snapcraft выглядит так:

parts:
    mypythonapp:
        plugin: python2
        source: https://github.com/me/mypythonapp.git
        source-type: git
        build-packages:
            - gcc
            - gfortran
            - libblas-dev
            - liblapack-dev
            - cython
            - python-dev
        python-packages:
            - numpy==1.5.1

Когда я snapcraft pull он пытается построить NumPy, но ошибки с:

    x86_64-linux-gnu-gcc: build/src.linux-x86_64-2.7/numpy/core/src/npymath/ieee754.c
        In file included from numpy/core/src/npymath/ieee754.c.src:7:0:
        numpy/core/src/npymath/npy_math_common.h:4:20: fatal error: Python.h: No such file or directory
        compilation terminated.
        In file included from numpy/core/src/npymath/ieee754.c.src:7:0:
        numpy/core/src/npymath/npy_math_common.h:4:20: fatal error: Python.h: No such file or directory
        compilation terminated.

error: Command "x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -I/home/me/Code/mypythonapp-snap/parts/mypythonapp/install/usr/include -I/home/me/Code/mypythonapp-snap/parts/mypythonapp/install/usr/include -I/home/me/Code/mypythonapp-snap/parts/mypythonapp/install/usr/include/x86_64-linux-gnu -I/home/me/Code/mypythonapp-snap/parts/mypythonapp/install/usr/include -I/home/me/Code/mypythonapp-snap/parts/mypythonapp/install/usr/include -I/home/me/Code/mypythonapp-snap/parts/mypythonapp/install/usr/include/x86_64-linux-gnu -fPIC -Inumpy/core/include -Ibuild/src.linux-x86_64-2.7/numpy/core/include/numpy -Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/include -Ibuild/src.linux-x86_64-2.7/numpy/core/src/multiarray -Ibuild/src.linux-x86_64-2.7/numpy/core/src/umath -c build/src.linux-x86_64-2.7/numpy/core/src/npymath/ieee754.c -o build/temp.linux-x86_64-2.7/build/src.linux-x86_64-2.7/numpy/core/src/npymath/ieee754.o"

я могу найти Python.h расположен в ./parts/mypythonapp/install/usr/include/python2.7/Python.h, Когда я смотрю на все включенные пути, я замечаю, что usr/include/python2.7 не там.

Есть ли для меня путь для включения пути, похожего на флаги конфигурации плагина autotools? Или я что-то упустил?

редактировать: я добился определенного прогресса, изменив env функция в плагине python2, расположенном в /usr/lib/python3/dist-packages/snapcraft/plugins/python2.py

Оригинальная функция выглядела так:

  def env(self, root):
    # This is until we figure out how to get pip to download only
    # and then build in the build step or split out pulling
    # stage-packages in an internal private step.
    env = [
        'CPPFLAGS="-I{} $CPPFLAGS"'.format(os.path.join(
            root, 'usr', 'include')),
        'CFLAGS="-I{} $CFLAGS"'.format(os.path.join(
            root, 'usr', 'include')),
    ]

Я изменил это так:

def env(self, root):
    # This is until we figure out how to get pip to download only
    # and then build in the build step or split out pulling
    # stage-packages in an internal private step.
    env = [
        'CPPFLAGS="-I{} $CPPFLAGS"'.format(os.path.join(
            root, 'usr', 'include')),
        'CFLAGS="-I{} $CFLAGS"'.format(os.path.join(
            root, 'usr', 'include')),
        'CPPFLAGS="-I{} $CPPFLAGS"'.format(os.path.join(
            root, 'usr', 'include', 'python2.7')),
        'CFLAGS="-I{} $CFLAGS"'.format(os.path.join(
            root, 'usr', 'include' 'python2.7')),
    ]

Теперь он поднимает Python.h, но он не может найти scalartypes.c

x86_64-linux-gnu-gcc: numpy/core/src/multiarray/multiarraymodule_onefile.c
    numpy/core/src/multiarray/multiarraymodule_onefile.c:10:25: fatal error: scalartypes.c: No such file or directory
    compilation terminated.
    numpy/core/src/multiarray/multiarraymodule_onefile.c:10:25: fatal error: scalartypes.c: No such file or directory
    compilation terminated.

0 ответов

То, что вы делаете, кажется неправильным, это создает конфликт:

  • plugin: python2 который ожидает setup.py
  • python-packages: - numpy==1.5.1 включены numpy пакет python как зависимость, почему вы сказали его создание.
  • build-packages: - gcc - gfortran - libblas-dev - liblapack-dev - cython - python-dev добавлены все эти инструменты и библиотеки C/CPP, например, сборка может быть make, autotools,.. проект

В вопросе отсутствует исходный код или ссылка на него для просмотра и воспроизведения. Однако я бы рекомендовал:

  • Разделить Parts: и установите plugin необходимо для каждого, проверив источник / документ.
  • Закажите процесс сборки, используя: after
  • Действительно ли необходимо создать конкретную версию зависимости или предварительно собранный пакет из репозитория достаточно? Увидеть stage-snaps & stage-packages.
Другие вопросы по тегам