setup.py примеры?



после изучения этой страницы:



http://docs.python.org/distutils/builtdist.html



Я надеюсь найти некоторые setup.py файлы для изучения, чтобы сделать свой собственный (с целью создания файла Fedora rpm).



может ли сообщество s. o. указать мне на некоторые хорошие примеры?

608   6  

6 ответов:

полное пошаговое руководство по написанию setup.py скрипты здесь. (с некоторыми примерами)

Если вы хотите реальный пример, я мог бы указать вам в направлении setup.py скрипты нескольких крупных проектов. Джанго это здесь, pyglet составляет здесь. Вы можете просто просмотреть источник других проектов для файла с именем setup.py для получения дополнительных примеров.

это не простые примеры; ссылка на учебник, которую я дал, имеет их. Они более сложны, но и более практично.

вы можете найти автостопом руководство по упаковке полезно, даже если он является неполным. Я бы начал с краткое руководство. Попробуйте также просто просматривать пакеты Python на Индекс Пакета Python. Просто скачайте архив, распакуйте его и посмотрите на . Или даже лучше, только беспокоиться о просмотре пакетов, которые перечисляют репозиторий открытого исходного кода, такой как один, размещенный на GitHub или BitBucket. Ты должен бежать. в один на первой странице.

мое последнее предложение-просто пойти на это и попытаться сделать это; не бойтесь потерпеть неудачу. Я действительно не понимал этого, пока не начал делать их сам. Это тривиально, чтобы создать новый пакет на PyPI и так же легко удалить его. Итак, создайте фиктивный пакет и поиграйте.

СНАЧАЛА ПРОЧТИТЕ ЭТОhttps://packaging.python.org/en/latest/current.html

Рекомендации По Установке

  1. используйте pip для установки пакетов Python от Пипи.
  2. использовать виртуальное окружение, или pyvenv, чтобы изолировать конкретных зависимостей приложение от общей установки Python.
  3. используйте pip wheel для создания кэша распределений колес, с целью > ускорения последующая установка.
  4. если вы ищете управление полностью интегрированными кросс-платформенными программными стеками, рассмотрите buildout (в первую очередь ориентированный на сообщество веб-разработчиков) или Hashdist, или conda (оба в первую очередь ориентированы на научное сообщество).

Рекомендации По Упаковке Инструмента

  1. используйте setuptools для определения проектов и создания исходных дистрибутивов.
  2. используйте настройки bdist_wheel расширение доступно из проекта колеса для создания колес. Это особенно полезно, если ваш проект содержит двоичные расширения.
  3. используйте шпагат для загрузки дистрибутивов в PyPI.

этот anwser постарел, и действительно есть план спасения для мира упаковки python под названием

колеса сторону

I qoute pythonwheels.com здесь:

что колеса?

колеса новый стандарт распределения питона и предназначены для замены яиц. Поддержка предлагается в pip > = 1.4 и setuptools >= 0.8.

преимущества колес

  1. более быстрая установка для чистых пакетов расширения python и native C.
  2. позволяет избежать выполнения произвольного кода для установки. (Во избежание setup.py)
  3. Установка расширения C не требует компилятора Окна или OS X.
  4. позволяет лучше кэшировать для тестирования и непрерывного интеграция.
  5. создает .pyc файлы в рамках установки для обеспечения они соответствуют используемому интерпретатору python.
  6. более последовательные установки между платформами и машинами.

полная история правильной упаковки python (и о колесах) рассматривается в packaging.python.org


conda way

для научных вычисление (это также рекомендуется на packaging.python.org, см. выше) я бы рассмотрел использование упаковка CONDA который можно рассматривать как сторонний сервис, построенный поверх инструментов PyPI и pip. Он также отлично работает на создание собственной версии бинстар поэтому я бы предположил, что он может сделать трюк для сложного пользовательского управления корпоративными пакетами.

Conda может быть установлен в папку пользователя (без разрешения суперпользователя) и работает как волшебство с

conda install

и мощное виртуальное расширение env.


яйца Способ

этот параметр был связан с python-distribute.org и в значительной степени устарел (а также сайт) , поэтому позвольте мне указать вам на один из готовых к использованию еще компактных setup.py примеры мне нравятся:

  • очень практический пример / реализация смешивания скриптов и отдельных файлов python в setup.py есть дача здесь
  • еще лучше, один из hyperopt

эта цитата была взята из руководства на состояние setup.py и все еще применяется:

  • setup.py пошли!
  • distutils ушел!
  • распределить ушел!
  • в pip и virtualenv здесь, чтобы остаться!
  • яйца ... ушел!

Я добавляю еще один пункт (от я)

  • колеса!

я бы рекомендовал, чтобы получить некоторое понимание упаковка-экосистемы (из руководства, указанного готгенсом) перед попыткой бездумного копирования-вставки.

большинство примеров там в Интернете начинаются с

from distutils.core import setup

но это, например, не поддерживает создание яйца python setup.py bdist_egg (а также некоторые другие старый особенности), которые были доступны в

from setuptools import setup

и причина в том, что они являются устаревший.

теперь в соответствии с руководством

предупреждение

пожалуйста, используйте пакет Distribute, а не пакет Setuptools потому что есть проблемы в этом пакете, которые могут и не будут зафиксированный.

устаревшие setuptools должны быть заменены distutils2, который "станет частью стандартной библиотеки в Python 3.3". Я должен сказать, что мне понравились setuptools и яйца и еще не были полностью убеждены в удобстве distutils2. Это требует

pip install Distutils2

и установить

python -m distutils2.run install

PS

упаковка никогда не была тривиальной (это можно узнать, пытаясь разработать новый), поэтому я предполагаю, что многие вещи пошли по причине. Я просто надеюсь, что на этот раз это будет сделано правильно.

Я рекомендую setup.py из Руководство Пользователя Python Packaging пример проекта.

руководство пользователя по упаковке Python "стремится быть авторитетным ресурсом о том, как упаковывать, публиковать и устанавливать дистрибутивы Python с использованием текущих инструментов".

здесь вы найдете самый простой пример использования distutils и setup.py:

https://docs.python.org/2/distutils/introduction.html#distutils-simple-example

Это предполагает, что весь ваш код находится в одном файле и говорит, как упаковать проект, содержащий один модуль.

посмотрите на этот полный пример https://github.com/marcindulak/python-mycli из небольшого пакета python. Он основан на рекомендациях по упаковке от https://packaging.python.org/en/latest/distributing.html, использует setup.py с distutils и в дополнение показывает, как создавать пакеты RPM и deb.

проект setup.py включено ниже (см. РЕПО для полного источника):

#!/usr/bin/env python

import os
import sys

from distutils.core import setup

name = "mycli"

rootdir = os.path.abspath(os.path.dirname(__file__))

# Restructured text project description read from file
long_description = open(os.path.join(rootdir, 'README.md')).read()

# Python 2.4 or later needed
if sys.version_info < (2, 4, 0, 'final', 0):
    raise SystemExit, 'Python 2.4 or later is required!'

# Build a list of all project modules
packages = []
for dirname, dirnames, filenames in os.walk(name):
        if '__init__.py' in filenames:
            packages.append(dirname.replace('/', '.'))

package_dir = {name: name}

# Data files used e.g. in tests
package_data = {name: [os.path.join(name, 'tests', 'prt.txt')]}

# The current version number - MSI accepts only version X.X.X
exec(open(os.path.join(name, 'version.py')).read())

# Scripts
scripts = []
for dirname, dirnames, filenames in os.walk('scripts'):
    for filename in filenames:
        if not filename.endswith('.bat'):
            scripts.append(os.path.join(dirname, filename))

# Provide bat executables in the tarball (always for Win)
if 'sdist' in sys.argv or os.name in ['ce', 'nt']:
    for s in scripts[:]:
        scripts.append(s + '.bat')

# Data_files (e.g. doc) needs (directory, files-in-this-directory) tuples
data_files = []
for dirname, dirnames, filenames in os.walk('doc'):
        fileslist = []
        for filename in filenames:
            fullname = os.path.join(dirname, filename)
            fileslist.append(fullname)
        data_files.append(('share/' + name + '/' + dirname, fileslist))

setup(name='python-' + name,
      version=version,  # PEP440
      description='mycli - shows some argparse features',
      long_description=long_description,
      url='https://github.com/marcindulak/python-mycli',
      author='Marcin Dulak',
      author_email='[email protected]',
      license='ASL',
      # https://pypi.python.org/pypi?%3Aaction=list_classifiers
      classifiers=[
          'Development Status :: 1 - Planning',
          'Environment :: Console',
          'License :: OSI Approved :: Apache Software License',
          'Natural Language :: English',
          'Operating System :: OS Independent',
          'Programming Language :: Python :: 2',
          'Programming Language :: Python :: 2.4',
          'Programming Language :: Python :: 2.5',
          'Programming Language :: Python :: 2.6',
          'Programming Language :: Python :: 2.7',
          'Programming Language :: Python :: 3',
          'Programming Language :: Python :: 3.2',
          'Programming Language :: Python :: 3.3',
          'Programming Language :: Python :: 3.4',
      ],
      keywords='argparse distutils cli unittest RPM spec deb',
      packages=packages,
      package_dir=package_dir,
      package_data=package_data,
      scripts=scripts,
      data_files=data_files,
      )

и и RPM spec файл, который более или менее следующие рекомендации по упаковке Fedora/EPEL могут выглядеть так:

# Failsafe backport of Python2-macros for RHEL <= 6
%{!?python_sitelib: %global python_sitelib      %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch:    %global python_sitearch     %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%{!?python_version: %global python_version      %(%{__python} -c "import sys; sys.stdout.write(sys.version[:3])")}
%{!?__python2:      %global __python2       %{__python}}
%{!?python2_sitelib:    %global python2_sitelib     %{python_sitelib}}
%{!?python2_sitearch:   %global python2_sitearch    %{python_sitearch}}
%{!?python2_version:    %global python2_version     %{python_version}}

%{!?python2_minor_version: %define python2_minor_version %(%{__python} -c "import sys ; print sys.version[2:3]")}

%global upstream_name mycli


Name:           python-%{upstream_name}
Version:        0.0.1
Release:        1%{?dist}
Summary:        A Python program that demonstrates usage of argparse
%{?el5:Group:       Applications/Scientific}
License:        ASL 2.0

URL:            https://github.com/marcindulak/%{name}
Source0:        https://github.com/marcindulak/%{name}/%{name}-%{version}.tar.gz

%{?el5:BuildRoot:   %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)}
BuildArch:      noarch

%if 0%{?suse_version}
BuildRequires:      python-devel
%else
BuildRequires:      python2-devel
%endif


%description
A Python program that demonstrates usage of argparse.


%prep
%setup -qn %{name}-%{version}


%build
%{__python2} setup.py build


%install
%{?el5:rm -rf $RPM_BUILD_ROOT}
%{__python2} setup.py install --skip-build --prefix=%{_prefix} \
   --optimize=1 --root $RPM_BUILD_ROOT


%check
export PYTHONPATH=`pwd`/build/lib
export PATH=`pwd`/build/scripts-%{python2_version}:${PATH}
%if 0%{python2_minor_version} >= 7
%{__python2} -m unittest discover -s %{upstream_name}/tests -p '*.py'
%endif


%clean
%{?el5:rm -rf $RPM_BUILD_ROOT}


%files
%doc LICENSE README.md
%{_bindir}/*
%{python2_sitelib}/%{upstream_name}
%{?!el5:%{python2_sitelib}/*.egg-info}


%changelog
* Wed Jan 14 2015 Marcin Dulak <[email protected]> - 0.0.1-1
- initial version

Comments

    Ничего не найдено.