পাইথন মডিউল / প্যাকেজ কীভাবে লিখবেন?


375

আমি কর্মক্ষেত্রে সাধারণ কাজের জন্য পাইথন স্ক্রিপ্ট তৈরি করে আসছি এবং অন্যদের ব্যবহারের জন্য এগুলি প্যাকেজিংয়ে সত্যিই বিরক্ত করিনি। এখন আমাকে একটি আরএসটি এপিআইয়ের জন্য পাইথন মোড়ক তৈরি করার জন্য বরাদ্দ করা হয়েছে। কীভাবে শুরু করবেন সে সম্পর্কে আমার একেবারেই ধারণা নেই এবং আমার সহায়তা দরকার।

আমি কি আছে:

(জাস্ট সম্ভব নির্দিষ্ট হতে চান) আমি virtualenv প্রস্তুত, এটি এর আপ GitHub মধ্যে , পাইথন জন্য .gitignore ফাইল সেখানে হিসাবে ভাল, প্লাস, অনুরোধ গ্রন্থাগার বিশ্রাম এপিআই সাথে ইন্টারঅ্যাক্ট করার জন্য। এটাই.

এখানে বর্তমান ডিরেক্টরি ট্রি

.
├── bin
   └── /the usual stuff/
├── include
   └── /the usual stuff/
├── lib
   └── python2.7
       └── /the usual stuff/
├── local
   └── /the usual stuff/
└── README.md

27 directories, 280 files

আমি কখনই .পি ফাইলগুলি রাখি তাও জানি না।

আমি যা করতে চেয়েছিলাম:

"পাইপ ইনস্টল ..." দিয়ে পাইথন মডিউল ইনস্টল-সক্ষম করুন

যদি সম্ভব হয় তবে পাইথন মডিউলগুলি লেখার বিষয়ে ধাপে ধাপে প্রক্রিয়াটি আমি চাই।


15
আমি টিউটোরিয়াল (২.7) এর chapter ষ্ঠ অধ্যায় দিয়ে শুরু করব , বা এখানে x.x জন্য পাইথন মডিউল টিউটোরিয়ালের জন্য ইন্টারনেট অনুসন্ধান করুন এবং আপনি প্রচুর অন্যান্য পাবেন।
রোল্যান্ড স্মিথ


github.com/MacHu-GWU/pygitrepo- প্রকল্পটি এই গ্রন্থাগারটি আপনাকে স্ক্র্যাচ থেকে প্রকল্পের কঙ্কাল তৈরি করতে সহায়তা করে এবং আপনার প্রয়োজনীয় বৈশিষ্ট্যটি বাক্সের বাইরে রয়েছে।
ম্যাকসানহে

উত্তর:


424

মডিউল হল পাইথন সংজ্ঞা এবং বিবৃতি সম্বলিত একটি ফাইল। ফাইলের নামটি প্রত্যয়যুক্ত মডিউলটির নাম.py

hello.pyতারপরে নিম্নলিখিত ফাংশনটি লিখুন তৈরি করুন :

def helloworld():
   print "hello"

তারপরে আপনি আমদানি করতে পারেন hello:

>>> import hello
>>> hello.helloworld()
'hello'
>>>

অনেকগুলি দলকে গ্রুপ করতে .pyতাদের ফোল্ডারে রেখে দিন। পাইনের সাথে যে কোনও ফোল্ডারটিকে __init__.pyঅজগর দ্বারা মডিউল হিসাবে বিবেচনা করা হয় এবং আপনি তাদের একটি প্যাকেজ বলতে পারেন

|-HelloModule
  |_ __init__.py
  |_ hellomodule.py

আপনি আপনার মডিউলে সাধারণভাবে আমদানি বিবৃতিটি নিয়ে যেতে পারেন।

আরও তথ্যের জন্য, দেখুন 6.4। প্যাকেজগুলি


7
এটি কি শেষ হবে: হেলোমোডুল থেকে আমদানি হেলোমোডুল? মডিউল ফোল্ডারে এটি হ্যালো হতে পারে, তাই এটি হ্যালোমডুল আমদানি হ্যালো হতে হবে
nycynik

বর্তমানে পাইথনের সাথে চারপাশে খেলে এবং এই উত্তরটি আমার কাছে উপস্থিত হওয়া সর্বাধিক সহায়ক হতে হবে। এটি খুব ভালভাবে ব্যাখ্যা করে, ধন্যবাদ
ড্যারেন ওয়েনরাইট

"পিপ ইনস্টল" কমান্ডটি কাজ করবে না, এটি ব্যবহার করতে আপনাকে একই ডিরেক্টরিতে থাকতে হবে
ম্যাথ কোডার 101

234

পাইথন 3 - 18 নভেম্বর 2015 আপডেট হয়েছে

গ্রহণযোগ্য উত্তরটি দরকারী খুঁজে পেয়েছে, তবুও আমার নিজের অভিজ্ঞতার ভিত্তিতে অন্যের সুবিধার জন্য বেশ কয়েকটি পয়েন্টে প্রসারিত করতে চেয়েছে।

মডিউল: মডিউল একটি ফাইল যা পাইথন সংজ্ঞা এবং বিবৃতি ধারণ করে। ফাইলের নামটি প্রত্যয় .py সংযুক্ত যুক্ত মডিউলটির নাম।

মডিউল উদাহরণ : ধরুন বর্তমান ডিরেক্টরিতে আমাদের কাছে একটি একক অজগর স্ক্রিপ্ট রয়েছে, এখানে আমি এটিকে mymodule.py বলছি

Mymodule.py ফাইলটিতে নিম্নলিখিত কোড রয়েছে:

def myfunc():
    print("Hello!")

যদি আমরা বর্তমান ডিরেক্টরি থেকে পাইথন 3 ইন্টারপ্রেটারটি চালনা করি তবে আমরা নিম্নলিখিত বিভিন্ন উপায়ে মাইফুনক ফাংশনটি আমদানি করতে এবং চালাতে পারি (আপনি সাধারণত নিম্নলিখিতগুলির মধ্যে একটি চয়ন করতে চান):

>>> import mymodule
>>> mymodule.myfunc()
Hello!
>>> from mymodule import myfunc
>>> myfunc()
Hello!
>>> from mymodule import *
>>> myfunc()
Hello!

ঠিক আছে, তাই এটি যথেষ্ট সহজ ছিল।

এখন ধরে নিন আপনার বর্তমান ভার্চিং ডিরেক্টরি থেকে অ্যাড-হক চালানোর পরিবর্তে মডিউলটির নাম স্পেস দেওয়ার জন্য এই মডিউলটিকে তার নিজস্ব ডেডিকেটেড ফোল্ডারে রাখার দরকার আছে। এটি এখানে প্যাকেজের ধারণাটি ব্যাখ্যা করার মতো ।

প্যাকেজ : প্যাকেজগুলি হ'ল "ডটেড মডিউল নামগুলি" ব্যবহার করে পাইথনের মডিউল নামস্থান গঠনের একটি উপায়। উদাহরণস্বরূপ, মডিউলটির নাম এবি একটি নামক প্যাকেজে বি নামের একটি উপ-মডেলকে ডিজাইন করে ঠিক যেমন মডিউলগুলির ব্যবহার বিভিন্ন মডিউলটির লেখককে একে অপরের গ্লোবাল ভেরিয়েবল নামগুলি নিয়ে চিন্তাভাবনা থেকে বাঁচায়, বিন্দুযুক্ত মডিউল নামের ব্যবহার লেখককে সংরক্ষণ করে একে অপরের মডিউলের নাম সম্পর্কে চিন্তা না করা থেকে NumPy বা পাইথন ইমেজিং লাইব্রেরির মতো মাল্টি-মডিউল প্যাকেজগুলি।

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

.
└── mypackage
    ├── __init__.py
    └── mymodule.py

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

আমাদের বর্তমান ওয়ার্কিং ডিরেক্টরিটি মাইপ্যাকেজ নামে পরিচিত ফোল্ডারের এক স্তরের উপরে

$ ls
mypackage

যদি আমরা এখন পাইথন 3 ইন্টারপ্রেটারটি চালাই তবে আমরা প্রয়োজনীয় ফাংশন মাইফুনক সমন্বিত মডিউল মাইমডিউল.পি আমদানি করতে এবং চালাতে পারি (আপনি সাধারণত নিম্নলিখিতগুলির মধ্যে একটি চয়ন করতে চান):

>>> import mypackage
>>> from mypackage import mymodule
>>> mymodule.myfunc()
Hello!
>>> import mypackage.mymodule
>>> mypackage.mymodule.myfunc()
Hello!
>>> from mypackage import mymodule
>>> mymodule.myfunc()
Hello!
>>> from mypackage.mymodule import myfunc
>>> myfunc()
Hello!
>>> from mypackage.mymodule import *
>>> myfunc()
Hello!

পাইথন 3 ধরে নিলে, এখানে মডিউলগুলির জন্য দুর্দান্ত ডকুমেন্টেশন রয়েছে

প্যাকেজ এবং মডিউলগুলির জন্য নামকরণের সম্মেলনের ক্ষেত্রে, সাধারণ নির্দেশিকা পিইপি - 0008 এ দেওয়া হয় - দয়া করে প্যাকেজ এবং মডিউল নামগুলি দেখুন

মডিউলগুলির সংক্ষিপ্ত, সমস্ত-ছোট নাম থাকা উচিত। অধ্যয়নগুলি মডিউলটির নামে ব্যবহারযোগ্য যদি এটি পঠনযোগ্যতা উন্নত করে। পাইথন প্যাকেজগুলির ছোট, সমস্ত ছোট ছোট নাম থাকতে হবে যদিও আন্ডারস্কোর ব্যবহার নিরুত্সাহিত করা হয়েছে।


5
খুব সহজ ব্যাখ্যা। আপনি যদি মাইপ্যাকেজের ভিতরে অন্য একটি ফোল্ডার রাখতে চান?
অনুজ গুপ্ত

3
অন্তর্ভুক্তি আপনি কী লিখেছেন তার উপর সম্পূর্ণ নির্ভর করে। আপনি যদি আপনার মডিউলটিতে কোনও ফাংশনের বাইরে জিনিস রাখেন, আপনি পছন্দ মতো কল করার সময় এটি সরিয়ে দেবেন import mypackage। ক্ষেত্রে আপনি মডিউল থেকে একটি ফাংশন আমদানি করতে চান (এমনকি একটি ফাইল) ব্যবহার করা ভাল from module import function। ক্ষেত্রে একটি সাবফোল্ডার from subfolder.module import functionযাতে আপনি কেবল function()অজানা ফায়ার অন্যান্য কোড অংশগুলি কল করতে পারেন । এছাড়াও, আপনার from module import *যদি সত্যিই প্রয়োজন না হয় তবে ব্যবহার করবেন না।
এম 3 এন্ড

5
একমাত্র প্রশ্ন বাকি আমি কীভাবে সমস্ত কিছু আমদানির জন্য প্যাকেজ পেতে পারি import mypackage? যুক্ত import mymoduleকরা __init__.pyকাজ করে না ..
576i

ঝরঝরে ব্যাখ্যা! তবে, আমার কাছে একটি প্রশ্ন আছে যদি নম্পি একটি প্যাকেজ হয় তবে আমি কীভাবে আমার দোভাষীগুলিতে numpy.cos (1) চালাতে পারি কারণ এটি মনে হয় যে এটি নিখোঁজ হওয়ার মধ্যে একটি মডিউল নাম। কোন?
ব্যবহারকারী 1935724

3
পিপ কেমন?
whackamadoodle3000

199

যেহেতু কেউ এখনও ওপি-র এই প্রশ্নটি আবৃত করেননি:

আমি যা করতে চেয়েছিলাম:

"পাইপ ইনস্টল ..." দিয়ে পাইথন মডিউল ইনস্টল-সক্ষম করুন

পিপিআইতে setuptoolsএবং ব্যবহার করে আপনার প্যাকেজটি প্রস্তুত এবং আপলোড করার প্রাথমিক পদক্ষেপগুলি দেখানো এখানে একটি নিখুঁত ন্যূনতম উদাহরণ twine

এটি কোনওভাবেই কমপক্ষে টিউটোরিয়ালটি পড়ার বিকল্প নয় , এটি একেবারে মৌলিক উদাহরণে আবৃত হওয়ার চেয়ে অনেক বেশি।

প্যাকেজটি তৈরি করা ইতিমধ্যে এখানে অন্যান্য উত্তরগুলি দ্বারা কভার করা হয়েছে, সুতরাং আসুন আমরা ধরে নিই যে আমরা আমাদের ধাপটি coveredেকে রেখেছি এবং আমাদের প্রকল্প কাঠামোটি এরকম:

.
└── hellostackoverflow/
    ├── __init__.py
    └── hellostackoverflow.py

setuptoolsপ্যাকেজিংয়ের জন্য ব্যবহার করার জন্য, আমাদের একটি ফাইল যুক্ত করতে setup.pyহবে এটি আমাদের প্রকল্পের মূল ফোল্ডারে যায়:

.
├── setup.py
└── hellostackoverflow/
    ├── __init__.py
    └── hellostackoverflow.py

সর্বনিম্ন, আমরা আমাদের প্যাকেজের জন্য মেটাডেটা নির্দিষ্ট করি, আমাদের setup.pyদেখতে এটির মতো হবে:

from setuptools import setup

setup(
    name='hellostackoverflow',
    version='0.0.1',
    description='a pip-installable package example',
    license='MIT',
    packages=['hellostackoverflow'],
    author='Benjamin Gerfelder',
    author_email='benjamin.gerfelder@gmail.com',
    keywords=['example'],
    url='https://github.com/bgse/hellostackoverflow'
)

যেহেতু আমরা সেট করেছি license='MIT', আমরা আমাদের প্রকল্পে একটি অনুলিপি LICENCE.txtপুনরায় স্ট্রাকচারডটেক্সটে একটি রিডমি ফাইলের পাশাপাশি অন্তর্ভুক্ত করব README.rst:

.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
    ├── __init__.py
    └── hellostackoverflow.py

এই মুহুর্তে, আমরা ব্যবহার করে প্যাকেজিং শুরু করতে প্রস্তুত setuptools, যদি আমাদের এটি ইতিমধ্যে ইনস্টল না করা থাকে তবে আমরা এটি দিয়ে এটি ইনস্টল করতে পারি pip:

pip install setuptools

এটি করতে এবং একটি তৈরি করার জন্য source distribution, আমাদের প্রকল্পের মূল ফোল্ডারে আমরা setup.pyকমান্ড লাইন থেকে আমাদের কল করি , উল্লেখ করে আমরা চাই sdist:

python setup.py sdist

এটি আমাদের বিতরণ প্যাকেজ এবং ডিম-তথ্য তৈরি করবে এবং এর ফলে একটি ফোল্ডার কাঠামো তৈরি হবে, এতে আমাদের প্যাকেজটি এতে রয়েছে dist:

.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
    ├── __init__.py
    └── hellostackoverflow.py

এই মুহুর্তে, আমাদের কাছে একটি প্যাকেজ রয়েছে যা আমরা ব্যবহার করে ইনস্টল করতে পারি pip, সুতরাং আমাদের প্রকল্পের মূল থেকে (ধরে নিবেন যে এই নামকরণের মতো আপনার সমস্ত নামকরণ রয়েছে):

pip install ./dist/hellostackoverflow-0.0.1.tar.gz

যদি সবকিছু ঠিকঠাক হয়, আমরা এখন পাইথন ইন্টারপ্রেটারটি খুলতে পারি, আমি কোনও প্রবলেম এড়াতে আমাদের প্রকল্প ডিরেক্টরিটির বাইরে কোথাও বলব, এবং আমাদের চকচকে নতুন প্যাকেজটি ব্যবহার করার চেষ্টা করব:

Python 3.5.2 (default, Sep 14 2017, 22:51:06) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'

এখন যেহেতু আমরা প্যাকেজ ইনস্টল এবং কাজগুলি নিশ্চিত করেছি, আমরা এটি পিপিআইতে আপলোড করতে পারি।

যেহেতু আমরা আমাদের পরীক্ষাগুলির সাহায্যে লাইভ সংগ্রহস্থলকে কলুষিত করতে চাই না, তাই আমরা পরীক্ষার ভাণ্ডারগুলির জন্য একটি অ্যাকাউন্ট তৈরি করি এবং twineআপলোড প্রক্রিয়াটির জন্য ইনস্টল করি :

pip install twine

এখন আমরা প্রায় সেখানে রয়েছি, আমাদের অ্যাকাউন্ট তৈরি হয়ে আমরা কেবল twineআমাদের প্যাকেজটি আপলোড করতে বলি , এটি আমাদের শংসাপত্রগুলির জন্য জিজ্ঞাসা করবে এবং আমাদের প্যাকেজটিকে নির্দিষ্ট ভাণ্ডারে আপলোড করবে:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

আমরা এখন পাইপআই পরীক্ষার সংগ্রহস্থলে আমাদের অ্যাকাউন্টে লগইন করতে পারি এবং কিছুক্ষণের জন্য আমাদের সতেজ আপলোড করা প্যাকেজটিতে আশ্চর্য হয়েছি এবং তারপরে এটি ব্যবহার করতে পারি pip:

pip install --index-url https://test.pypi.org/simple/ hellostackoverflow

আমরা দেখতে পাচ্ছি যে, প্রাথমিক প্রক্রিয়া খুব জটিল নয় not যেমনটি আমি আগেই বলেছি, এখানে আচ্ছাদন করার চেয়ে এটিতে আরও অনেক কিছুই রয়েছে, তাই আরও গভীরতার সাথে ব্যাখ্যা করার জন্য টিউটোরিয়ালটি এগিয়ে যান এবং পড়ুন


আমার প্যাকেজ ঠিক পরে প্রকাশিত হবে setuptools?
U10-ফরওয়ার্ড

@ ইউ 9-ফরোয়ার্ড নং, প্রকাশনাটি সম্পন্ন হয়েছে twineতবে আপনি আপনার প্যাকেজটি তৈরি করার পরে প্রকাশের আগে স্থানীয়ভাবে পরীক্ষা করতে পারেন setuptools
বিজিএসে

9

একবার আপনি আপনার নির্বাচিত কমান্ডগুলি সংজ্ঞায়িত করার পরে, আপনি কেবলমাত্র অজগর প্রোগ্রাম ফাইলগুলিতে সংরক্ষিত ফাইলটি Lib ফোল্ডারে টেনে আনতে পারেন।

>>> import mymodule 
>>> mymodule.myfunc()

2

"হ্যালো.পি" নামে একটি ফাইল তৈরি করুন

যদি আপনি পাইথন ২.x ব্যবহার করেন

def func():
    print "Hello"

যদি আপনি পাইথন ৩.x ব্যবহার করেন

def func():
    print("Hello")

ফাইল চালান। তারপরে, আপনি নিম্নলিখিত চেষ্টা করতে পারেন:

>>> import hello
>>> hello.func()
Hello

আপনি যদি কিছুটা কঠিন চান তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

যদি আপনি পাইথন ২.x ব্যবহার করেন

def say(text):
    print text

যদি আপনি পাইথন ৩.x ব্যবহার করেন

def say(text):
    print(text)

সংজ্ঞায়নের পাশের প্রথমটি দেখুন? ওটা জরুরি. এটি একটি যা আপনি সংজ্ঞায়নের মধ্যে ব্যবহার করতে পারেন।

পাঠ্য - আপনি প্রোগ্রামটি যা চান তা বলতে চাইলে আপনি এটি ব্যবহার করতে পারেন। এর নাম অনুসারে এটি পাঠ্য। আমি আশা করি আপনি পাঠ্যটির অর্থ কী জানেন। এর অর্থ "শব্দ" বা "বাক্য"।

ফাইল চালান। তারপরে, আপনি পাইথন ৩.x ব্যবহার করতে পারলে আপনি নিম্নলিখিতটি চেষ্টা করতে পারেন:

>>> import hello
>>> hello.say("hi")
hi
>>> from hello import say
>>> say("test")
test

পাইথন ২.x এর জন্য - আমি পাইথন ৩ এর সাথে একই জিনিস অনুমান করি? কোন ধারণা নেই. পাইথন ২.x এ ভুল করে থাকলে আমাকে সংশোধন করুন (আমি পাইথন ২ জানি তবে পাইথন 3 ব্যবহার করি)


2

আমি স্ক্র্যাচ থেকে সহজেই একটি প্রকল্প কঙ্কাল শুরু করার জন্য একটি প্রকল্প তৈরি করেছিhttps://github.com/MacHu-GWU/pygitrepo- প্রকল্প

এবং আপনি একটি পরীক্ষা প্রকল্প তৈরি করতে পারেন, আসুন ধরা যাক learn_creating_py_package

বিভিন্ন উদ্দেশ্যে আপনার কী উপাদান থাকা উচিত তা আপনি শিখতে পারেন :

  • ভার্চুয়ালেনভ তৈরি করুন
  • নিজেই ইনস্টল করুন
  • ইউনিটেস্ট চালান
  • কোড কভারেজ রান করুন
  • বিল্ড ডকুমেন্ট
  • নথি মোতায়েন করুন
  • বিভিন্ন অজগর সংস্করণে ইউনিটেট চালান
  • পিওয়াইপি-তে মোতায়েন করুন

ব্যবহারের সুবিধা pygitrepoঐ ক্লান্তিকর স্বয়ংক্রিয়ভাবে আপনার নিজেই তৈরি করেছেন এবং খাপ খাওয়ানো হয় package_name, project_name, github_account, document host service, windows or macos or linux

প্রো এর মতো অজগর প্রকল্পটি বিকাশ করার জন্য এটি ভাল জায়গা।

আশা করি এটি সাহায্য করতে পারে।

ধন্যবাদ.

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