setup.py örnekler?


Yanıtlar:


62

Burayasetup.py komut dosyası yazmanın tam yolu . (bazı örneklerle)

Gerçek dünyadan bir örnek isterseniz, sizi setup.pybirkaç büyük projenin senaryosuna yönlendirebilirim . Django burada , pyglet's burada . Daha fazla örnek için setup.py adlı bir dosya için diğer projelerin kaynaklarına göz atabilirsiniz.

Bunlar basit örnekler değil; verdiğim öğretici link bunlara sahip. Bunlar daha karmaşık ama aynı zamanda daha pratik.


30

Eksik olmasına rağmen Otostopçunun Ambalajlama Kılavuzunu faydalı bulabilirsiniz . Hızlı Başlangıç ​​öğreticisiyle başlayacağım . Ayrıca Python Paket Dizinindeki Python paketlerine göz atmayı deneyin . Tarball'ı indirin, paketini açın vesetup.py dosyaya . Daha da iyisi, yalnızca GitHub veya BitBucket üzerinde barındırılanlar gibi genel bir kaynak kodu havuzunu listeleyen paketlere bakmaya zahmet edin. Ön sayfada bir tanesine rastlamak zorundasın.

Son önerim sadece bunun için gidip bir tane yapmayı denemek; başarısız olmaktan korkmayın. Kendim yapmaya başlayana kadar gerçekten anlamadım. PyPI'de yeni bir paket oluşturmak önemsiz ve onu kaldırmak kadar kolaydır. Öyleyse, sahte bir paket oluşturun ve oynayın.


26

ÖNCE BUNU OKUYUN https://packaging.python.org/en/latest/current.html

Kurulum Aracı Önerileri

  1. PyPI'den Python paketlerini kurmak için pip kullanın.
  2. Uygulamaya özel bağımlılıkları paylaşılan bir Python kurulumundan ayırmak için virtualenv veya pyvenv kullanın.
  3. Sonraki kurulumları hızlandırmak amacıyla> tekerlek dağıtımı önbelleği oluşturmak için pip çarkını kullanın.
  4. Tam entegre platformlar arası yazılım yığınlarının yönetimini arıyorsanız, buildout'u (öncelikle web geliştirme topluluğuna odaklanmıştır) veya Hashdist'i veya conda'yı (her ikisi de öncelikle bilimsel topluluğa odaklanmıştır) düşünün.

Paketleme Aracı Önerileri

  1. Projeleri tanımlamak ve Kaynak Dağıtımları oluşturmak için kurulum araçlarını kullanın.
  2. Tekerlekler oluşturmak için tekerlek projesinde bulunan bdist_wheel kurulum araçları uzantısını kullanın. Projeniz ikili uzantılar içeriyorsa, bu özellikle yararlıdır.
  3. Dağıtımları PyPI'ye yüklemek için sicim kullanın.

Bu cevaplayıcı yaşlandı ve gerçekten de python paketleme dünyası için bir kurtarma planı var.

tekerlekler yolu

Ben qoute pythonwheels.com burada:

Tekerlekler nedir?

Tekerlekler yeni python dağıtım standardıdır ve yumurtaların yerini alması amaçlanmıştır. Destek, pip> = 1.4 ve kurulum araçları> = 0.8 olarak sunulur.

Tekerleklerin avantajları

  1. Saf python ve yerel C uzantı paketleri için daha hızlı kurulum.
  2. Kurulum için rastgele kod çalıştırmayı önler. (Setup.py'yi önler)
  3. Bir C uzantısının yüklenmesi, Windows veya OS X üzerinde bir derleyici gerektirmez.
  4. Test ve sürekli entegrasyon için daha iyi önbelleğe alma sağlar.
  5. Kullanılan python yorumlayıcısıyla eşleşmelerini sağlamak için kurulumun bir parçası olarak .pyc dosyaları oluşturur.
  6. Platformlar ve makineler arasında daha tutarlı kurulumlar.

Doğru python paketlemesinin (ve tekerlekler hakkında) tam öyküsü Packaging.python.org adresinde ele alınmaktadır.


Conda yolu

Bilimsel hesaplama için (bu, Packaging.python.org'da da tavsiye edilir, yukarıya bakın) PyPI ve pip araçlarının üzerinde bir 3. taraf hizmet yapısı olarak görülebilen CONDA paketlemeyi kullanmayı düşünürdüm . Ayrıca kendi binstar sürümünüzü kurmak için harika çalışıyor bu yüzden gelişmiş özel kurumsal paket yönetimi için hile yapabileceğini hayal ediyorum.

Conda bir kullanıcı klasörüne kurulabilir (süper kullanıcı izni yoktur) ve sihir gibi çalışır

conda kurulumu

ve güçlü sanal ortam genişletmesi.


yumurta yolu

Bu seçenek python-distribute.org ile ilgiliydi ve büyük ölçüde modası geçmiş (aynı zamanda site), bu nedenle sizi, hoşuma giden, kullanıma hazır ancak kompakt setup.py örneklerinden birine yönlendirmeme izin verin:

  • Komut dosyalarını ve tek python dosyalarını setup.py'ye karıştırmanın çok pratik bir örneği / uygulaması burada veriyor
  • Hyperopt'tan daha da iyisi

Bu alıntı, setup.py durumundaki kılavuzdan alınmıştır ve hala geçerlidir:

  • setup.py gitti!
  • distutils gitti!
  • dağıtmak gitti!
  • pip ve virtualenv burada kalmak için!
  • yumurtalar ... gitti!

Bir puan daha ekliyorum (benden)

  • tekerlekler !

Akılsız kopyalayıp yapıştırmaya başlamadan önce ambalaj ekosistemi hakkında (gotgenes tarafından işaret edilen kılavuzdan) biraz bilgi edinmenizi tavsiye ederim .

İnternetteki örneklerin çoğu,

from distutils.core import setup

ancak bu, örneğin, bir egg python setup.py bdist_egg (ve ayrıca diğer bazı eski özellikler) oluşturmayı desteklemez.

from setuptools import setup

Ve nedeni, kullanımdan kaldırılmış olmalarıdır .

Şimdi rehbere göre

Uyarı

Lütfen Setuptools paketi yerine Distribute paketini kullanın çünkü bu pakette düzeltilebilecek ve düzeltilmeyecek sorunlar var.

kullanımdan kaldırılan kurulum araçları , "Python 3.3'teki standart kitaplığın parçası olacak" distutils2 ile değiştirilecektir . Kurulum araçlarını ve yumurtaları sevdiğimi ve henüz dağıtımların uygunluğuna tamamen ikna olmadığımı söylemeliyim2. Gerektirir

pip install Distutils2

ve yüklemek

python -m distutils2.run install

PS

Ambalaj hiçbir zaman önemsiz olmadı (bunu yeni bir tane geliştirmeye çalışarak öğrenebilirsiniz), bu yüzden pek çok şeyin mantıklı gittiğini varsayıyorum. Sadece bu kez umut olacak doğru yapılır.


4
peki, bu cevap nasıl eskimiş? distutils2, python 3.3 ile geldi mi? Kurulum araçları öldü ve soldu mu?
Capi Etheriel

"Setup.py durumundaki kılavuz" referansını verebilir misiniz? Çünkü bu "setup.py gitti!" Hata. Yıl 2017 ve setup.py si hala burada.
karantan

12

Minimal örnek

from setuptools import setup, find_packages


setup(
    name="foo",
    version="1.0",
    packages=find_packages(),
)

Dokümanlarda daha fazla bilgi


5

Küçük bir python paketinin https://github.com/marcindulak/python-mycli örneğine bakın . Https://packaging.python.org/en/latest/distributing.html'deki paketleme önerilerine dayanmaktadır, distutils ile setup.py'yi kullanır ve ayrıca RPM ve deb paketlerinin nasıl oluşturulacağını gösterir.

Projenin setup.py dosyası aşağıda yer almaktadır (tam kaynak için depoya bakın):

#!/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='X.Y@Z.com',
      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,
      )

ve Fedora / EPEL paketleme kurallarına az çok uyan RPM özellik dosyası şöyle görünebilir:

# 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 <X.Y@Z.com> - 0.0.1-1
- initial version

2
lütfen bağlantıları kopyalayıp yapıştırmak yerine soruyu gerçekten cevaplayan önemli kısmı çıkarmaya çalışın
fredmaggiowski



3

İşte yararlı yorumlar ve bağlantılar içeren basit bir setup.py dosyası (şablon) oluşturmak için yazdığım yardımcı program . Umarım faydalı olur.

Kurulum

sudo pip install setup-py-cli

Kullanım

Setup.py dosyasını oluşturmak için terminali yazmanız yeterlidir .

setup-py

Şimdi setup.py dosyası mevcut dizinde yer almalıdır.

Setup.py oluşturuldu

from distutils.core import setup
from setuptools import find_packages
import os


# User-friendly description from README.md
current_directory = os.path.dirname(os.path.abspath(__file__))
try:
    with open(os.path.join(current_directory, 'README.md'), encoding='utf-8') as f:
        long_description = f.read()
except Exception:
    long_description = ''

setup(
    # Name of the package
    name=<name of current directory>,

    # Packages to include into the distribution
    packages=find_packages('.'), 

    # Start with a small number and increase it with every change you make
    # https://semver.org
    version='1.0.0',

    # Chose a license from here: https://help.github.com/articles/licensing-a-repository
    # For example: MIT
    license='',

    # Short description of your library
    description='',

    # Long description of your library
    long_description = long_description,
    long_description_context_type = 'text/markdown',

    # Your name
    author='', 

    # Your email
    author_email='',     

    # Either the link to your github or to your website
    url='',

    # Link from which the project can be downloaded
    download_url='',

    # List of keyword arguments
    keywords=[],

    # List of packages to install with this one
    install_requires=[],

    # https://pypi.org/classifiers/
    classifiers=[]  
)

Oluşturulan setup.py'nin içeriği :

  • otomatik olarak yerine getirilen paket adı mevcut dizinin adına göre.
  • yerine getirilmesi gereken bazı temel alanlar.
  • Açıklayıcı yorumlar ve faydalı kaynaklara bağlantılar.
  • README.md'den otomatik olarak açıklama veya README.md yoksa boş bir dize eklendi .

İşte arşive giden bağlantı . Çözümü geliştirmek için boş doldurun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.