কেউ দয়া করে কী setup.py
তা ব্যাখ্যা করতে পারেন এবং এটি কীভাবে কনফিগার করা বা ব্যবহার করা যেতে পারে?
কেউ দয়া করে কী setup.py
তা ব্যাখ্যা করতে পারেন এবং এটি কীভাবে কনফিগার করা বা ব্যবহার করা যেতে পারে?
উত্তর:
setup.py
পাইথন ফাইল যা সাধারণত আপনাকে জানায় যে আপনি যে মডিউল / প্যাকেজটি ইনস্টল করতে চলেছেন তা প্যাকেজ করা হয়েছে এবং ডিস্টিউটিস দিয়ে বিতরণ করা হয়েছে যা পাইথন মডিউল বিতরণের মান।
এটি আপনাকে সহজেই পাইথন প্যাকেজ ইনস্টল করতে দেয়। প্রায়শই এটি লেখার জন্য যথেষ্ট:
$ pip install .
pip
আপনার মডিউলটি ইনস্টল করতে setup.py ব্যবহার করবে। setup.py
সরাসরি কল করা এড়িয়ে চলুন ।
https://docs.python.org/3/installing/index.html#installing-index
setup.py
ফাইলের উদ্দেশ্যকে বহন করে ।
এটি foo
আপনার মেশিনে পাইথন প্যাকেজ ইনস্টল করতে সহায়তা করে ( এতেও থাকতে পারে virtualenv
) যাতে আপনি foo
অন্যান্য প্রকল্প থেকে এবং [আই] পাইথন প্রম্পট থেকে প্যাকেজটি আমদানি করতে পারেন ।
এটা অনুরূপ পেশা আছে pip
, easy_install
ইত্যাদি
ব্যবহার setup.py
আসুন কিছু সংজ্ঞা দিয়ে শুরু করা যাক:
প্যাকেজ - একটি ফোল্ডার / ডিরেক্টরি যাতে __init__.py
ফাইল থাকে।
মডিউল - .py
এক্সটেনশন সহ একটি বৈধ অজগর ফাইল ।
বিতরণ - কীভাবে একটি প্যাকেজ অন্যান্য প্যাকেজ এবং মডিউলগুলির সাথে সম্পর্কিত ।
ধরা যাক আপনি নামের একটি প্যাকেজ ইনস্টল করতে চান foo
। তাহলে তুমি করো,
$ git clone https://github.com/user/foo
$ cd foo
$ python setup.py install
পরিবর্তে, আপনি যদি বাস্তবে এটি ইনস্টল করতে না চান তবে তবুও এটি ব্যবহার করতে চান। তারপরে,
$ python setup.py develop
এই কমান্ডটি সাইটের অনুলিপিগুলির পরিবর্তে সাইট-প্যাকেজগুলির মধ্যে উত্স ডিরেক্টরিতে প্রতিলিঙ্ক তৈরি করবে। এ কারণে এটি বেশ দ্রুত (বিশেষত বৃহত প্যাকেজগুলির জন্য)।
তৈরি করা হচ্ছে setup.py
আপনার যদি আপনার প্যাকেজ ট্রি থাকে তবে
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
└── setup.py
তারপরে, আপনি আপনার setup.py
স্ক্রিপ্টে নিম্নলিখিতগুলি করুন যাতে এটি কোনও মেশিনে ইনস্টল করা যায়:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
)
পরিবর্তে, যদি আপনার প্যাকেজ ট্রি নীচের মত আরও জটিল হয়:
foo
├── foo
│ ├── data_struct.py
│ ├── __init__.py
│ └── internals.py
├── README
├── requirements.txt
├── scripts
│ ├── cool
│ └── skype
└── setup.py
তারপরে, আপনার setup.py
ক্ষেত্রে এটির মতো হবে:
from setuptools import setup
setup(
name='foo',
version='1.0',
description='A useful module',
author='Man Foo',
author_email='foomail@foo.com',
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
( setup.py
) এ আরও স্টাফ যুক্ত করুন এবং এটিকে শালীন করুন:
from setuptools import setup
with open("README", 'r') as f:
long_description = f.read()
setup(
name='foo',
version='1.0',
description='A useful module',
license="MIT",
long_description=long_description,
author='Man Foo',
author_email='foomail@foo.com',
url="http://www.foopackage.com/",
packages=['foo'], #same as name
install_requires=['bar', 'greek'], #external packages as dependencies
scripts=[
'scripts/cool',
'scripts/skype',
]
)
long_description
ব্যবহার করা হয় pypi.org আপনার প্যাকেজের README বিবরণ হিসাবে।
এবং পরিশেষে, আপনি এখন পাইপআইআরগুলিতে আপনার প্যাকেজটি আপলোড করতে প্রস্তুত যাতে অন্যরা আপনার প্যাকেজটি ব্যবহার করে ইনস্টল করতে পারে pip install yourpackage
।
প্রথম পদক্ষেপটি হ'ল পাইপিতে আপনার প্যাকেজের নাম এবং স্থান দাবি করা:
$ python setup.py register
আপনার প্যাকেজের নামটি নিবন্ধিত হয়ে গেলে, কেউ এটি দাবি বা ব্যবহার করতে পারবেন না। সফল নিবন্ধকরণের পরে, আপনাকে নিজের প্যাকেজটি সেখানে (ক্লাউডে) আপলোড করতে হবে,
$ python setup.py upload
Allyচ্ছিকভাবে, আপনি এর মাধ্যমে আপনার প্যাকেজটিতে স্বাক্ষর করতে পারেন GPG
,
$ python setup.py --sign upload
বোনাস : setup.py
এখানে একটি বাস্তব প্রকল্পের একটি নমুনা দেখুন :torchvision-setup.py
setup.py
একাধিক প্ল্যাটফর্ম ইনস্টলার এবং make
ফাইলের জন্য পাইথনের উত্তর ।
আপনি যদি কমান্ড লাইন ইনস্টলেশনগুলির সাথে পরিচিত হন, তবে এতে make && make install
অনুবাদ করুন python setup.py build && python setup.py install
।
কিছু প্যাকেজ খাঁটি পাইথন, এবং কেবল বাইট সংকলিত হয়। অন্যের মধ্যে নেটিভ কোড থাকতে পারে, যার জন্য নেটিভ সংকলক (যেমন gcc
বা cl
) এবং পাইথন ইন্টারফেসিং মডিউল প্রয়োজন (যেমন swig
বা pyrex
)।
python setup.py install
আসলে python setup.py build
প্রথমে রান করে (যাতে নির্দিষ্ট ক্ষেত্রে না হলে এগুলি আলাদা করে চালানোর দরকার নেই)। আমি বিশ্বাস করি make
দৌড়ানোর আগে সর্বদা ম্যানুয়ালি চালানো দরকার make install
।
make
কোনও নির্দিষ্ট প্যারামিটারের প্রয়োজন হয় না (বা অর্ডার দেওয়া): এটি সম্পূর্ণরূপে Makefile
"টার্গেটগুলি" উপলভ্য (এবং কোন ক্রমে তাদের আহ্বান করা দরকার) স্রষ্টার উপর নির্ভর করে । যেহেতু বেয়ার Makefile
গুলি খুব সাধারণত বহনযোগ্য নয় তাই এগুলি ./configure
(অটোটুল) বা cmake .
(সিএমকে) কমান্ড ব্যবহার করে তৈরি করা হয় এবং এর make
আগে আপনাকে স্পষ্টভাবে চালানো দরকার কি না তা নির্ধারণ করার জন্য এই প্রোগ্রামগুলির মধ্যে রয়েছে make install
।
আপনি যদি রুট ফোল্ডারে "setup.py" প্যাকেজটি ডাউনলোড করেন তবে আপনি এটি চালিয়ে ইনস্টল করতে পারেন
python setup.py install
আপনি যদি একটি প্রকল্প বিকাশ করছেন এবং এই ফাইলটি কীসের জন্য দরকারী তা ভাবছেন, সেটআপ স্ক্রিপ্ট লেখার জন্য পাইথন ডকুমেন্টেশন পরীক্ষা করুন
setup.py
পাইথন স্ক্রিপ্ট যা সাধারণত ভাষাতে লেখা গ্রন্থাগার বা প্রোগ্রাম সহ প্রেরণ করা হয়। এটির উদ্দেশ্য হ'ল সফ্টওয়্যারটির সঠিক ইনস্টলেশন।
অনেক প্যাকেজ distutils
সাথে ফ্রেমে কাঠামো ব্যবহার করে setup.py
।
setup.py দুটি পরিস্থিতিতে ব্যবহার করা যেতে পারে, প্রথমত, আপনি পাইথন প্যাকেজ ইনস্টল করতে চান। দ্বিতীয়ত, আপনি নিজের পাইথন প্যাকেজ তৈরি করতে চান। সাধারণত স্ট্যান্ডার্ড পাইথন প্যাকেজটিতে সেটআপ.পি, সেটআপ সিএফজি এবং ম্যানিফেস্ট.নির মতো কয়েকটি গুরুত্বপূর্ণ ফাইল থাকে। আপনি যখন পাইথন প্যাকেজ তৈরি করছেন, তখন এই তিনটি ফাইল (ডিম-তথ্য ফোল্ডারের অধীনে পিকেজি-ইনফোতে থাকা সামগ্রী) নাম, সংস্করণ, বিবরণ, অন্যান্য প্রয়োজনীয় ইনস্টলেশন (সাধারণত .txt ফাইলে থাকে) এবং কয়েকটি অন্যান্য পরামিতি নির্ধারণ করবে। setup.cfg প্যাকেজ তৈরি হওয়ার সময় setup.py দ্বারা পঠিত হয় (tar.gz হতে পারে)। ম্যানিফেস্ট.ইন যেখানে আপনি আপনার প্যাকেজে অন্তর্ভুক্ত করা উচিত তা নির্ধারণ করতে পারেন। যাইহোক আপনি সেটআপ.পি লাইক ব্যবহার করে গুচ্ছ জিনিসগুলি করতে পারেন
python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo] (to upload package to pypi or local repo)
সেটআপ.পাই ব্যবহার করা যেতে পারে এমন অন্যান্য কমান্ড রয়েছে। সাহায্যের জন্য
python setup.py --help-commands
python setup.py --help-commands
। সেটআপ.পিকে খনন করার সময় খুব দরকারী।
আপনি যখন setup.py
আপনার টার্মিনাল (ম্যাক, লিনাক্স) বা কমান্ড প্রম্পট (উইন্ডোজ) সহ কোনও প্যাকেজ ডাউনলোড করেন । cd
ট্যাব বোতামটি ব্যবহার করে আপনাকে সহায়তা করতে আপনি যেখানে ফাইলটি ডাউনলোড করেছেন এবং যেখানে রয়েছে সেই ফোল্ডারের ডানদিকে সেট করে setup.py
:
iMac:~ user $ cd path/pakagefolderwithsetupfile/
এন্টার টিপুন, আপনার এমন কিছু দেখা উচিত:
iMac:pakagefolderwithsetupfile user$
তারপরে টাইপ করুন python setup.py install
:
iMac:pakagefolderwithsetupfile user$ python setup.py install
টিপুন enter
। সম্পন্ন!
আপনি যে পাইথন প্যাকেজটি ডাউনলোড করেছেন তা ইনস্টল করতে আপনি সংরক্ষণাগারটি বের করে ভিতরে সেটআপ.পি স্ক্রিপ্টটি চালাবেন:
python setup.py install
আমার কাছে এটি সর্বদা অদ্ভুত বোধ করেছে। ডাউনলোডের সময় প্যাকেজ ম্যানেজারটিকে নির্দেশ করা আরও স্বাভাবিক হবে, যেমন রুবি এবং নোডেজ-এ যেমন করা উচিত।gem install rails-4.1.1.gem
একটি প্যাকেজ পরিচালক খুব স্বাচ্ছন্দ্যযুক্ত, কারণ এটি পরিচিত এবং নির্ভরযোগ্য। অন্যদিকে, প্রতিটি setup.py
উপন্যাস, কারণ এটি প্যাকেজের জন্য নির্দিষ্ট। এটি কনভেনশনে বিশ্বাস দাবি করে "আমি এই সেটআপটিকে বিশ্বাস করি py এটি মানসিক ইচ্ছাশক্তি একটি আফসোস ট্যাক্স।
আমি বলছি না যে সেটআপ.পি ওয়ার্কফ্লো কোনও প্যাকেজ ম্যানেজারের চেয়ে কম সুরক্ষিত (আমি বুঝতে পারি পিপটি কেবল ভিতরে সেটআপ.পি চালায়) তবে অবশ্যই আমি মনে করি এটি অদ্ভুত এবং বিরক্তিকর। একই প্যাকেজ ম্যানেজার অ্যাপ্লিকেশনটিতে কমান্ডের সাথে একটি সাদৃশ্য রয়েছে। আপনি এমনকি এটি পছন্দ হতে পারে।
setup.py
অন্য যেকোন একটি পাইথন ফাইল। এটি কোনও নাম নিতে পারে, কনভেনশন বাদে এর নাম দেওয়া হয়েছে setup.py
যাতে প্রতিটি স্ক্রিপ্টের সাথে আলাদা পদ্ধতি না থাকে।
setup.py
পাইথন মডিউল ইনস্টল করতে প্রায়শই ব্যবহৃত হয় তবে সার্ভার অন্যান্য উদ্দেশ্যে:
মডিউল:
সম্ভবত এটি setup.py
মডিউলগুলির মধ্যে সর্বাধিক বিখ্যাত ব্যবহার । যদিও তারা ব্যবহার করে ইনস্টল করা যায় pip
, পুরানো পাইথন সংস্করণগুলি pip
ডিফল্টরূপে অন্তর্ভুক্ত করে না এবং সেগুলি পৃথকভাবে ইনস্টল করা দরকার।
আপনি যদি কোনও মডিউল ইনস্টল করতে চান তবে ইনস্টল করতে না চান pip
তবে কেবলমাত্র বিকল্পটি ছিল setup.py
ফাইল থেকে মডিউলটি ইনস্টল করা । এটি মাধ্যমে অর্জন করা যেতে পারে python setup.py install
। এটি পাইথন মডিউলটি মূল অভিধানে ইনস্টল করবে (ছাড়া pip
, easy_install
ect)।
এই পদ্ধতিটি প্রায়শই ব্যবহৃত হয় যখন pip
ব্যর্থ হবে। উদাহরণস্বরূপ, যদি কাঙ্ক্ষিত প্যাকেজের সঠিক পাইথন সংস্করণ pip
সম্ভবত উপলব্ধ না হয় কারণ এটি আর রক্ষণাবেক্ষণ না করে, উত্সটি ডাউনলোড করে চালানো python setup.py install
একই কাজ করবে, সংকলিত বাইনারিগুলির ক্ষেত্রে ব্যতীত, (তবে এটিকে অবহেলা করা হবে) পাইথন সংস্করণ - ত্রুটি ফিরে না পেয়ে))
এর আর একটি ব্যবহার setup.py
হ'ল উত্স থেকে প্যাকেজ ইনস্টল করা। যদি কোনও মডিউল এখনও বিকাশাধীন থাকে তবে হুইল ফাইলগুলি পাওয়া যাবে না এবং ইনস্টল করার একমাত্র উপায় হ'ল সরাসরি উত্স থেকে ইনস্টল করা।
পাইথন এক্সটেনশনগুলি বিল্ডিং:
যখন একটি মডিউল তৈরি করা হয় তখন এটি একটি ডিস্টিলস সেটআপ স্ক্রিপ্ট ব্যবহার করে বিতরণের জন্য প্রস্তুত মডিউলে রূপান্তরিত হতে পারে । এগুলি তৈরি হয়ে গেলে উপরের কমান্ডটি ব্যবহার করে ইনস্টল করা যেতে পারে।
একটি সেটআপ স্ক্রিপ্ট তৈরি করা সহজ এবং একবার ফাইলটি যথাযথভাবে কনফিগার করা হয়ে যায় এবং চালিয়ে সংকলন করা যায় python setup.py build
(সমস্ত কমান্ডের লিঙ্কটি দেখুন)।
আবার এটি setup.py
ব্যবহারের সুবিধার্থে এবং কনভেনশন অনুসারে নামকরণ করা হয়েছে তবে কোনও নাম নিতে পারে।
Cython:
setup.py
ফাইলগুলির আরেকটি বিখ্যাত ব্যবহারের মধ্যে সংকলিত এক্সটেনশনগুলি অন্তর্ভুক্ত। এর জন্য ব্যবহারকারীর সংজ্ঞায়িত মানগুলির সাথে একটি সেটআপ স্ক্রিপ্ট প্রয়োজন। তারা দ্রুত (তবে একবার সংকলিত প্ল্যাটফর্ম নির্ভর) কার্যকর করার অনুমতি দেয়। ডকুমেন্টেশন থেকে এখানে একটি সাধারণ উদাহরণ :
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = 'Hello world app',
ext_modules = cythonize("hello.pyx"),
)
এটি এর মাধ্যমে সংকলন করা যায় python setup.py build
Cx_Freeze:
সেটআপ স্ক্রিপ্টের জন্য প্রয়োজনীয় আরেকটি মডিউল cx_Freeze
। এটি পাইথন স্ক্রিপ্টকে এক্সিকিউটেবলে রূপান্তর করে। এটি বর্ণনা, নাম, আইকন, প্যাকেজগুলির মতো অনেক কমান্ডকে অন্তর্ভুক্ত করতে, ect বাদ দেয় এবং একবার চালানোর পরে একটি বিতরণযোগ্য অ্যাপ্লিকেশন তৈরি করে। ডকুমেন্টেশন থেকে একটি উদাহরণ :
import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base)])
এটি এর মাধ্যমে সংকলন করা যায় python setup.py build
।
সুতরাং একটি setup.py
ফাইল কি ?
বেশ সহজভাবে এটি একটি স্ক্রিপ্ট যা পাইথন পরিবেশে কিছু তৈরি বা কনফিগার করে।
বিতরণ করা হয় এমন প্যাকেজটিতে কেবল একটি সেটআপ স্ক্রিপ্ট থাকা উচিত তবে একক সেটআপ স্ক্রিপ্টে বেশ কয়েকটি একত্রিত করা অস্বাভাবিক নয়। লক্ষ্য করুন এটি প্রায়শই জড়িত distutils
তবে সর্বদা নয় (যেমন আমি আমার শেষ উদাহরণে দেখিয়েছি)। এটি মনে রাখার বিষয়টি কেবল কোনও উপায়ে পাইথন প্যাকেজ / স্ক্রিপ্টটি কনফিগার করে।
এটি নাম নেয় তাই একই কমান্ডটি সর্বদা নির্মাণ বা ইনস্টল করার সময় ব্যবহার করা যায়।
এটিকে সহজ করার জন্য, সেটআপ.পিটি চালিত হয় "__main__"
আপনি যখন ইনস্টলটি ফাংশনটি কল করেন তখন উল্লিখিত অন্যান্য উত্তরগুলি উত্তর দেয়। Setup.py এর অভ্যন্তরে, আপনার প্যাকেজ ইনস্টল করার জন্য আপনার প্রয়োজনীয় সমস্ত কিছু রাখা উচিত।
নিম্নলিখিত দুটি বিভাগে অনেকগুলি সেটআপ.পি মডিউলগুলির দুটি বিষয় নিয়ে আলোচনা করা হয়েছে।
এই ফাংশনটি আপনাকে প্রকল্পের নাম, সংস্করণটির মতো প্রকল্পের বৈশিষ্ট্যগুলি নির্দিষ্ট করার অনুমতি দেয় .... সবচেয়ে গুরুত্বপূর্ণ বিষয়, এই ফাংশনটি আপনাকে অন্য ফাংশনগুলি সঠিকভাবে প্যাকেজ করা থাকলে ইনস্টল করতে দেয়। Setuptools.setup এর
এই বৈশিষ্ট্যগুলির জন্য এই ওয়েবপৃষ্ঠাটি দেখুন setuptools.setup এর
এই বৈশিষ্ট্যগুলি এই ধরণের প্যাকেজগুলি ইনস্টল করতে সক্ষম করে:
প্যাকেজ আপনার প্রকল্পের এ আমদানি ও তালিকাভুক্ত করা হয় PyPI ব্যবহার setuptools.findpackages :
packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])
প্যাকেজগুলি পিপিআইতে নেই , তবে নির্ভরতা_লিঙ্কগুলি ব্যবহার করে একটি URL থেকে ডাউনলোড করা যেতে পারে
dependency_links=["http://peak.telecommunity.com/snapshots/",]
একটি আদর্শ বিশ্বে, setuptools.setup
আপনার জন্য সমস্ত কিছু পরিচালনা করবে। দুর্ভাগ্যক্রমে এটি সবসময় হয় না। কখনও কখনও আপনাকে নির্দিষ্ট জিনিসগুলি করতে হয়, যেমন এর সাথে নির্ভরতা ইনস্টল করাআপনার প্যাকেজের সঠিক সিস্টেমে আপনি যে সিস্টেমটি ইনস্টল করছেন সেটি পাওয়ার জন্য সাব প্রসেস কমান্ডের করতে হবে। এটি এড়াতে চেষ্টা করুন, এই ফাংশনগুলি বিভ্রান্ত হয় এবং প্রায়শই ওএস এবং এমনকি বিতরণের মধ্যেও পৃথক হয় ।