Рубрики
Без рубрики

Публикация приложений Python в Anaconda и дальнейшая автоматизация

Эйа, ребята, Код этого поста можно найти на GitHub (см. Здесь). Когда был файл setup.py alr … Tagged с помощью инструментов, DevOps, производительности, Python.

Эволюция сценария (серия 9 частей)

Эйа, ребята,

Код этого поста можно найти на GitHub (см. здесь ).

Когда setup.py Файл уже был создан, довольно просто сделать шаг вперед и создать Anaconda упаковка. Пакеты Anaconda хранят необходимые метаданные в рамках Meta.yaml Файл, но когда setup.py Файл уже был создан, его данные могут быть легко импортированы с помощью шаблона Jinja2.

{% set data = load_setup_py_data() %}

package:
  name: 'tihttp'
  version: {{ data['version'] }}

source:
  path: ..

build:
  number: 0
  entry_points:
    {% for entry_point in data['entry_points']['console_scripts'] %}
    - {{ entry_point }}
    {% endfor %}
  script: python -m pip install --no-deps --ignore-installed .

requirements:
  build:
    - python
    - pip
    - setuptools

  run:
    - python
    {% for dep in data['install_requires'] %}
    - {{ dep.lower() }}
    {% endfor %}

test:
  imports:
    - {{ data['name'] }}
  source_files:
    - tests
  requires:
    {% for test_dep in data['extras_require']['dev'] %}
    - {{ test_dep.lower() }}
    {% endfor %}
  commands:
    - pytest tests

about:
  home: {{ data['url'] }}
  license: {{ data['license'] }}
  summary: {{ data['description'] }}
  doc_source_url: {{ data['url'] + '/blob/master/README.md' }}

Теперь мы можем построить пакет.

$ conda build .

Сгенерированный файл tihttp-0.1.0-py37_0.tar.bz2 можно найти в Anaconda3/conda-build/linux-64 каталог. Чтобы загрузить пакет в репозиторий Anaconda, мы должны зарегистрироваться, а затем мы можем использовать Anaconda загрузка командование Пакет был загружен на ваш канал и теперь готов к распространению! 😙

$ anaconda upload home/niklas/anaconda3/conda-build/linux-64/tihttp-0.1.0-py37_0.tar.bz2

$ conda install -c niklastiede tihttp

Но создание и загрузку пакетов для разных версий интерпретатора Python и различных операционных систем утомительно. Эта работа может быть автоматизирована сценарием:

#!/bin/bash

export PATH=~/anaconda3/bin:$PATH
pkg='tihttp'
array=( 3.6 3.7 3.8 3.9 )


# delete old built packages
if [[ -d $HOME/conda-bld/ ]]; then
    rm -r $HOME/conda-bld/
fi
for i in $HOME/anaconda3/conda-bld/linux-64/$pkg*; do
    echo $i
    rm $i
done
echo "Deleting old conda packages done!"


# building conda packages
for i in "${array[@]}"
do
    echo $i
    conda build --py $i .
done
echo "Building conda packages done!"


# converting conda packages to other platforms
platforms=( osx-64 linux-32 linux-64 win-32 win-64 )
for file in $HOME/anaconda3/conda-bld/linux-64/$pkg*; do
    echo $file
    conda convert --platform all $file  -o $HOME/conda-bld/
    for platform in "${platforms[@]}"
    do
        conda convert --platform $platform $file  -o $HOME/conda-bld/
    done
done
echo "converting packages to other platforms done!"


# uploading packages
find $HOME/conda-bld/**/$pkg*.tar.bz2 | while read file
do
    anaconda upload $file
done
echo "Uploading conda packages done!"

Вместо того, чтобы автоматизировать процесс сборки локально, мы могли бы вместо этого использовать это хорошее действие GitHub Публикуйте Conda ! Вот фрагмент кода для рабочего процесса:

name: publish_conda

on:
  release:
    types: [published]

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: publish-to-conda
      uses: fcakyon/conda-publish-action@v1.3
      with:
        subdir: 'conda'
        anacondatoken: ${{ secrets.ANACONDA_TOKEN }}
        platforms: 'win osx linux'

Мир Анаконды отлично справляется с сообществом науки о данных, и я надеюсь, что этот пост уменьшит барьер для публикации вещей в Анаконде. 😄 Желаю вам прекрасного времени!

Эволюция сценария (серия 9 частей)

Оригинал: “https://dev.to/niklastiede/publishing-python-apps-at-anaconda-and-further-automation-10a0”