Эволюция сценария (серия 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”