সেটআপ.পি উদাহরণ?


89

এই পৃষ্ঠাটি অধ্যয়নের পরে:

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

আমি নিজের তৈরি করার জন্য অধ্যয়ন করার জন্য কিছু সেটআপ.পি ফাইল খুঁজে পাওয়ার আশা করছি (ফেডোরা আরপিএম ফাইল তৈরির লক্ষ্য সহ)।

এত সম্প্রদায় আমাকে কিছু ভাল উদাহরণের দিকে নির্দেশ করতে পারে?

উত্তর:


62

এখানেsetup.py স্ক্রিপ্ট লেখার সম্পূর্ণ ওয়াকথ্রু । (কিছু উদাহরণ সহ)

আপনি যদি সত্যিকারের বিশ্বের উদাহরণ চান তবে আমি আপনাকে setup.pyকয়েকটি বড় প্রকল্পের স্ক্রিপ্টগুলির দিকে নির্দেশ করতে পারি । জ্যাঙ্গো এখানে আছে , পাইগলেট এখানে রয়েছে । আরও উদাহরণের জন্য আপনি সেটআপ.পি নামের একটি ফাইলের জন্য অন্যান্য প্রকল্পের উত্স ব্রাউজ করতে পারেন।

এগুলি সাধারণ উদাহরণ নয়; টিউটোরিয়াল লিঙ্কটি আমি দিয়েছি এগুলি আরও জটিল, তবে আরও ব্যবহারিক।


30

অসম্পূর্ণ হওয়া সত্ত্বেও, আপনি প্যাকেজিংয়ের জন্য হিচহাইকারের গাইডটি সহায়ক পেতে পারেন । আমি দ্রুত শুরু টিউটোরিয়াল দিয়ে শুরু করবপাইথন প্যাকেজ সূচীতে পাইথন প্যাকেজগুলির মাধ্যমে কেবল ব্রাউজ করার চেষ্টা করুন । কেবল তারবাল ডাউনলোড করুন, এটি আনপ্যাক করুন এবং setup.pyফাইলটি দেখুন। বা আরও ভাল, কেবল গিটিহাব বা বিটবকেটে হোস্ট করা মতো একটি সর্বজনীন উত্স কোড সংগ্রহস্থলের তালিকাভুক্ত প্যাকেজগুলির দিকে নজর দেওয়া বিরক্ত করুন। আপনি প্রথম পৃষ্ঠার একটিতে চলে যেতে বাধ্য।

আমার চূড়ান্ত পরামর্শটি হ'ল এটির জন্য গিয়ে একটি তৈরি করার চেষ্টা করা; ব্যর্থ হতে ভয় পাবেন না। আমি এগুলি নিজে তৈরি করা শুরু না করা অবধি সত্যই বুঝতে পারি নি। পিপিআইতে একটি নতুন প্যাকেজ তৈরি করা তুচ্ছ এবং এটি অপসারণ করা ঠিক তত সহজ। সুতরাং, একটি ডামি প্যাকেজ তৈরি করুন এবং চারপাশে খেলুন।


26

এই প্রথম https://packaging.python.org/en/latest/current.html পড়ুন

ইনস্টলেশন সরঞ্জামের প্রস্তাবনা

  1. পাইপিআই থেকে পাইথন প্যাকেজ ইনস্টল করতে পাইপ ব্যবহার করুন।
  2. একটি ভাগ করা পাইথন ইনস্টলেশন থেকে অ্যাপ্লিকেশন নির্দিষ্ট নির্ভরতা পৃথক করতে virtualenv বা পাইভেনভ ব্যবহার করুন।
  3. > পরবর্তী ইনস্টলেশনগুলিকে গতি বাড়ানোর উদ্দেশ্যে, চাকা বিতরণের ক্যাশে তৈরি করতে পাইপ হুইল ব্যবহার করুন।
  4. যদি আপনি সম্পূর্ণ ইন্টিগ্রেটেড ক্রস প্ল্যাটফর্ম সফ্টওয়্যার স্ট্যাকগুলির পরিচালনা খুঁজছেন তবে বিল্ডআউট (প্রাথমিকভাবে ওয়েব ডেভলপমেন্ট সম্প্রদায়ের উপর দৃষ্টি নিবদ্ধ করা) বা হ্যাশডিস্ট বা কনডা (উভয়ই প্রাথমিকভাবে বৈজ্ঞানিক সম্প্রদায়ের উপর দৃষ্টি নিবদ্ধ করা) বিবেচনা করুন।

প্যাকেজিং সরঞ্জাম সুপারিশ

  1. প্রকল্পগুলি সংজ্ঞায়িত করতে এবং উত্স বিতরণ তৈরি করতে সেটআপলগুলি ব্যবহার করুন।
  2. চাকা তৈরি করতে চাকা প্রকল্প থেকে উপলব্ধ বিডিস্ট_উইয়েল সেটআপলগুলি এক্সটেনশন ব্যবহার করুন। এটি বিশেষত উপকারী, যদি আপনার প্রকল্পে বাইনারি এক্সটেনশন থাকে।
  3. পিপিআইতে বিতরণগুলি আপলোড করার জন্য সুড়ু ব্যবহার করুন।

এই অ্যানসারটির বয়স হয়েছে এবং প্রকৃতপক্ষে পাইথন প্যাকেজিং ওয়ার্ল্ডের জন্য একটি উদ্ধার পরিকল্পনা রয়েছে

চাকার উপায়

আমি পাইথনওহিলস ডট কম এখানে:

চাকা কি?

চাকাগুলি পাইথন বিতরণের নতুন মান and এবং এটি ডিম প্রতিস্থাপনের উদ্দেশ্যে। সমর্থন পিপ> = 1.4 এবং সেটআপলগুলিতে> = 0.8 এ দেওয়া হয়।

চাকার সুবিধা

  1. খাঁটি অজগর এবং নেটিভ সি এক্সটেনশন প্যাকেজগুলির জন্য আরও দ্রুত ইনস্টলেশন।
  2. ইনস্টলেশনের জন্য স্বেচ্ছাসেবক কোড কার্যকর করা এড়ায়। (সেটআপ.পি এড়ানো)
  3. সি এক্সটেনশান ইনস্টল করার জন্য উইন্ডোজ বা ওএস এক্সে একটি সংকলক প্রয়োজন হয় না।
  4. টেস্টিং এবং ক্রমাগত সংহতকরণের জন্য আরও ভাল ক্যাচিংয়ের অনুমতি দেয়।
  5. ব্যবহৃত পাইথন ইন্টারপ্রেটারের সাথে মেলে তা নিশ্চিত করার জন্য .pyc ফাইলগুলি ইনস্টলেশনের অংশ হিসাবে তৈরি করে।
  6. প্ল্যাটফর্ম এবং মেশিনে আরও সুসংগত ইনস্টল।

সঠিক পাইথন প্যাকেজিংয়ের সম্পূর্ণ কাহিনী (এবং প্রায় চাকা) প্যাকেজিং.পিথন.আর.গ্রে আচ্ছাদিত


কন্ডদা উপায়

বৈজ্ঞানিক কম্পিউটিংয়ের জন্য (এটি প্যাকেজিং.পাইথন.আর.গুজেও প্রস্তাবিত, উপরে দেখুন) আমি কোন্ডা প্যাকেজিং ব্যবহার করা বিবেচনা করব যা পিপিআই এবং পাইপ সরঞ্জামগুলির উপরে একটি তৃতীয় পক্ষের পরিষেবা বিল্ড হিসাবে দেখা যেতে পারে। এটি বিনস্টারের নিজস্ব সংস্করণ স্থাপনেও দুর্দান্ত কাজ করে তাই আমি ভাবতে পারি এটি পরিশীলিত কাস্টম এন্টারপ্রাইজ প্যাকেজ পরিচালনার জন্য কৌশলটি করতে পারে।

কনডা একটি ব্যবহারকারী ফোল্ডারে ইনস্টল করা যেতে পারে (কোনও সুপার ব্যবহারকারী অনুমতি নেই) এবং সাথে যাদুতে কাজ করে

কনডা ইনস্টল

এবং শক্তিশালী ভার্চুয়াল env সম্প্রসারণ।


ডিম উপায়

এই বিকল্পটি পাইথন-ডিস্ট্রিবিউট.আর্গ.এর সাথে সম্পর্কিত ছিল এবং এটি বৃহত্তর পুরানো (পাশাপাশি সাইট) হয়েছে তাই আমি আপনাকে এখনও কমপ্যাক্ট সেটআপ ব্যবহার করার জন্য প্রস্তুত একটির দিকে নির্দেশ করতে পারি py আমার পছন্দ মত উদাহরণগুলি:

  • সেটআপ.পিতে স্ক্রিপ্ট এবং একক পাইথন ফাইলের মিশ্রণের একটি খুব ব্যবহারিক উদাহরণ / বাস্তবায়ন এখানে দেওয়া হচ্ছে
  • হাইপারপট থেকে আরও ভাল একটি

এই উক্তিটি সেটআপ.পি এর স্থিতির গাইড থেকে নেওয়া হয়েছিল এবং এখনও প্রয়োগ হয়:

  • সেটআপ.পি গেছে!
  • দূরে চলে গেল!
  • চলে গেল বিতরণ!
  • এখানে পিপ এবং ভার্চুয়ালেনভ থাকার জন্য!
  • ডিম ... চলে গেছে!

আমি আরও একটি পয়েন্ট যুক্ত করি (আমার কাছ থেকে)

  • চাকা !

আমি বুদ্ধিহীন অনুলিপি-পেস্ট করার চেষ্টা করার আগে প্যাকেজিং-ইকোসিস্টেমের কিছু ধারণা (গোটজেন দ্বারা নির্দেশিত গাইড থেকে) পাওয়ার পরামর্শ দেওয়ার পরামর্শ দেব।

ইন্টারনেটে বেশিরভাগ উদাহরণ দিয়ে শুরু হয়

from distutils.core import setup

তবে উদাহরণস্বরূপ এটি ডিম পাইথন সেটআপ.পি বিডিস্ট_ইজিগ (পাশাপাশি কিছু অন্যান্য পুরানো বৈশিষ্ট্য) তৈরি করতে সমর্থন করে না , যা এতে উপলব্ধ ছিল

from setuptools import setup

এবং কারণ যে, তারা হয় অবচিত

এখন গাইড অনুযায়ী

সতর্কতা

দয়া করে সেটআপলগুলি প্যাকেজের পরিবর্তে বিতরণ প্যাকেজটি ব্যবহার করুন কারণ এই প্যাকেজটিতে এমন সমস্যা রয়েছে যা ঠিক করা যায় না।

অননুমোদিত setuptools দ্বারা প্রতিস্থাপন করা হয় distutils2 , যা "পাইথন 3.3 আদর্শ লাইব্রেরির অংশ হতে হবে"। আমি অবশ্যই বলব যে আমি সেটআপটুল এবং ডিম পছন্দ করেছি এবং ডিস্টুটিস 2 এর সুবিধার দ্বারা এখনও পুরোপুরি নিশ্চিত হতে পারি নি। এটি প্রয়োজন

pip install Distutils2

এবং ইনস্টল করতে

python -m distutils2.run install

পুনশ্চ

প্যাকেজিং কখনই তুচ্ছ ছিল না (নতুনটি বিকাশের চেষ্টা করে কেউ এটি শিখতে পারে), তাই আমি ধরে নিই যে অনেকগুলি কারণ কারণে হয়ে গেছে। আমি শুধু এই সময় এটি আশা করি হবে সঠিকভাবে সম্পন্ন করা হয়।


4
তো, এই উত্তরটির বয়স কত? ডিস্টুটিস 2 পাইথন 3.3 নিয়ে এসেছিল? সেটআপলগুলি মরে গেছে এবং শুকিয়ে গেছে?
ক্যাপি ইথেরিল

আপনি কি "সেটআপ.পাইয়ের অবস্থার গাইড" কে রেফারেন্স দিতে পারেন? কারণ এই "সেটআপ.পি চলে গেছে!" ভূল. এটি 2017 এবং সেটআপ.পি সি এখনও এখানে রয়েছে।
করানটান

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 এর প্যাকেজিংয়ের উপর ভিত্তি করে তৈরি করা হয়েছে , ডিস্টিওলেটগুলির সাথে সেটআপ.পি ব্যবহার করে এবং আরপিএম এবং ডেব প্যাকেজগুলি কীভাবে তৈরি করবেন তা দেখায়।

প্রকল্পের সেটআপ.পি নীচে অন্তর্ভুক্ত করা হয়েছে (সম্পূর্ণ উত্সের জন্য রেপো দেখুন):

#!/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,
      )

এবং আরপিএম স্পেক ফাইল যা কম বেশি ফেডোরা / ইপিইএল প্যাকেজিং নির্দেশিকা অনুসরণ করে তা দেখতে পারে:

# 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

4
দয়া করে, কেবল লিঙ্কগুলি অনুলিপি / আটকানোর পরিবর্তে সেই গুরুত্বপূর্ণ অংশটি বের করার চেষ্টা করুন যা প্রকৃতপক্ষে প্রশ্নের উত্তর দেয়
ফ্রেডমাগিওস্কি

5

আমি সুপারিশ setup.py এর পাইথন প্যাকেজিং ইউজার গাইড এর উদাহরণ প্রকল্পের।

পাইথন প্যাকেজিং ব্যবহারকারী গাইড "বর্তমান সরঞ্জামগুলি ব্যবহার করে পাইথন বিতরণ কীভাবে প্যাকেজ করতে, প্রকাশ করতে ও ইনস্টল করতে হবে সে সম্পর্কে অনুমোদনযোগ্য সংস্থান হতে হবে"।


3

এখানে আপনি ডিস্টুয়েলস এবং সেটআপ.পি ব্যবহারের সহজতম উদাহরণ খুঁজে পাবেন:

https://docs.python.org/2/distutils/intr پيداوار.html#distutils-simple- উদাহরণ

এটি ধরে নিয়েছে যে আপনার সমস্ত কোড একক ফাইলে রয়েছে এবং কীভাবে একটি একক মডিউলযুক্ত একটি প্রকল্পকে প্যাকেজ করতে হয় তা জানায়।


3

দরকারী মন্তব্য এবং লিঙ্কগুলির সাথে একটি সহজ সেটআপ.পি ফাইল (টেমপ্লেট) উত্পন্ন করার জন্য আমি যে ইউটিলিটি লিখেছি তা এখানে । আমি আশা করি, এটি কার্যকর হবে।

স্থাপন

sudo pip install setup-py-cli

ব্যবহার

সেটআপ.পি ফাইল তৈরি করতে কেবল টার্মিনালে টাইপ করুন।

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

উত্পন্ন সেটআপ.পি এর সামগ্রী :

  • বর্তমান ডিরেক্টরিটির নামের ভিত্তিতে প্যাকেজের নাম স্বয়ংক্রিয়ভাবে পূরণ হয়েছে fulfilled
  • কিছু মৌলিক ক্ষেত্র পূরণ করতে।
  • মন্তব্য এবং দরকারী সংস্থাগুলির লিঙ্ক স্পষ্ট করা।
  • স্বয়ংক্রিয়ভাবে থেকে বর্ণনা সন্নিবেশিত README.md বা একটি খালি স্ট্রিং যদি নেই README.md

এখানে সংগ্রহস্থলের লিঙ্ক । সমাধানটি বাড়ানোর জন্য নিখরচায় পূরণ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.