setup.py उदाहरण हैं?


89

इस पृष्ठ का अध्ययन करने के बाद:

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

मैं अपना खुद का बनाने के लिए (फेडोरा आरपीएम फ़ाइल बनाने के लक्ष्य के साथ) अध्ययन करने के लिए कुछ setup.py फ़ाइलों को खोजने के लिए उम्मीद कर रहा हूँ।

क्या ऐसा समुदाय मुझे कुछ अच्छे उदाहरणों की ओर इशारा कर सकता है?

जवाबों:


62

यहाँsetup.py स्क्रिप्ट लिखने का पूरा पूर्वाभ्यास । (कुछ उदाहरणों के साथ)

यदि आप एक वास्तविक दुनिया का उदाहरण चाहते हैं, तो मैं आपको setup.pyकुछ प्रमुख परियोजनाओं की स्क्रिप्ट की ओर इशारा कर सकता हूं । Django के यहाँ है , pyglet's यहाँ है । आप अधिक उदाहरण के लिए setup.py नामक फ़ाइल के लिए अन्य परियोजनाओं के स्रोत को ब्राउज़ कर सकते हैं।

ये सरल उदाहरण नहीं हैं; मेरे द्वारा दिए गए ट्यूटोरियल लिंक में वे हैं। ये अधिक जटिल हैं, लेकिन अधिक व्यावहारिक भी हैं।


30

आपको HitchHiker की गाइड पैकेजिंग के लिए सहायक हो सकती है, भले ही वह अधूरी हो। मैं क्विक स्टार्ट ट्यूटोरियल से शुरुआत करूंगा । पायथन पैकेज इंडेक्स पर केवल पायथन पैकेज के माध्यम से ब्राउज़ करने का प्रयास करें । बस टारबॉल डाउनलोड करें, इसे अनपैक करें, और setup.pyफ़ाइल पर एक नज़र डालें । या इससे भी बेहतर, केवल उन पैकेजों को देखने से परेशान होता है जो एक सार्वजनिक स्रोत कोड रिपॉजिटरी को सूचीबद्ध करते हैं जैसे कि GitHub या BitBucket पर होस्ट किया गया। आप फ्रंट पेज पर एक में चलने के लिए बाध्य हैं।

मेरा अंतिम सुझाव सिर्फ इसके लिए जाना और एक बनाने की कोशिश करना है; असफल होने से डरो मत। मैं वास्तव में इसे तब तक नहीं समझ पाया जब तक मैंने उन्हें खुद बनाना शुरू नहीं किया। यह PyPI पर एक नया पैकेज बनाने के लिए तुच्छ है और इसे हटाने के लिए बस उतना ही आसान है। तो, एक डमी पैकेज बनाएं और चारों ओर खेलें।


26

यह पहले पढ़ें https://packaging.python.org/en/latest/current.html

स्थापना उपकरण अनुशंसाएँ

  1. PyPI से Python पैकेज स्थापित करने के लिए पाइप का उपयोग करें।
  2. एक साझा पायथन इंस्टॉलेशन से अनुप्रयोग विशिष्ट निर्भरता को अलग करने के लिए virtualenv, या pyvenv का उपयोग करें।
  3. >> बाद के इंस्टॉलेशन को तेज करने के उद्देश्य से, व्हील डिस्ट्रीब्यूशन का कैश बनाने के लिए पिप व्हील का उपयोग करें।
  4. यदि आप पूरी तरह से एकीकृत क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर स्टैक के प्रबंधन की तलाश कर रहे हैं, तो बिल्डआउट (मुख्य रूप से वेब विकास समुदाय पर केंद्रित) या हाशिद, या कोंडा (दोनों मुख्य रूप से वैज्ञानिक समुदाय पर केंद्रित) पर विचार करें।

पैकेजिंग उपकरण सिफारिशें

  1. प्रोजेक्ट को परिभाषित करने और सोर्स डिस्ट्रीब्यूशन बनाने के लिए सेटप्टूल का उपयोग करें।
  2. पहिये बनाने के लिए पहिया परियोजना से उपलब्ध bdist_wheel सेप्टूपूल एक्सटेंशन का उपयोग करें। यह विशेष रूप से फायदेमंद है, यदि आपकी परियोजना में बाइनरी एक्सटेंशन शामिल हैं।
  3. PyPI में वितरण अपलोड करने के लिए सुतली का उपयोग करें।

इस anwser की उम्र हो गई है, और वास्तव में अजगर पैकेजिंग दुनिया के लिए एक बचाव योजना है

पहिए का रास्ता

मैं यहाँ pythonwheels.com qoute :

पहिए क्या हैं?

पहिए अजगर के वितरण के नए मानक हैं और इनका उद्देश्य अंडे को बदलना है। समर्थन पाइप> 1.4 और सेप्टुपूल> = 0.8 में पेश किया जाता है।

पहिए के फायदे

  1. शुद्ध अजगर और देशी सी एक्सटेंशन पैकेजों के लिए तेज़ स्थापना।
  2. स्थापना के लिए मनमाना कोड निष्पादन से बचा जाता है। (अवडोम सेटअपो)
  3. सी एक्सटेंशन की स्थापना के लिए विंडोज या ओएस एक्स पर एक कंपाइलर की आवश्यकता नहीं होती है।
  4. परीक्षण और निरंतर एकीकरण के लिए बेहतर कैशिंग की अनुमति देता है।
  5. वे उपयोग किए गए अजगर दुभाषिया से मेल खाने के लिए स्थापना के हिस्से के रूप में .pyc फ़ाइलों को बनाता है।
  6. प्लेटफार्मों और मशीनों पर अधिक सुसंगत इंस्टॉल।

सही अजगर पैकेजिंग (और पहियों के बारे में) की पूरी कहानी में कवर किया जाता है packaging.python.org


कोंडा रास्ता

वैज्ञानिक कंप्यूटिंग के लिए (यह भी पैकेजिंग ओरोमेथ.ओएन पर अनुशंसित है, ऊपर देखें) मैं CONDA पैकेजिंग का उपयोग करने पर विचार करूंगा जिसे PyPI और पाइप टूल्स के शीर्ष पर 3rd पार्टी सर्विस बिल्ड के रूप में देखा जा सकता है। यह भी की अपने स्वयं के संस्करण की स्थापना पर अच्छा काम करता है binstar इसलिए मैंने इसे परिष्कृत कस्टम उद्यम पैकेज प्रबंधन के लिए चाल कर सकते हैं कल्पना कर सकते हैं।

Conda एक उपयोगकर्ता फ़ोल्डर (कोई सुपर उपयोगकर्ता अनुमति) में स्थापित किया जा सकता है और साथ जादू की तरह काम करता है

कोंडा स्थापित करें

और शक्तिशाली आभासी एनवी विस्तार।


अंडे का रास्ता

यह विकल्प python-distribute.org से संबंधित था और यह काफी पुराना (साथ ही साइट) पुराना है, इसलिए मैं आपको अभी तक तैयार किए गए कॉम्पैक्ट सेटअपहोम उदाहरणों में से एक का उपयोग करने के लिए इंगित करता हूं जो मुझे पसंद है:

  • स्क्रिप्ट्स और सिंगल पाइथन फाइलों को setup.py में मिलाने का एक बहुत ही व्यावहारिक उदाहरण / कार्यान्वयन यहाँ दिया जा रहा है
  • हाइपरटॉप से भी बेहतर

यह उद्धरण सेटअप की स्थिति पर मार्गदर्शिका से लिया गया था और अभी भी लागू होता है:

  • setup.py!
  • दूर चला गया!
  • चला गया!
  • पाइप और virtualenv यहाँ रहने के लिए!
  • अंडे ... चला गया!

मैं एक और बिंदु जोड़ता हूं (मुझसे)

  • पहियों !

मैं नासमझ कॉपी-पेस्ट करने से पहले पैकेजिंग-इकोसिस्टम की कुछ समझ पाने के लिए (गेटगेन्स द्वारा बताए गए गाइड से) लेने की सलाह दूंगा।

इंटरनेट में वहाँ के अधिकांश उदाहरणों के साथ शुरू होता है

from distutils.core import setup

लेकिन उदाहरण के लिए इस एक अंडे के निर्माण का समर्थन नहीं करता अजगर setup.py bdist_egg (और साथ ही कुछ अन्य पुराने सुविधाओं) है, जो उपलब्ध में थे

from setuptools import setup

और कारण यह है कि वे पदावनत हैं

अब गाइड के अनुसार

चेतावनी

कृपया सेटपूल के पैकेज के बजाय डिस्ट्रिब्यूट पैकेज का उपयोग करें क्योंकि इस पैकेज में समस्याएं हैं जो तय नहीं की जा सकती हैं और न ही होंगी।

पदावनत setuptools द्वारा प्रतिस्थापित किया जा करने के लिए कर रहे हैं distutils2 है, जो "अजगर 3.3 में मानक पुस्तकालय का हिस्सा होगा"। मुझे कहना चाहिए कि मुझे सेटप्टूल और अंडे पसंद हैं और अभी तक डिस्टुटिल्स 2 की सुविधा से पूरी तरह से आश्वस्त नहीं हुए हैं। इसकी जरूरत है

pip install Distutils2

और स्थापित करने के लिए

python -m distutils2.run install

पी.एस.

पैकेजिंग कभी तुच्छ नहीं थी (एक नया विकसित करने की कोशिश करके यह सीखता है), इसलिए मुझे लगता है कि बहुत सारी चीजें तर्क के लिए चली गई हैं। मुझे उम्मीद है कि इस बार यह सही ढंग से किया जाएगा


4
तो, यह उत्तर कैसे वृद्ध है? क्या distutils2 अजगर 3.3 के साथ आया था? क्या सेटप्टोल्स मर गए और मुरझा गए?
कैपी एथरिएल

क्या आप "सेटअप की स्थिति पर मार्गदर्शिका" का संदर्भ दे सकते हैं? क्योंकि यह "setup.py!" गलत है। यह २०१.py है और अभी भी यहाँ सेटअप किया है।
कार्तन

12

न्यूनतम उदाहरण

from setuptools import setup, find_packages


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

डॉक्स में अधिक जानकारी


5

इस पूरे उदाहरण को देखें एक छोटे अजगर पैकेज का https://github.com/marcindulak/python-mycli । यह https://packaging.python.org/en/latest/distributing.html से पैकेजिंग की सिफारिशों पर आधारित है , डिस्टिल्ट के साथ 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='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,
      )

और RPM कल्पना फ़ाइल जो फेडोरा / 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 <X.Y@Z.com> - 0.0.1-1
- initial version

2
कृपया, लिंक के बजाय बस कॉपी / पेस्ट करने के लिए महत्वपूर्ण हिस्से को निकालने की कोशिश करें जो वास्तव में सवाल का जवाब देता है
fredmaggiowski

5

मैं पायथन पैकेजिंग उपयोगकर्ता गाइड के उदाहरण परियोजना के सेटअप को सलाह देता हूं ।

पायथन पैकेजिंग यूज़र गाइड "का उद्देश्य मौजूदा उपकरणों का उपयोग करके पायथन वितरण को पैकेज, प्रकाशित और स्थापित करने के तरीके पर आधिकारिक संसाधन होना है"।


3

यहाँ आपको डिस्टल्यूट और setup.py का उपयोग करने का सबसे सरल संभव उदाहरण मिलेगा:

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

यह मानता है कि आपका सारा कोड एक ही फाइल में है और बताता है कि किसी एकल मॉड्यूल वाले प्रोजेक्ट को कैसे पैकेज किया जाए।


3

यहां उपयोगी उपयोगिता और लिंक के साथ एक सरल सेटअपहोम फ़ाइल (टेम्प्लेट) बनाने के लिए मैंने जो उपयोगिता लिखी है । मुझे उम्मीद है, यह उपयोगी होगा।

इंस्टालेशन

sudo pip install setup-py-cli

प्रयोग

उत्पन्न करने के लिए setup.py फ़ाइल बस टर्मिनल में टाइप करें।

setup-py

अब मौजूदा निर्देशिका में setup.py फ़ाइल होनी चाहिए।

उत्पन्न सेटअप

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=[]  
)

उत्पन्न की सामग्री setup.py :

  • वर्तमान निर्देशिका के नाम के आधार पर स्वचालित रूप से पूरा किया गया पैकेज नाम।
  • कुछ बुनियादी क्षेत्रों को पूरा करने के लिए।
  • टिप्पणियों और उपयोगी संसाधनों के लिंक को स्पष्ट करना।
  • यदि README.md नहीं है, तो README.md या खाली स्ट्रिंग से स्वचालित रूप से डाला गया विवरण ।

यहाँ रिपॉजिटरी का लिंक दिया गया है। घोल को बढ़ाने के लिए स्वतंत्र भरें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.