কীভাবে সেটআপ.পি ফাইল ব্যবহার না করে উত্স বিতরণ তৈরি করবেন?


10

নিম্নলিখিত প্যাকেজ কাঠামো সহ

.
├── my_package
   └── __init__.py
├── setup.cfg
└── setup.py

বিষয়বস্তু setup.py

from setuptools import setup
setup()

বিষয়বস্তু setup.cfg

[metadata]
name = my_package
version = 0.1

[options]
packages = find:

আমি চাকা বা জন্য একটি উৎস বন্টন নির্মাণ করতে পারেন my_packageমত এই

pip wheel --no-deps -w dist .
# generates file ./dist/my_package-0.1-py3-none-any.whl
python setup.py sdist
# generates file ./dist/my_package-0.1.tar.gz

তবে সেটআপটুলগুলির রক্ষণাবেক্ষণকারী অনুসারে , একটি ঘোষিত বিল্ড কনফিগারেশন আদর্শ এবং একটি অত্যাবশ্যক বিল্ড ব্যবহার করা কোড গন্ধ হতে চলেছে। সুতরাং আমরা প্রতিস্থাপন setup.pyসঙ্গে pyproject.toml:

.
├── my_package
   └── __init__.py
├── setup.cfg
└── pyproject.toml

বিষয়বস্তু pyproject.toml

[build-system]
build-backend = "setuptools.build_meta"
requires = ["setuptools", "wheel"]

এবং আপনি এখনও আগের মতো একইভাবে একটি চাকা তৈরি করতে পারেন, এটি কাজ করে। কিন্তু sdist কাজ করে না:

python: can't open file 'setup.py': [Errno 2] No such file or directory

সুতরাং আপনি কীভাবে সেটআপলগুলি ব্যবহার করে .tar.gz ফাইলটি তৈরি করবেন ? Sdist তৈরির জন্য ব্যবহারকারী-মুখী সরঞ্জাম কী? আমি বিল্ড ব্যাকএন্ড পরিবর্তন করতে চাই না। দেখে মনে হচ্ছে এটি অন্যান্য প্যাকেজিংয়ের সরঞ্জামগুলি তাদের নিজস্ব বিল্ড এন্ট্রি পয়েন্টগুলি লিখেছিল, তবে আমি ভেবেছিলাম মেটাডাটাতে ডিক্লেয়ারিং বিল্ড সিস্টেমটি সংজ্ঞায়নের পুরো পয়েন্টটি যাতে আপনাকে বিল্ড সিস্টেমের সাথে হাতছাড়া করতে না হয়, প্রতিটি কীভাবে শিখছে বিভিন্ন প্যাকেজিং সরঞ্জাম প্রত্যাশিত হতে পারে বা দোভাষীর কাছে যেতে এবং পাইথন এপিআই ম্যানুয়ালি কল করে। তবে বিল্ড সিস্টেমের প্রয়োজনীয়তার জন্য পিইপি এখন 2 বছরেরও বেশি পুরানো। আমি কি এখানে স্পষ্ট কিছু মিস করছি?

setup.pyফাইল ব্যবহার না করে কীভাবে উত্স বন্টন তৈরি করবেন ?

উত্তর:


10

এটি কিছুটা বিতর্কিত বিষয় এবং এই মুহুর্তের উত্তরটি হ'ল যে কোনও একক হাতিয়ারই নেই যার সাথে প্রত্যেকে সম্মত হয় উত্স বিতরণ তৈরির "সঠিক উপায়", না সেই সরঞ্জামটি কী হবে। পাইথন প্যাকেজিং ডিসকোর্সে আপনি এটি সম্পর্কে একটি দীর্ঘ থ্রেড দেখতে পারেন ।

আমি টেকসই বিন্যাসে অত্যধিক প্যাকেজিং উপদেশ দিতে কারণ বালি সবসময় নাড়াচাড়া করছে দ্বিধা কিন্তু নভেম্বর 2019 থেকে, setup.py sdistহয় না অবচিত, কিন্তু এটা না যে PEP 517 এবং PEP 518 ফিক্স করার উদ্দেশ্যে ছিল তাদের সকলের মূল্যবান আছে - আছে যথা আপনি বিল্ড পরিবেশটি নিজে তৈরি করতে (এবং সমস্ত বিল্ড নির্ভরতা সম্পর্কে জানুন) এবং এটি কেবল সেটআপল / ডিস্টুয়েলস এবং তাদের সমতুল্যর সাথে কাজ করে with

এটি কোনও "অফিসিয়াল" সুপারিশ নয়, তবে বর্তমান কমান্ড লাইন সংস্করণটির জন্য সেরা প্রতিস্থাপন setup.py sdistএবং setup.py bdist_wheelপ্রার্থনা করছে pep517। এর প্রতিস্থাপনটি sdistহ'ল:

python -m pep517.build --source .

আপনি একই সময়ে একই সময়ে চাকা এবং উত্স বিতরণ তৈরি করতে পারেন:

python -m pep517.build --source --binary .

এইভাবে আমি আমার পিইপি 517- সামঞ্জস্যপূর্ণ প্যাকেজগুলি তৈরি করি।

এই প্রয়োজন যে আপনার প্রকল্পের একটি আছে pyproject.toml, এবং pyproject.tomlথাকতে হবে build-system.requiresএবং build-system.build-backendকী, কিন্তু এটা (সহ একটি PEP 517 সামঞ্জস্যপূর্ণ ব্যাকএন্ড সঙ্গে কোনো প্রকল্পের জন্য কাজ করবে flit)।

অন্যান্য সরঞ্জাম :

ব্যবহার করবেন কেন flitবা poetryবা hatch? যারা সেগুলি ব্যবহার করতে চান তাদের জন্য tools সরঞ্জামগুলি সমস্ত উপলব্ধ, তবে তারা এই প্রশ্নের উত্তর নয় । এই প্রশ্নটি setuptoolsঘোষণামূলক setup.cfgফর্ম্যাটটি ব্যবহার করে নির্মিত প্রকল্পগুলির বিষয়ে জিজ্ঞাসা করছে। আমরাও flitনা poetryজেনেরিক PEP 517 বিল্ড ফ্রন্ট প্রান্ত হিসাবে কাজ, এবং তাই তারা শুধুমাত্র প্রকল্পগুলির জন্য বিল্ড কমান্ড হিসেবে কাজ তাদের নিজ নিজ ব্যাক-এন্ডের ব্যবহার করে।

আমি পরিচিত যথেষ্ট সঙ্গে আছি hatchবলতে থাকুক বা না থাকুক এটা ব্যাক-এন্ডের সঙ্গে প্রকল্প পরিচালনা করতে পারেন অন্যান্য (আবার নভেম্বর 2019 হিসাবে,) setuptools চেয়ে, কিন্তু, এটা না একটি PEP 517 ফ্রন্টএন্ড, এবং এটি আপনাকে থাকবে না কাজ যদি না একটি setup.py(এটি ত্রুটি উত্থাপন করবে "ফাইল সেটআপ.পি খুলতে পারে না", এবং এটি আপনার pyproject.tomlফাইলটিকে উপেক্ষা করবে )।


pep517.buildঝাঁকুনি, কবিতা, হ্যাচ, এবং সম্ভবত আরও বেশি উত্পাদনশীল সরঞ্জাম রয়েছে যখন কেবলমাত্র একটি পরীক্ষা হিসাবে একটি সাময়িক ক্রাচ হিসাবে বোঝানো কেন ?
sinoroc

1
কারণ এটি আমার অনুমানের একটি সফল পরীক্ষা ছিল (আমি এবং অন্যান্য পিপিএর লোকেরা এটি ব্যবহার করে), কারণ এটির কাজের জন্য সঠিক শব্দার্থবিজ্ঞান রয়েছে, এবং কারণ এটি কেবলমাত্র সাধারণ-উদ্দেশ্য পিইপি 517 বিল্ট ফ্রন্ট-এ যা আমি জানি। ফ্লিট এবং কবিতা উল্লম্বভাবে একীভূত হয়েছে যাতে তারা আশা করে যে আপনি তাদের ব্যাকএন্ড ব্যবহার করবেন। হ্যাচ অন্য অনেক কিছু করতে দেখা যায়। pep517.buildঠিক এই উদ্দেশ্যে নির্মিত একটি সাধারণ সরঞ্জাম।
পল

আহ ঠিক আছে, ভাল পয়েন্ট। আমি বিল্ড ব্যাক-এন্ডে ফোকাস করছিলাম। এবং আমি আসলে ভেবেছিলাম pep517.buildতাদের মধ্যে একটি thought তবে মোটেও তা নয়, এটি আসলে একটি বিল্ড ফ্রন্ট-এন্ড। এছাড়াও হ্যাচ এখনই দেখছি হিসাবে পিইপি 517 প্রস্তুত নয়।
সিনোরোক

1
আপনার প্রশ্নের সমাধানের জন্য আমি আমার উত্তর আপডেট করেছি।
পল

হ্যাঁ যথাযথ. আমি আমার উত্তর মোছা।
sinoroc

-1

পাইথন প্যাকেজিংয়ের ক্ষেত্রে "সুস্পষ্ট" কিছুই নেই। প্রকৃতপক্ষে, আপাতত, আপনি যদি ডিস্টিল / সেটআপলগুলি ব্যবহার করেন তবে একটি প্রায় (খালি) ফাঁকা setup.pyফাইল তৈরি করা প্রয়োজন , এমনকি আপনি যদি সম্পূর্ণ বিবরণী ব্যবহার করছেন setup.cfg:

#!/usr/bin/env python
from setuptools import setup
setup()

আমিও সুপারিশ করি chmod +x setup.py

এই ক্ষেত্রে আপনি কেবল বিল্ড সিস্টেমে "এন্ট্রি পয়েন্ট" লিখছেন, এবং এটির জন্য setup()কেবল এটিই main()ফাংশন - তবে এখন traditionতিহ্যগতভাবে পাস হওয়া সমস্ত যুক্তিগুলি পরিবর্তে setup()পড়তে পারে setup.cfg

আপনি যদি এখনও setup.py sdistউত্স টার্বল তৈরি করতে চান তবে আপনি এখনও ব্যবহার করতে পারেন:

./setup.py sdist

আপনি যে কোনও বিকল্প বিল্ড সিস্টেমের মাধ্যমে সক্রিয় করা আছে pyproject.toml, যেমন ফ্লিট হিসাবেও চেষ্টা করতে পারেন ।


কেন এটিকে নিম্নমানের করা হচ্ছে তা নিশ্চিত নয়; এটি অন্যান্য সমাধান থাকলেও এটি মূলত সঠিক।
ইগুয়ানানাট

2
প্রশ্নের শিরোনাম " সেটআপ.পি ফাইল ব্যবহার না করে উত্স বিতরণ কীভাবে তৈরি করবেন ?" এই উত্তরটি কেবল "আপনি কীভাবে সরিয়ে দিয়েছেন একই সেটআপ.পি ফাইলটি কীভাবে পুনরায় তৈরি করবেন তা এখানে দেখানো হয়েছে" যা কার্যকর নয়।
প্লাটিপাস

হ্যাঁ, তবে এটি একটি ভুল বোঝাবুঝির উপর ভিত্তি করে তৈরি হয়েছিল setup.cfgযে একটি setup.pyডিকোলেটিরি লেখার অর্থ হ'ল সেটআপটুলগুলি ব্যবহার করার দরকার নেই, যা সত্য নয়। প্রশ্নের শিরোনামটি বিভ্রান্তিকর হওয়ায় কেবল উত্তরটি হ'ল না। তারা প্রশ্নের শিরোনামে লিখেছেন "তাহলে কীভাবে আপনি সেটআপলগুলি ব্যবহার করে .tar.gz ফাইলটি তৈরি করবেন ?" যা এই উত্তর সঠিকভাবে।
ইগুয়ানানাট

1
এটা আসলে সত্য। আপনি যদি পিইপি 517 ব্যবহার করেন তবে সেটআপলগুলিকে একটি সেটআপ.পি ফাইলের প্রয়োজন হয় না
পল

"যদি আপনি পিইপি 517 ব্যবহার করছেন" তবে বেশিরভাগ লোক না থাকলে। এটি এখনও অস্থায়ী, এবং প্যাকেজিং.পাইথন.আর.গ্রেও সবেমাত্র উল্লেখ করা হয়েছে । এটি অনুসন্ধান করার জন্য আপনি যদি না জানেন তবে এটি আপনার কাছে এমন কিছু নয়। আপনি যদি সেটআপলগুলিকে কাজ করতে চান তবে এটি সর্বদা এটি ব্যবহার করা সঠিক।
ইগুয়ানানাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.