setup.py примеры?
после изучения этой страницы:
http://docs.python.org/distutils/builtdist.html
Я надеюсь найти некоторые setup.py файлы для изучения, чтобы сделать свой собственный (с целью создания файла Fedora rpm).
может ли сообщество s. o. указать мне на некоторые хорошие примеры?
6 ответов:
полное пошаговое руководство по написанию
setup.pyскрипты здесь. (с некоторыми примерами)Если вы хотите реальный пример, я мог бы указать вам в направлении
setup.pyскрипты нескольких крупных проектов. Джанго это здесь, pyglet составляет здесь. Вы можете просто просмотреть источник других проектов для файла с именем setup.py для получения дополнительных примеров.это не простые примеры; ссылка на учебник, которую я дал, имеет их. Они более сложны, но и более практично.
вы можете найти автостопом руководство по упаковке полезно, даже если он является неполным. Я бы начал с краткое руководство. Попробуйте также просто просматривать пакеты Python на Индекс Пакета Python. Просто скачайте архив, распакуйте его и посмотрите на . Или даже лучше, только беспокоиться о просмотре пакетов, которые перечисляют репозиторий открытого исходного кода, такой как один, размещенный на GitHub или BitBucket. Ты должен бежать. в один на первой странице.
мое последнее предложение-просто пойти на это и попытаться сделать это; не бойтесь потерпеть неудачу. Я действительно не понимал этого, пока не начал делать их сам. Это тривиально, чтобы создать новый пакет на PyPI и так же легко удалить его. Итак, создайте фиктивный пакет и поиграйте.
СНАЧАЛА ПРОЧТИТЕ ЭТОhttps://packaging.python.org/en/latest/current.html
Рекомендации По Установке
- используйте pip для установки пакетов Python от Пипи.
- использовать виртуальное окружение, или pyvenv, чтобы изолировать конкретных зависимостей приложение от общей установки Python.
- используйте pip wheel для создания кэша распределений колес, с целью > ускорения последующая установка.
- если вы ищете управление полностью интегрированными кросс-платформенными программными стеками, рассмотрите buildout (в первую очередь ориентированный на сообщество веб-разработчиков) или Hashdist, или conda (оба в первую очередь ориентированы на научное сообщество).
Рекомендации По Упаковке Инструмента
- используйте setuptools для определения проектов и создания исходных дистрибутивов.
- используйте настройки bdist_wheel расширение доступно из проекта колеса для создания колес. Это особенно полезно, если ваш проект содержит двоичные расширения.
- используйте шпагат для загрузки дистрибутивов в PyPI.
этот anwser постарел, и действительно есть план спасения для мира упаковки python под названием
колеса сторону
I qoute pythonwheels.com здесь:
что колеса?
колеса новый стандарт распределения питона и предназначены для замены яиц. Поддержка предлагается в pip > = 1.4 и setuptools >= 0.8.
преимущества колес
- более быстрая установка для чистых пакетов расширения python и native C.
- позволяет избежать выполнения произвольного кода для установки. (Во избежание setup.py)
- Установка расширения C не требует компилятора Окна или OS X.
- позволяет лучше кэшировать для тестирования и непрерывного интеграция.
- создает .pyc файлы в рамках установки для обеспечения они соответствуют используемому интерпретатору python.
- более последовательные установки между платформами и машинами.
полная история правильной упаковки 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 installPS
упаковка никогда не была тривиальной (это можно узнать, пытаясь разработать новый), поэтому я предполагаю, что многие вещи пошли по причине. Я просто надеюсь, что на этот раз это
будетсделано правильно.
Я рекомендую 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